@Override public void onRespawn() { super.onRespawn(); cancelTask(TaskId.DECAY); Npc owner = getOwner(); if (owner != null && owner.isCustom()) { DAOManager.getDAO(SpawnDAO.class) .setSpawned(owner.getSpawn().getSpawnId(), owner.getObjectId(), true); } // set state from npc templates if (owner.getObjectTemplate().getState() != 0) owner.setState(owner.getObjectTemplate().getState()); else owner.setState(CreatureState.NPC_IDLE); owner.getLifeStats().setCurrentHpPercent(100); owner.getLifeStats().setCurrentMpPercent(100); owner.getAi().handleEvent(Event.RESPAWNED); if (owner.getSpawn().getNpcFlyState() != 0) { owner.setState(CreatureState.FLYING); } }
/** * Constructs new <tt>SM_NPC_INFO </tt> packet * * @param npc visible npc. * @param player */ public SM_NPC_INFO(Npc npc, Player player) { this.npc = npc; npcTemplate = npc.getObjectTemplate(); if (npcTemplate.getNpcType() == NpcType.NEUTRAL || npcTemplate.getNpcType() == NpcType.ARTIFACT) { if (player.isAggroIconTo(npc.getTribe())) npcTypeId = NpcType.NEUTRAL.getId(); else npcTypeId = NpcType.NON_ATTACKABLE.getId(); } else { npcTypeId = (player.isAggroIconTo(npc.getTribe()) ? NpcType.AGGRESSIVE.getId() : npcTemplate.getNpcType().getId()); } npcId = npc.getNpcId(); }
@Override public void onAttack( final Creature creature, int skillId, TYPE type, int damage, boolean notifyAttackedObservers) { if (getOwner().getLifeStats().isAlreadyDead()) return; super.onAttack(creature, skillId, type, damage, notifyAttackedObservers); Npc npc = getOwner(); Creature actingCreature = creature.getActingCreature(); if (actingCreature instanceof Player) if (QuestEngine.getInstance().onAttack(new QuestCookie(npc, (Player) actingCreature, 0, 0))) return; AI<?> ai = npc.getAi(); if (ai instanceof DummyAi) { log.warn("CHECKPOINT: npc attacked without ai " + npc.getObjectTemplate().getTemplateId()); return; } if (getOwner().getTribe().equals("DUMMY")) damage = 0; getOwner() .getKnownList() .doOnAllNpcs( new Executor<Npc>() { @Override public boolean run(Npc tmp) { if (getOwner().isSupportFrom(tmp) && MathUtil.isInRange(getOwner(), tmp, 10)) { tmp.getAggroList().addHate(creature, 10); } return true; } }, true); npc.getLifeStats().reduceHp(damage, actingCreature); PacketSendUtility.broadcastPacket(npc, new SM_ATTACK_STATUS(npc, type, skillId, damage)); }