Changeset 1515

User picture

Author: ATracer

(2010/03/14 13:21) Almost 2 years ago

small fixes in respawn service and SM_ABNORMAL_ packets.

Affected files

Updated trunk/AE-go_GameServer/data/scripts/system/handlers/quest/ascension/_1006Ascension.java Download diff

15141515
46
import com.aionemu.gameserver.utils.PacketSendUtility;
46
import com.aionemu.gameserver.utils.PacketSendUtility;
47
import com.aionemu.gameserver.utils.ThreadPoolManager;
47
import com.aionemu.gameserver.utils.ThreadPoolManager;
48
import com.aionemu.gameserver.world.World;
48
import com.aionemu.gameserver.world.World;
49
import com.aionemu.gameserver.world.WorldMap;
50
import com.aionemu.gameserver.world.WorldMapInstance;
49
import com.aionemu.gameserver.world.WorldMapInstance;
51
import com.aionemu.gameserver.world.zone.ZoneName;
50
import com.aionemu.gameserver.world.zone.ZoneName;
52
import com.google.inject.Inject;
51
import com.google.inject.Inject;

Updated trunk/AE-go_GameServer/data/scripts/system/handlers/quest/ascension/_2008Ascension.java Download diff

15141515
43
import com.aionemu.gameserver.utils.PacketSendUtility;
43
import com.aionemu.gameserver.utils.PacketSendUtility;
44
import com.aionemu.gameserver.utils.ThreadPoolManager;
44
import com.aionemu.gameserver.utils.ThreadPoolManager;
45
import com.aionemu.gameserver.world.World;
45
import com.aionemu.gameserver.world.World;
46
import com.aionemu.gameserver.world.WorldMap;
47
import com.aionemu.gameserver.world.WorldMapInstance;
46
import com.aionemu.gameserver.world.WorldMapInstance;
48
import com.google.inject.Inject;
47
import com.google.inject.Inject;
49
48

Updated trunk/AE-go_GameServer/src/com/aionemu/gameserver/controllers/effect/EffectController.java Download diff

15141515
16
 */
16
 */
17
package com.aionemu.gameserver.controllers.effect;
17
package com.aionemu.gameserver.controllers.effect;
18
18
19
import java.util.ArrayList;
20
import java.util.Iterator;
21
import java.util.List;
19
import java.util.Map;
22
import java.util.Map;
20
import java.util.concurrent.ConcurrentHashMap;
23
import java.util.concurrent.ConcurrentHashMap;
21
24
...
...
126
	 */
129
	 */
127
	public void broadCastEffects()
130
	public void broadCastEffects()
128
	{	
131
	{	
132
		List<Effect> effects = getAbnormalEffects();
129
		PacketSendUtility.broadcastPacket(getOwner(),
133
		PacketSendUtility.broadcastPacket(getOwner(),
130
			new SM_ABNORMAL_EFFECT(getOwner().getObjectId(), abnormals,
134
			new SM_ABNORMAL_EFFECT(getOwner().getObjectId(), abnormals, effects));	
131
				abnormalEffectMap.values().toArray(new Effect[abnormalEffectMap.size()])));	
132
	}
135
	}
133
136
134
	/**
137
	/**
...
...
138
	 */
141
	 */
139
	public void sendEffectIconsTo(Player player)
142
	public void sendEffectIconsTo(Player player)
140
	{
143
	{
144
		List<Effect> effects = getAbnormalEffects();
141
		PacketSendUtility.sendPacket(player, new SM_ABNORMAL_EFFECT(getOwner().getObjectId(),
145
		PacketSendUtility.sendPacket(player, new SM_ABNORMAL_EFFECT(getOwner().getObjectId(),
142
			abnormals, abnormalEffectMap.values().toArray(new Effect[abnormalEffectMap.size()])));
146
			abnormals, effects));
143
	}
147
	}
