root/trunk/AE-go_GameServer/src/com/aionemu/gameserver/services/RespawnService.java

13691515
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
	}