03-08-2012, 11:55 AM
Доброго дня. Класс L2NpcWalkerInstance extends L2NpcInstance, не хочет понимать всяческих проверок на зоны, и нпц этого типа отказываются умирать, я уже не знаю какую можно написать проверку((. Перепробовал очень многое.
А зделать нужно, всего лишь, что бы нпц этого типа могли умирать от аттак простых игроков, при условии проверки на зону (если не в городе то можно атаковать\убить). Очень вас прошу, помогите наконец то разобраться с этим..
Вот код класса и всего что я наворотил в нем:
А зделать нужно, всего лишь, что бы нпц этого типа могли умирать от аттак простых игроков, при условии проверки на зону (если не в городе то можно атаковать\убить). Очень вас прошу, помогите наконец то разобраться с этим..
Вот код класса и всего что я наворотил в нем:
Код:
package com.l2jfrozen.gameserver.model.actor.instance;
import java.util.Map;
import com.l2jfrozen.Config;
import com.l2jfrozen.gameserver.ai.CtrlIntention;
import com.l2jfrozen.gameserver.ai.L2AttackableAI;
import com.l2jfrozen.gameserver.model.L2Attackable;
import com.l2jfrozen.gameserver.ai.L2CharacterAI;
import com.l2jfrozen.gameserver.ai.L2NpcWalkerAI;
import com.l2jfrozen.gameserver.model.L2Character;
import com.l2jfrozen.gameserver.model.L2Object;
import com.l2jfrozen.gameserver.model.actor.instance.L2NpcInstance;
import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;
import com.l2jfrozen.gameserver.model.actor.instance.L2MonsterInstance;
import com.l2jfrozen.gameserver.model.zone.type.L2TownZone;
import com.l2jfrozen.gameserver.managers.TownManager;
import com.l2jfrozen.gameserver.network.serverpackets.ActionFailed;
import com.l2jfrozen.gameserver.network.serverpackets.MyTargetSelected;
import com.l2jfrozen.gameserver.network.serverpackets.CreatureSay;
import com.l2jfrozen.gameserver.templates.L2NpcTemplate;
import static com.l2jfrozen.gameserver.ai.CtrlIntention.AI_INTENTION_ATTACK;
public class L2NpcWalkerInstance extends L2NpcInstance
{
public L2NpcWalkerInstance(int objectId, L2NpcTemplate template)
{
super(objectId, template);
setAI(new L2NpcWalkerAI(new L2NpcWalkerAIAccessor()));
}
@Override
public void setAI(L2CharacterAI newAI)
{
if(_ai == null)
{
super.setAI(newAI);
}
}
@Override
public void onSpawn()
{
((L2NpcWalkerAI) getAI()).setHomeX(getX());
((L2NpcWalkerAI) getAI()).setHomeY(getY());
((L2NpcWalkerAI) getAI()).setHomeZ(getZ());
}
public void broadcastChat(String chat)
{
Map<Integer, L2PcInstance> _knownPlayers = getKnownList().getKnownPlayers();
if(_knownPlayers == null)
{
if(Config.DEVELOPER)
{
_log.info("broadcastChat _players == null");
}
return;
}
//we send message to known players only!
if(_knownPlayers.size() > 0)
{
CreatureSay cs = new CreatureSay(getObjectId(), 0, getName(), chat);
//we interact and list players here
for(L2PcInstance players : _knownPlayers.values())
{
//finally send packet :D
players.sendPacket(cs);
}
cs = null;
}
}
/**
* NPCs are immortal
*
* @param i ignore it
* @param attacker ignore it
* @param awake ignore it
*/
@Override
public void reduceCurrentHp(double i, L2Character attacker, boolean awake)
{
super.reduceCurrentHp(i, attacker, awake);
}
/**
* NPCs are immortal
*
* @param killer ignore it
* @return false
**/
/*@Override
public boolean doDie(L2Character killer)
{
if(!super.doDie(killer))
return false;
return true;
}*/
@Override
public L2CharacterAI getAI()
{
return super.getAI();
}
protected class L2NpcWalkerAIAccessor extends L2Character.AIAccessor
{
/**
* AI can't be deattached.
*/
@Override
public void detachAI()
{}
}
public static boolean isInsidePeaceZone(L2Object attacker, L2Object target)
{
if(target == null)
return false;
if(attacker instanceof L2Character && target instanceof L2NpcWalkerInstance)
return ((L2Character) target).isInsideZone(ZONE_PEACE) || ((L2Character) attacker).isInsideZone(ZONE_PEACE);
if(attacker instanceof L2Character)
return TownManager.getInstance().getTown(target.getX(), target.getY(), target.getZ()) != null || ((L2Character) attacker).isInsideZone(ZONE_PEACE);
return TownManager.getInstance().getTown(target.getX(), target.getY(), target.getZ()) != null || TownManager.getInstance().getTown(attacker.getX(), attacker.getY(), attacker.getZ()) != null;
}
public void onAction(L2PcInstance player)
{
if(getObjectId() != player.getTargetId())
{
player.setTarget(this);
MyTargetSelected my = new MyTargetSelected(getObjectId(), 0);
player.sendPacket(my);
//player.getAI().setIntention(CtrlIntention.AI_INTENTION_INTERACT, null);
}
else
{
player.sendPacket(ActionFailed.STATIC_PACKET);
//player.getAI().setIntention(CtrlIntention.AI_INTENTION_INTERACT, null);
}
}
}