144
148
145
	/**
149
	/**
...
...
246
	
250
	
247
	public void updatePlayerEffectIconsImpl()
251
	public void updatePlayerEffectIconsImpl()
248
	{
252
	{
253
		List<Effect> effects = getAbnormalEffects();
254
249
		PacketSendUtility.sendPacket((Player) owner,
255
		PacketSendUtility.sendPacket((Player) owner,
250
			new SM_ABNORMAL_STATE(abnormalEffectMap.values().toArray(new Effect[abnormalEffectMap.size()]), abnormals));
256
			new SM_ABNORMAL_STATE(effects, abnormals));
251
	}
257
	}
252
258
259
	private List<Effect> getAbnormalEffects()
260
	{
261
		List<Effect> effects = new ArrayList<Effect>();
262
		Iterator<Effect> iterator = iterator();
263
		while(iterator.hasNext())
264
		{
265
			Effect effect = iterator.next();
266
			if(effect != null)
267
				effects.add(effect);
268
		}
269
		return effects;
270
	}
271
253
	/**
272
	/**
254
	 *  ABNORMAL EFFECTS
273
	 *  ABNORMAL EFFECTS
255
	 */
274
	 */
...
...
291
	{
310
	{
292
		return abnormals;
311
		return abnormals;
293
	}
312
	}
313
	
314
	/**
315
	 * 
316
	 * @return
317
	 */
318
	public Iterator<Effect> iterator()
319
	{
320
		return abnormalEffectMap.values().iterator();
321
	}
294
322
295
}
323
}

Updated trunk/AE-go_GameServer/src/com/aionemu/gameserver/model/templates/spawn/SpawnGroup.java Download diff

15141515
29
import javax.xml.bind.annotation.XmlType;
29
import javax.xml.bind.annotation.XmlType;
30
30
31
import com.aionemu.commons.utils.Rnd;
31
import com.aionemu.commons.utils.Rnd;
32
import com.aionemu.gameserver.model.gameobjects.VisibleObject;
32
import com.aionemu.gameserver.spawnengine.SpawnHandlerType;
33
import com.aionemu.gameserver.spawnengine.SpawnHandlerType;
33
34
34
35
...
...
212
			lastSpawnedTemplate.remove(instanceIndex);
213
			lastSpawnedTemplate.remove(instanceIndex);
213
	}
214
	}
214
	
215
	
216
	/**
217
	 *  Check whether pool size is equal to number of defined objects
218
	 *  For such pools no exchange template should be done
219
	 *  
220
	 * @return
221
	 */
222
	public boolean isFullPool()
223
	{
224
		return pool == objects.size();
225
	}
226
227
	/**
228
	 * @param visibleObject
229
	 */
230
	public synchronized void  exchangeSpawn(VisibleObject visibleObject)
231
	{
232
		if(isFullPool())
233
			return;
234
		
235
		int instanceId = visibleObject.getInstanceId();
236
		SpawnTemplate nextSpawn = getNextAvailableTemplate(instanceId);	
237
		if(nextSpawn != null)
238
			visibleObject.setSpawn(nextSpawn);
239
	}
240
	
215
}
241
}

Updated trunk/AE-go_GameServer/src/com/aionemu/gameserver/network/aion/serverpackets/SM_ABNORMAL_EFFECT.java Download diff

