root/trunk/AE-go_GameServer/src/com/aionemu/gameserver/services/RespawnService.java
| 1369 | 1515 | ||
|---|---|---|---|
20 | 20 | ||
21 | import com.aionemu.gameserver.model.gameobjects.Npc; | 21 | import com.aionemu.gameserver.model.gameobjects.Npc; |
22 | import com.aionemu.gameserver.model.gameobjects.VisibleObject; | 22 | import com.aionemu.gameserver.model.gameobjects.VisibleObject; |
23 | import com.aionemu.gameserver.model.templates.spawn.SpawnTemplate; | ||
24 | import com.aionemu.gameserver.model.templates.spawn.SpawnTime; | 23 | import com.aionemu.gameserver.model.templates.spawn.SpawnTime; |
25 | import com.aionemu.gameserver.utils.ThreadPoolManager; | 24 | import com.aionemu.gameserver.utils.ThreadPoolManager; |
26 | import com.aionemu.gameserver.utils.gametime.DayTime; | 25 | import com.aionemu.gameserver.utils.gametime.DayTime; |
27 | import com.aionemu.gameserver.utils.gametime.GameTimeManager; | 26 | import com.aionemu.gameserver.utils.gametime.GameTimeManager; |
28 | import com.aionemu.gameserver.world.World; | 27 | import com.aionemu.gameserver.world.World; |
28 | import com.google.inject.Inject; | ||
29 | 29 | ||
30 | /** | 30 | /** |
31 | * @author ATracer | 31 | * @author ATracer |
... | ... | ||
34 | public class RespawnService | 34 | public class RespawnService |
35 | { | 35 | { |
36 | private static final int DECAY_DEFAULT_DELAY = 20000; | 36 | private static final int DECAY_DEFAULT_DELAY = 20000; |
37 | |||
38 | @Inject | ||
39 | private InstanceService instanceService; | ||
37 | 40 | ||
38 | /** | 41 | /** |
39 | * | 42 | * |
... | ... | ||
74 | } | 77 | } |
75 | 78 | ||
76 | int instanceId = visibleObject.getInstanceId(); | 79 | int instanceId = visibleObject.getInstanceId(); |
77 | //TODO remove this if/else | 80 | int worldId = visibleObject.getSpawn().getWorldId(); |
78 | if(visibleObject.getSpawn().isNoRespawn(instanceId)) | 81 | boolean instanceExists = instanceService.isInstanceExist(worldId, instanceId); |
82 | | ||
83 | if(visibleObject.getSpawn().isNoRespawn(instanceId) || !instanceExists) | ||
79 | { | 84 | { |
80 | visibleObject.getController().delete(); | 85 | visibleObject.getController().delete(); |
81 | } | 86 | } |
82 | else | 87 | else |
83 | { | 88 | { |
84 | exchangeSpawnTemplate(visibleObject); | 89 | visibleObject.getSpawn().getSpawnGroup().exchangeSpawn(visibleObject); |
85 | world.setPosition(visibleObject, visibleObject.getSpawn().getWorldId(), visibleObject.getSpawn().getX(), visibleObject.getSpawn().getY(), visibleObject.getSpawn().getZ(), visibleObject.getSpawn().getHeading()); | 90 | world.setPosition(visibleObject, worldId, visibleObject.getSpawn().getX(), visibleObject.getSpawn().getY(), visibleObject.getSpawn().getZ(), visibleObject.getSpawn().getHeading()); |
86 | //call onRespawn before actual spawning | 91 | //call onRespawn before actual spawning |
87 | visibleObject.getController().onRespawn(); | 92 | visibleObject.getController().onRespawn(); |
88 | world.spawn(visibleObject); | 93 | world.spawn(visibleObject); |
89 | } | 94 | } |
90 | } | 95 | } |
91 | |||
92 | private synchronized void exchangeSpawnTemplate(final VisibleObject visibleObject) | ||
93 | { | ||
94 | int instanceId = visibleObject.getInstanceId(); | ||
95 | SpawnTemplate nextSpawn = visibleObject.getSpawn().getSpawnGroup().getNextAvailableTemplate(instanceId); | ||
96 | if(nextSpawn != null) | ||
97 | visibleObject.setSpawn(nextSpawn); | ||
98 | } | ||
99 | 96 | ||
100 | }, interval * 1000); | 97 | }, interval * 1000); |
101 | } | 98 | } |
Download diff