package ai; import static com.aionemu.gameserver.network.aion.serverpackets.SM_SYSTEM_MESSAGE.*; import com.aionemu.gameserver.ai.AIActions; import com.aionemu.gameserver.ai.AIName; import com.aionemu.gameserver.ai.AIRequest; import com.aionemu.gameserver.ai.NpcAI; import com.aionemu.gameserver.ai.poll.AIQuestion; import com.aionemu.gameserver.model.gameobjects.Creature; import com.aionemu.gameserver.model.gameobjects.Kisk; import com.aionemu.gameserver.model.gameobjects.Npc; import com.aionemu.gameserver.model.gameobjects.player.Player; import com.aionemu.gameserver.network.aion.serverpackets.SM_QUESTION_WINDOW; import com.aionemu.gameserver.services.KiskService; import com.aionemu.gameserver.utils.PacketSendUtility; /** * @author ATracer, Source */ @AIName("kisk") public class KiskAI extends NpcAI { public KiskAI(Npc owner) { super(owner); } @Override public Kisk getOwner() { return (Kisk) super.getOwner(); } @Override protected void handleAttack(Creature creature) { if (getLifeStats().isFullyRestoredHp()) getOwner().broadcastPacket(STR_BINDSTONE_IS_ATTACKED()); } @Override protected void handleDespawned() { KiskService.getInstance().removeKisk(getOwner()); if (isDead()) getOwner().broadcastPacket(STR_BINDSTONE_IS_DESTROYED()); else getOwner().broadcastPacket(STR_BINDSTONE_IS_REMOVED()); super.handleDespawned(); } @Override protected void handleDialogStart(Player player) { if (player.getKisk() == getOwner()) { PacketSendUtility.sendPacket(player, STR_BINDSTONE_ALREADY_REGISTERED()); return; } if (getOwner().canBind(player)) { AIActions.addRequest(this, player, SM_QUESTION_WINDOW.STR_ASK_REGISTER_BINDSTONE, new AIRequest() { private boolean decisionTaken = false; @Override public void acceptRequest(Creature requester, Player responder, int requestId) { if (!decisionTaken) { // Check again if it's full (If they waited to press OK) if (!getOwner().canBind(responder)) { PacketSendUtility.sendPacket(responder, STR_CANNOT_REGISTER_BINDSTONE_HAVE_NO_AUTHORITY()); return; } KiskService.getInstance().onBind(getOwner(), responder); } } @Override public void denyRequest(Creature requester, Player responder) { decisionTaken = true; } }); } else if (getOwner().getCurrentMemberCount() >= getOwner().getMaxMembers()) PacketSendUtility.sendPacket(player, STR_CANNOT_REGISTER_BINDSTONE_FULL()); else PacketSendUtility.sendPacket(player, STR_CANNOT_REGISTER_BINDSTONE_HAVE_NO_AUTHORITY()); } @Override public boolean ask(AIQuestion question) { return switch (question) { case ALLOW_DECAY, ALLOW_RESPAWN, REWARD_AP_XP_DP_LOOT, REMOVE_EFFECTS_ON_MAP_REGION_DEACTIVATE -> false; case IS_IMMUNE_TO_ABNORMAL_STATES -> true; default -> super.ask(question); }; } }