Рейтинг темы:
  • 0 Голос(ов) - 0 в среднем
  • 1
  • 2
  • 3
  • 4
  • 5
карма за убийство L2NpcWalker
#1
Пожалуйста подскажите как реализовать добавление кармы и + в счетчик ПК игроку, если он убьет L2NpcWalkerInstance?

А еще перед этим, что бы при ударе этого инстанца - игрок становился флагнутым (pvpStatus)
clan: Soprano :redlol:
Ответ
#2
Также как и при ПК.
Ответ
#3
гениальный ответ. [Изображение: icon14.gif]
очень помогло.
clan: Soprano :redlol:
Ответ
#4
doDie Написал:гениальный ответ. [Изображение: icon14.gif]
очень помогло.

Найдите код где при убийстве L2Character дают карму и добавьте проверку на L2NpcWalkerInstance.
Fortuna - non penis, in manus non recipe.
Ответ
#5
Цитата:Найдите код где при убийстве L2Character
беда в том, что не могу найти..
clan: Soprano :redlol:
Ответ
#6
doDie Написал:беда в том, что не могу найти..
ну значит учите английский язык, ибо не увидеть методы doDie/onDeath может только слепой...
Ответ
#7
да я знаю эти методы, но в них нет ничего, что вообще связанно с кармой или пвпстатусом.

Код:
    public boolean doDie(L2Character killer)
    {
        // killing is only possible one time
        synchronized (this)
        {
            if(isKilledAlready())
                return false;

            setIsKilledAlready(true);
        }
        // Set target to null and cancel Attack or Cast
        setTarget(null);

        // Stop movement
        stopMove(null);

        // Stop HP/MP/CP Regeneration task
        getStatus().stopHpMpRegeneration();

        // Stop all active skills effects in progress on the L2Character,
        // if the Character isn't affected by Soul of The Phoenix or Salvation
        if(this instanceof L2PlayableInstance && ((L2PlayableInstance) this).isPhoenixBlessed())
        {
            if(((L2PlayableInstance) this).isNoblesseBlessed())
            {
                ((L2PlayableInstance) this).stopNoblesseBlessing(null);
            }
            if(((L2PlayableInstance) this).getCharmOfLuck())
            {
                ((L2PlayableInstance) this).stopCharmOfLuck(null);
            }
        }
        // Same thing if the Character isn't a Noblesse Blessed L2PlayableInstance
        else if(this instanceof L2PlayableInstance && ((L2PlayableInstance) this).isNoblesseBlessed())
        {
            ((L2PlayableInstance) this).stopNoblesseBlessing(null);

            if(((L2PlayableInstance) this).getCharmOfLuck())
            {
                ((L2PlayableInstance) this).stopCharmOfLuck(null);
            }
        }
        else
        {
            //to avoid DM Remove buffs on die
            if((this instanceof L2PcInstance && ((L2PcInstance)this)._inEventDM && DM.is_started())){
                
                if(Config.DM_REMOVE_BUFFS_ON_DIE)
                    stopAllEffects();
                
            }
            else if (Config.LEAVE_BUFFS_ON_DIE) //this means that the player is not in event dm or is not player
            {
                stopAllEffects();
            }
            
        }

        //if killer is the same then the most damager/hated
        L2Character mostHated = null;
        if(this instanceof L2Attackable){
            mostHated = ((L2Attackable)this)._mostHated;
        }
        
        if(mostHated!=null && isInsideRadius(mostHated, 200, false, false)){
            calculateRewards(mostHated);
        }else{
            calculateRewards(killer);
        }
        
        // Send the Server->Client packet StatusUpdate with current HP and MP to all other L2PcInstance to inform
        broadcastStatusUpdate();

        // Notify L2Character AI
        getAI().notifyEvent(CtrlEvent.EVT_DEAD, null);

        if(getWorldRegion() != null)
        {
            getWorldRegion().[color=red][B]onDeath[/B][/color](this);
        }

        // Notify Quest of character's death
        for(QuestState qs : getNotifyQuestOfDeath())
        {
            qs.getQuest().notifyDeath((killer == null ? this : killer), this, qs);
        }

        getNotifyQuestOfDeath().clear();

        getAttackByList().clear();

        //If character is PhoenixBlessed a resurrection popup will show up
        if(this instanceof L2PlayableInstance && ((L2PlayableInstance) this).isPhoenixBlessed())
        {
            ((L2PcInstance) this).reviveRequest(((L2PcInstance) this), null, false);
        }
        fireEvent(EventType.DIE.name, new Object[]
        {
            killer
        });
        return true;
    }
clan: Soprano :redlol:
Ответ
#8
в методе doDie волкера пропишите, что если его кильнул чар/пет с какими-то условиями - то начислять карму чару.

Пример начисления смотрите в методе onKillUpdatePvPKarma l2pcinstance
Ответ
#9
Цитата:в методе doDie волкера пропишите, что если его кильнул чар/пет с какими-то условиями - то начислять карму чару.

Пример начисления смотрите в методе onKillUpdatePvPKarma l2pcinstance
я настолько в общей сложности и сам понимаю.

мне бы чуть детальнее обьяснить..

в методе doDie - L2Character killer
а в onkillupdatepvpkarma - L2Character target

разницу чувствуешь?

и + у меня:

public class L2NpcWalkerInstance extends L2Attackable
public final class L2PcInstance extends L2PlayableInstance

я не могу использовать таким образом таргет..

Добавлено через 1 час 18 минут
не уверен, что правильно, но сделал как то так:

Код:
    //@Override
    public boolean doDie(L2Character killer, L2PcInstance pc)
    {
        // Kill the L2PcInstance
        if(!super.doDie(killer))
            return false;
        
        if(killer != null)
        {
            L2PcInstance pk = null;

            if(killer instanceof L2PcInstance)
            {
                pk = (L2PcInstance) killer;
            }
            
            if(pk != null)
            {
                pk.kills.add(getName());
            }
            
            //setExpBeforeDeath(0);
            
            /*
            if(!(isInsideZone(ZONE_PVP)))
            {
                //boolean isKillerPc = killer instanceof L2PcInstance;
                pc.onDieUpdateKarma();
            }
            */
            
            pk = null;
        }
        pc.updatePvPStatus();
        pc.setKarma(240);
        return true;
    }

Добавлено через 1 час 45 минут
нет, не получилось=(
clan: Soprano :redlol:
Ответ
#10
doDie Написал:
Код:
    //@Override
    public boolean doDie(L2Character killer, L2PcInstance pc)
Добавлено через 1 час 45 минут
нет, не получилось=(

Зачем тут второй пар-р?
Ответ


Возможно похожие темы ...
Тема Автор Ответы Просмотры Последний пост
  ПК-Итем (Возможность получения итема за убийство в ПК) Aristocrat 0 1,914 11-11-2009, 06:34 AM
Последний пост: Aristocrat

Перейти к форуму:


Пользователи, просматривающие эту тему: 1 Гость(ей)