Тема: Item by Npc ID
Показать сообщение отдельно
Непрочитано 15.03.2011, 23:24   #1
Аватар для krisadr
Пользователь

Автор темы (Топик Стартер) 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. с меня спасибки
krisadr вне форума Ответить с цитированием