15141515
17
package com.aionemu.gameserver.network.aion.serverpackets;
17
package com.aionemu.gameserver.network.aion.serverpackets;
18
18
19
import java.nio.ByteBuffer;
19
import java.nio.ByteBuffer;
20
import java.util.Collection;
20
21
21
import com.aionemu.gameserver.network.aion.AionConnection;
22
import com.aionemu.gameserver.network.aion.AionConnection;
22
import com.aionemu.gameserver.network.aion.AionServerPacket;
23
import com.aionemu.gameserver.network.aion.AionServerPacket;
...
...
29
{	
30
{	
30
	private int effectedId;
31
	private int effectedId;
31
	private int abnormals;
32
	private int abnormals;
32
	private Effect[] effects;
33
	private Collection<Effect> effects;
33
	
34
	
34
	public SM_ABNORMAL_EFFECT(int effectedId, int abnormals,  Effect[] effects)
35
	public SM_ABNORMAL_EFFECT(int effectedId, int abnormals,  Collection<Effect> effects)
35
	{
36
	{
36
		this.effects = effects;
37
		this.effects = effects;
37
		this.abnormals = abnormals;
38
		this.abnormals = abnormals;
...
...
46
		writeD(buf, 0); //unk
47
		writeD(buf, 0); //unk
47
		writeD(buf, abnormals); //unk
48
		writeD(buf, abnormals); //unk
48
49
49
		writeH(buf, effects.length); //effects size
50
		writeH(buf, effects.size()); //effects size
50
		
51
		
51
		for(Effect effect : effects)
52
		for(Effect effect : effects)
52
		{
53
		{

Updated trunk/AE-go_GameServer/src/com/aionemu/gameserver/network/aion/serverpackets/SM_ABNORMAL_STATE.java Download diff

15141515
17
package com.aionemu.gameserver.network.aion.serverpackets;
17
package com.aionemu.gameserver.network.aion.serverpackets;
18
18
19
import java.nio.ByteBuffer;
19
import java.nio.ByteBuffer;
20
import java.util.Collection;
20
21
21
import com.aionemu.gameserver.network.aion.AionConnection;
22
import com.aionemu.gameserver.network.aion.AionConnection;
22
import com.aionemu.gameserver.network.aion.AionServerPacket;
23
import com.aionemu.gameserver.network.aion.AionServerPacket;
...
...
28
 */
29
 */
29
public class SM_ABNORMAL_STATE extends AionServerPacket
30
public class SM_ABNORMAL_STATE extends AionServerPacket
30
{
31
{
31
	private Effect[] effects;
32
	private Collection<Effect> effects;
32
	private int abnormals;
33
	private int abnormals;
33
	
34
	
34
	public SM_ABNORMAL_STATE(Effect[] effects, int abnormals)
35
	public SM_ABNORMAL_STATE(Collection<Effect> effects, int abnormals)
35
	{
36
	{
36
		this.effects = effects;
37
		this.effects = effects;
37
		this.abnormals = abnormals;
38
		this.abnormals = abnormals;
...
...
41
	protected void writeImpl(AionConnection con, ByteBuffer buf)
42
	protected void writeImpl(AionConnection con, ByteBuffer buf)
42
	{
43
	{
43
		writeD(buf, abnormals);
44
		writeD(buf, abnormals);
44
		writeH(buf, effects.length); 
45
		writeH(buf, effects.size()); 
45
		
46
		
46
		for(Effect effect : effects)
47
		for(Effect effect : effects)
47
		{
48
		{

Updated trunk/AE-go_GameServer/src/com/aionemu/gameserver/services/InstanceService.java Download diff

15141515
222
		world.setPosition(player, entryPoint.getMapId(), 1, entryPoint.getX(), entryPoint.getY(),
222
		world.setPosition(player, entryPoint.getMapId(), 1, entryPoint.getX(), entryPoint.getY(),
223
			entryPoint.getZ(), player.getHeading());
223
			entryPoint.getZ(), player.getHeading());
224
	}
224
	}
225
226
	/**
227
	 * @param worldId
228
	 * @param instanceId
229
	 * @return
230
	 */
231
	public boolean isInstanceExist(int worldId, int instanceId)
232
	{
233
		return world.getWorldMap(worldId).getWorldMapInstanceById(instanceId) != null;
234
	}
225
}
235
}

Updated trunk/AE-go_GameServer/src/com/aionemu/gameserver/services/MailService.java Download diff

15141515
35
import com.aionemu.gameserver.model.gameobjects.player.PlayerCommonData;
35
import com.aionemu.gameserver.model.gameobjects.player.PlayerCommonData;
36
import com.aionemu.gameserver.model.gameobjects.player.Storage;
36
import com.aionemu.gameserver.model.gameobjects.player.Storage;
37
import com.aionemu.gameserver.model.gameobjects.player.StorageType;
37
import com.aionemu.gameserver.model.gameobjects.player.StorageType;
38
import com.aionemu.gameserver.model.templates.item.ItemQuality;
39
import com.aionemu.gameserver.model.templates.mail.MailMessage;
38
import com.aionemu.gameserver.model.templates.mail.MailMessage;
40
import com.aionemu.gameserver.network.aion.serverpackets.SM_DELETE_ITEM;
39
import com.aionemu.gameserver.network.aion.serverpackets.SM_DELETE_ITEM;
41
import com.aionemu.gameserver.network.aion.serverpackets.SM_INVENTORY_UPDATE;
40
import com.aionemu.gameserver.network.aion.serverpackets.SM_INVENTORY_UPDATE;

Updated trunk/AE-go_GameServer/src/com/aionemu/gameserver/services/RespawnService.java Download diff

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