root/trunk/AE-go_GameServer/src/com/aionemu/gameserver/controllers/NpcController.java
| 965 | 1003 | ||
|---|---|---|---|
18 | 18 | ||
19 | import java.util.concurrent.Future; | 19 | import java.util.concurrent.Future; |
20 | 20 | ||
21 | import com.aionemu.gameserver.ai.events.Event; | ||
21 | import com.aionemu.gameserver.model.gameobjects.Npc; | 22 | import com.aionemu.gameserver.model.gameobjects.Npc; |
22 | import com.aionemu.gameserver.model.gameobjects.player.Player; | 23 | import com.aionemu.gameserver.model.gameobjects.player.Player; |
23 | import com.aionemu.gameserver.model.gameobjects.state.CreatureState; | 24 | import com.aionemu.gameserver.model.gameobjects.state.CreatureState; |
24 | import com.aionemu.gameserver.model.gameobjects.stats.NpcLifeStats; | 25 | import com.aionemu.gameserver.model.gameobjects.stats.NpcLifeStats; |
26 | import com.aionemu.gameserver.network.aion.serverpackets.SM_DELETE; | ||
25 | import com.aionemu.gameserver.network.aion.serverpackets.SM_DIALOG_WINDOW; | 27 | import com.aionemu.gameserver.network.aion.serverpackets.SM_DIALOG_WINDOW; |
26 | import com.aionemu.gameserver.questEngine.QuestEngine; | 28 | import com.aionemu.gameserver.questEngine.QuestEngine; |
27 | import com.aionemu.gameserver.questEngine.model.QuestEnv; | 29 | import com.aionemu.gameserver.questEngine.model.QuestEnv; |
30 | import com.aionemu.gameserver.services.DecayService; | ||
28 | import com.aionemu.gameserver.services.DropService; | 31 | import com.aionemu.gameserver.services.DropService; |
32 | import com.aionemu.gameserver.services.RespawnService; | ||
29 | import com.aionemu.gameserver.utils.PacketSendUtility; | 33 | import com.aionemu.gameserver.utils.PacketSendUtility; |
30 | 34 | ||
31 | /** | 35 | /** |
... | ... | ||
53 | this.getOwner().setState(CreatureState.NPC_IDLE); | 57 | this.getOwner().setState(CreatureState.NPC_IDLE); |
54 | this.getOwner().setLifeStats(new NpcLifeStats(getOwner())); | 58 | this.getOwner().setLifeStats(new NpcLifeStats(getOwner())); |
55 | } | 59 | } |
60 | |||
61 | public void onDespawn(boolean forced) | ||
62 | { | ||
63 | if(forced && decayTask != null) | ||
64 | decayTask.cancel(true); | ||
65 | |||
66 | Npc owner = getOwner(); | ||
67 | if(owner == null || !owner.isSpawned()) | ||
68 | return; | ||
69 | |||
70 | PacketSendUtility.broadcastPacket(owner, new SM_DELETE(owner)); | ||
71 | owner.getAi().handleEvent(Event.DESPAWN); | ||
72 | owner.getPosition().getWorld().despawn(owner); | ||
73 | decayTask = null; | ||
74 | } | ||
75 | |||
76 | @Override | ||
77 | public void onDie() | ||
78 | { | ||
79 | super.onDie(); | ||
80 | if(decayTask == null) | ||
81 | { | ||
82 | decayTask = DecayService.getInstance().scheduleDecayTask(this.getOwner()); | ||
83 | } | ||
84 | int instanceId = getOwner().getInstanceId(); | ||
85 | if(getOwner().getSpawn().isRespawn(instanceId)) | ||
86 | { | ||
87 | RespawnService.getInstance().scheduleRespawnTask(this.getOwner()); | ||
88 | } | ||
89 | } | ||
56 | 90 | ||
57 | @Override | 91 | @Override |
58 | public Npc getOwner() | 92 | public Npc getOwner() |
... | ... | ||
69 | PacketSendUtility.sendPacket(player, new SM_DIALOG_WINDOW(getOwner().getObjectId(), 10)); | 103 | PacketSendUtility.sendPacket(player, new SM_DIALOG_WINDOW(getOwner().getObjectId(), 10)); |
70 | } | 104 | } |
71 | 105 | ||
106 | /** | ||
107 | * This method should be caleed to make forced despawn of NPC and delete it from the world | ||
108 | */ | ||
109 | public void onDelete() | ||
110 | { | ||
111 | this.onDespawn(true); | ||
112 | this.delete(); | ||
113 | } | ||
72 | } | 114 | } |
Download diff