Форум администраторов игровых серверов

Форум администраторов игровых серверов (https://forum.zone-game.info/TT.php)
-   Работа со скриптами (https://forum.zone-game.info/forumdisplay.php?f=37)
-   -   Item by Npc ID (https://forum.zone-game.info/showthread.php?t=13097)

krisadr 15.03.2011 23:24

Item by Npc ID
 
Нужно было реализовать проверку на ид монстра в таргете при использовании предмета, т.к в XML указания ID НПС ничего не произошло...
Код:

<skill id="2905" levels="1" name="Growth Accelerator">
  <set name="itemConsumeId" val="14832"/>
  <set name="itemConsumeCount" val="1"/>
  <set name="target" val="TARGET_ONE" />
  <set name="skillType" val="DEBUFF" />
  <set name="isDebuff" val="true" />
  <set name="operateType" val="OP_ACTIVE" />
  <set name="hitTime" val="4000" />
  <set name="staticHitTime" val="true" />
  <set name="reuseDelay" val="2000" />
  <cond msgId="113" addName="1">
    <and>
        <not>
            <target mindistance="200" />
        </not>
    <target npcId="18793,18794,18795,18796,18797,18798" />
    </and>
  </cond>
</skill>

Решил создать хандлер

Код:

package handlers.itemhandlers;

import com.l2dc.gameserver.datatables.SkillTable;
import com.l2dc.gameserver.handler.IItemHandler;
import com.l2dc.gameserver.model.L2ItemInstance;
import com.l2dc.gameserver.model.L2Object;
import com.l2dc.gameserver.model.actor.L2Character;
import com.l2dc.gameserver.model.actor.L2Npc;
import com.l2dc.gameserver.model.actor.L2Playable;
import com.l2dc.gameserver.model.actor.instance.L2ChestInstance;
import com.l2dc.gameserver.model.actor.instance.L2MonsterInstance;
import com.l2dc.gameserver.model.actor.instance.L2PcInstance;
import com.l2dc.gameserver.network.SystemMessageId;
import com.l2dc.gameserver.network.serverpackets.ActionFailed;

/**
 * @author z00m
 */

public class UseItemByNpcId implements IItemHandler
{
        private static final int GROW_ACCELERATOR = 14832;
        private static final int[] _cocoons = { 18793, 18794, 18795, 18796, 18797, 18798 };

        public void useItem(L2Playable playable, L2ItemInstance item)
        {
            if (playable == null || item == null || !(playable instanceof L2PcInstance))
                                return;
                L2PcInstance activeChar = (L2PcInstance) playable;
                int itemId = item.getItemId();
                L2Object tgt = playable.getTarget();
                L2Npc target = (L2Npc)tgt;

                if (tgt instanceof L2PcInstance || tgt instanceof L2MonsterInstance || tgt instanceof L2ChestInstance || ((L2Character)tgt).isRaid())
                {
                        playable.sendPacket(SystemMessageId.INCORRECT_TARGET);
                        playable.sendPacket(ActionFailed.STATIC_PACKET);
                        return;
                }
                for(int c : _cocoons)
                {
                        if (itemId == GROW_ACCELERATOR && target.getNpcId() == c)
                        {
                                activeChar.useMagic(SkillTable.getInstance().getInfo(2905, 1), false, false);
                        }
                }
        }
}

Теперь хоть и при том если в таргете находится моб\сундук или прочая ерис (не НПС) пишет что неправильная цель...
А когда в таргете нужное НПС с нужным ID ничего не происходит... следовательно target.getNpcId() не отображает ID НПС в таргете... (да простят меня за тафтологию). Отсюда вопрос, какую процедуру прописать, чтобы отображало ID NPC в таргете именно НПС, так как эти долбаные коканы не должны быть монстрами.


PS. с меня спасибки

Gaikotsu 16.03.2011 04:22

Re: Item by Npc ID
 
а почему бы не сделать типа так
Код:

        <skill id="2905" levels="1" name="Growth Accelerator">
                <set name="itemConsumeId" val="14832" />
                <set name="itemConsumeCount" val="1" />
                <set name="target" val="TARGET_ONE" />
                <set name="skillType" val="DEBUFF" />
                <set name="operateType" val="OP_ACTIVE" />
                <set name="isReuseDelayPermanent" val="true" />
                <cond msg="Skill cannot be used due to unsuitable terms">
                        <or>
                                <target mobId="18793" />
                                <target mobId="18794" />
                                <target mobId="18795" />
                                <target mobId="18796" />
                                <target mobId="18797" />
                                <target mobId="18798" />
                        </or>
                </cond>
                <for />
        </skill>


krisadr 16.03.2011 22:14

Re: Item by Npc ID
 
спасибо за старания, но это тоже не пашет... видать чет там с таргетами недописали...

flashboom777 17.03.2011 00:27

Re: Item by Npc ID
 
я не особо шарю в ява(практически вобще не шарю=), но может так:

if (itemId == GROW_ACCELERATOR && target.getNpcId(ИД_НПС) == c) :D


P.S. надо учить яву)))

Ozzy 17.03.2011 00:44

Re: Item by Npc ID
 
Цитата:

Сообщение от flashboom777 (Сообщение 113359)
я не особо шарю в ява(практически вобще не шарю=), но может так:

if (itemId == GROW_ACCELERATOR && target.getNpcId(ИД_НПС) == c) :D


P.S. надо учить яву)))

Нет, не так

krisadr 17.03.2011 18:08

Re: Item by Npc ID
 
Цитата:

Сообщение от Ozzy (Сообщение 113365)
Нет, не так

ози порадовал))) нет не так, а как сказать наверно забыл ^^:+25 Duals:


Текущее время: 11:20. Часовой пояс GMT +3.

Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot