Changeset 990

User picture

Author: lord_rex

(2010/02/07 21:58) About 2 years ago

PacketBroadcaster Implemented.
- HP/MP/EffectIcons/NearbyQuest Broadcast.
- Added missing usage of SM_UPDATESTAT_HP, like SM_UPDATESTAT_MP.
- Broadcasting periodically, so even a lot of calls will send queued types only once.
- Lower server/client load.
- Thanks for l2j-free team for base.
- Thanks for MrPoke.

Affected files

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

989990
226
		owner.getActiveRegion().getWorld().updatePosition(owner, owner.getX(), owner.getY(), owner.getZ(), owner.getHeading());			
226
		owner.getActiveRegion().getWorld().updatePosition(owner, owner.getX(), owner.getY(), owner.getZ(), owner.getHeading());			
227
		PacketSendUtility.broadcastPacket(owner, new SM_MOVE(owner, owner.getX(), owner.getY(), owner.getZ(), 0, 0, 0, owner.getHeading(),
MovementType.MOVEMENT_STOP));	
227
		PacketSendUtility.broadcastPacket(owner, new SM_MOVE(owner, owner.getX(), owner.getY(), owner.getZ(), 0, 0, 0, owner.getHeading(),
MovementType.MOVEMENT_STOP));	
228
	}
228
	}
229
	
230
	public void updateNearbyQuestList()
231
	{
232
		// TODO
233
	}
234
	
235
	public void updateNearbyQuestListImpl()
236
	{
237
		// TODO
238
	}
229
}
239
}

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

989990
26
import com.aionemu.gameserver.network.aion.serverpackets.SM_ABNORMAL_EFFECT;
26
import com.aionemu.gameserver.network.aion.serverpackets.SM_ABNORMAL_EFFECT;
27
import com.aionemu.gameserver.network.aion.serverpackets.SM_ABNORMAL_STATE;
27
import com.aionemu.gameserver.network.aion.serverpackets.SM_ABNORMAL_STATE;
28
import com.aionemu.gameserver.skillengine.model.Effect;
28
import com.aionemu.gameserver.skillengine.model.Effect;
29
import com.aionemu.gameserver.taskmanager.PacketBroadcaster.BroadcastMode;
29
import com.aionemu.gameserver.utils.PacketSendUtility;
30
import com.aionemu.gameserver.utils.PacketSendUtility;
30
31
31
/**
32
/**
...
...
118
	}
119
	}
119
120
120
	/**
121
	/**
121
	 *  Adds icon of effect to owner (only for Player objects)
122
	 *  
123
	 * @param effect
124
	 */
125
	public void updatePlayerEffectIcons()
126
	{
127
		PacketSendUtility.sendPacket((Player) owner,
128
			new SM_ABNORMAL_STATE(effectMap.values().toArray(new Effect[effectMap.size()])));
129
	}
130
131
	/**
132
	 * 
122
	 * 
133
	 * @param effect
123
	 * @param effect
134
	 */
124
	 */
...
...
194
	{
184
	{
195
		return abnormals;
185
		return abnormals;
196
	}
186
	}
187
	
188
	public void updatePlayerEffectIcons()
189
	{
190
		getOwner().addPacketBroadcastMask(BroadcastMode.UPDATE_PLAYER_EFFECT_ICONS);
191
	}
192
	
193
	public void updatePlayerEffectIconsImpl()
194
	{
195
		PacketSendUtility.sendPacket((Player) owner,
196
			new SM_ABNORMAL_STATE(effectMap.values().toArray(new Effect[effectMap.size()])));
197
	}
197
}
198
}

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

989990
59
import com.aionemu.gameserver.skillengine.model.HopType;
59
import com.aionemu.gameserver.skillengine.model.HopType;
60
import com.aionemu.gameserver.skillengine.model.Skill;
60
import com.aionemu.gameserver.skillengine.model.Skill;
61
import com.aionemu.gameserver.skillengine.model.Skill.SkillType;
61
import com.aionemu.gameserver.skillengine.model.Skill.SkillType;
62
import com.aionemu.gameserver.taskmanager.PacketBroadcaster.BroadcastMode;
62
import com.aionemu.gameserver.utils.PacketSendUtility;
63
import com.aionemu.gameserver.utils.PacketSendUtility;
63
import com.aionemu.gameserver.utils.ThreadPoolManager;
64
import com.aionemu.gameserver.utils.ThreadPoolManager;
64
import com.aionemu.gameserver.world.World;
65
import com.aionemu.gameserver.world.World;
...
...
115
				}
116
				}
116
			}
117
			}
117
			if (update)
118
			if (update)
118
				PacketSendUtility.sendPacket( getOwner(), new SM_NEARBY_QUESTS(getOwner().getNearbyQuests()));
119
				updateNearbyQuestList();
119
		}
120
		}
120
		else if(object instanceof Gatherable)
121
		else if(object instanceof Gatherable)
121
		{
122
		{
...
...
146
				}
147
				}
147
			}
148
			}
148
			if (update)
149
			if (update)
149
				PacketSendUtility.sendPacket( getOwner(), new SM_NEARBY_QUESTS(getOwner().getNearbyQuests()));
150
				updateNearbyQuestList();
150
		}
151
		}
151
152
152
		PacketSendUtility.sendPacket(getOwner(), new SM_DELETE(object));
153
		PacketSendUtility.sendPacket(getOwner(), new SM_DELETE(object));
...
...
547
    public boolean isEnemy (Player player) {
548
    public boolean isEnemy (Player player) {
548
        return player.getCommonData().getRace() != getOwner().getCommonData().getRace();
549
        return player.getCommonData().getRace() != getOwner().getCommonData().getRace();
549
    }
550
    }
551
    
552
	@Override
553
	public void updateNearbyQuestList()
554
	{
555
		getOwner().addPacketBroadcastMask(BroadcastMode.UPDATE_NEARBY_QUEST_LIST);
556
	}
557
	
558
	@Override
559
	public void updateNearbyQuestListImpl()
560
	{
561
		PacketSendUtility.sendPacket(getOwner(), new SM_NEARBY_QUESTS(getOwner().getNearbyQuests()));
562
	}
550
}
563
}

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

989990
31
import com.aionemu.gameserver.services.ItemService;
31
import com.aionemu.gameserver.services.ItemService;
32
import com.aionemu.gameserver.skillengine.SkillEngine;
32
import com.aionemu.gameserver.skillengine.SkillEngine;
33
import com.aionemu.gameserver.spawnengine.SpawnEngine;
33
import com.aionemu.gameserver.spawnengine.SpawnEngine;
34
import com.aionemu.gameserver.taskmanager.PacketBroadcaster;
34
import com.aionemu.gameserver.utils.DeadlockDetector;
35
import com.aionemu.gameserver.utils.DeadlockDetector;
35
import com.aionemu.gameserver.utils.ThreadPoolManager;
36
import com.aionemu.gameserver.utils.ThreadPoolManager;
36
import com.aionemu.gameserver.utils.ThreadUncaughtExceptionHandler;
37
import com.aionemu.gameserver.utils.ThreadUncaughtExceptionHandler;
...
...
94
		QuestEngine.getInstance().setItemService(gs.injector.getInstance(ItemService.class), gs.injector.getInstance(SpawnEngine.class));
95
		QuestEngine.getInstance().setItemService(gs.injector.getInstance(ItemService.class), gs.injector.getInstance(SpawnEngine.class));
95
		ZoneManager.getInstance().initializeZones();
96
		ZoneManager.getInstance().initializeZones();
96
		QuestHandlersManager.init(gs.injector);
97
		QuestHandlersManager.init(gs.injector);
98
		PacketBroadcaster.getInstance();
97
		Util.printMemoryUsage(log);
99
		Util.printMemoryUsage(log);
98
		log.info("#################################################");
100
		log.info("#################################################");
99
		log.info("AE Game Server started in " + (System.currentTimeMillis() - start) / 1000 + " seconds.");
101
		log.info("AE Game Server started in " + (System.currentTimeMillis() - start) / 1000 + " seconds.");

Updated trunk/AE-go_GameServer/src/com/aionemu/gameserver/model/gameobjects/Creature.java Download diff

989990
26
import com.aionemu.gameserver.model.templates.VisibleObjectTemplate;
26
import com.aionemu.gameserver.model.templates.VisibleObjectTemplate;
27
import com.aionemu.gameserver.model.templates.spawn.SpawnTemplate;
27
import com.aionemu.gameserver.model.templates.spawn.SpawnTemplate;
28
import com.aionemu.gameserver.skillengine.model.Skill;
28
import com.aionemu.gameserver.skillengine.model.Skill;
29
import com.aionemu.gameserver.taskmanager.PacketBroadcaster;
30
import com.aionemu.gameserver.taskmanager.PacketBroadcaster.BroadcastMode;
29
import com.aionemu.gameserver.world.WorldPosition;
31
import com.aionemu.gameserver.world.WorldPosition;
30
32
31
/**
33
/**
...
...
315
	{
317
	{
316
		return moveController;
318
		return moveController;
317
	}
319
	}
320
	
321
	private volatile byte packetBroadcastMask;
322
323
	public final void addPacketBroadcastMask(BroadcastMode mode)
324
	{
325
		packetBroadcastMask |= mode.mask();
326
327
		PacketBroadcaster.getInstance().add(this);
328
	}
329
330
	public final void removePacketBroadcastMask(BroadcastMode mode)
331
	{
332
		packetBroadcastMask &= ~mode.mask();
333
	}
334
335
	public final byte getPacketBroadcastMask()
336
	{
337
		return packetBroadcastMask;
338
	}
318
}
339
}

Updated trunk/AE-go_GameServer/src/com/aionemu/gameserver/model/gameobjects/stats/CreatureLifeStats.java Download diff

989990
183
		return currentMp;
183
		return currentMp;
184
	}
184
	}
185
	
185
	
186
186
	
187
	/**
187
	protected void sendAttackStatusPacketUpdate()
188
	 * Informs about HP change
189
	 */
190
	protected void sendHpPacketUpdate()
191
	{
188
	{
192
		if(owner == null)
189
		if(owner == null)
193
		{
190
		{

Updated trunk/AE-go_GameServer/src/com/aionemu/gameserver/model/gameobjects/stats/NpcLifeStats.java Download diff

989990
36
	@Override
36
	@Override
37
	protected void onIncreaseHp()
37
	protected void onIncreaseHp()
38
	{
38
	{
39
		sendHpPacketUpdate();
39
		sendAttackStatusPacketUpdate();
40
	}
40
	}
41
41
42
	@Override
42
	@Override

Updated trunk/AE-go_GameServer/src/com/aionemu/gameserver/model/gameobjects/stats/PlayerLifeStats.java Download diff

989990
19
import com.aionemu.gameserver.model.gameobjects.player.Player;
19
import com.aionemu.gameserver.model.gameobjects.player.Player;
20
import com.aionemu.gameserver.model.gameobjects.state.CreatureState;
20
import com.aionemu.gameserver.model.gameobjects.state.CreatureState;
21
import com.aionemu.gameserver.model.group.GroupEvent;
21
import com.aionemu.gameserver.model.group.GroupEvent;
22
import com.aionemu.gameserver.network.aion.serverpackets.SM_STATUPDATE_HP;
22
import com.aionemu.gameserver.network.aion.serverpackets.SM_STATUPDATE_MP;
23
import com.aionemu.gameserver.network.aion.serverpackets.SM_STATUPDATE_MP;
24
import com.aionemu.gameserver.taskmanager.PacketBroadcaster.BroadcastMode;
23
import com.aionemu.gameserver.utils.PacketSendUtility;
25
import com.aionemu.gameserver.utils.PacketSendUtility;
24
26
25
/**
27
/**
...
...
37
	@Override
39
	@Override
38
	protected void onReduceHp()
40
	protected void onReduceHp()
39
	{
41
	{
42
		sendHpPacketUpdate();
40
		triggerRestoreTask();
43
		triggerRestoreTask();
41
		sendGroupPacketUpdate();	
44
		sendGroupPacketUpdate();	
42
	}
45
	}
...
...
61
	protected void onIncreaseHp()
64
	protected void onIncreaseHp()
62
	{
65
	{
63
		sendHpPacketUpdate();
66
		sendHpPacketUpdate();
67
		sendAttackStatusPacketUpdate();
64
		sendGroupPacketUpdate();
68
		sendGroupPacketUpdate();
65
	}
69
	}
66
67
	/**
68
	 * Informs player about MP change
69
	 */
70
	private void sendMpPacketUpdate()
71
	{
72
		if(owner == null)
73
			return;
74
75
		PacketSendUtility.sendPacket((Player) owner, new SM_STATUPDATE_MP(currentMp, getMaxMp()));
76
	}
77
	
70
	
78
	private void sendGroupPacketUpdate()
71
	private void sendGroupPacketUpdate()
79
	{
72
	{
...
...
107
			currentRegenMp *= 8;
100
			currentRegenMp *= 8;
108
		increaseMp(currentRegenMp);
101
		increaseMp(currentRegenMp);
109
	}
102
	}
103
	
104
	public void sendHpPacketUpdate()
105
	{
106
		owner.addPacketBroadcastMask(BroadcastMode.UPDATE_PLAYER_HP_STAT);
107
	}
108
	
109
	public void sendHpPacketUpdateImpl()
110
	{
111
		if(owner == null)
112
			return;
113
		
114
		PacketSendUtility.sendPacket((Player) owner, new SM_STATUPDATE_HP(currentHp, getMaxHp()));
115
	}
116
	
117
	public void sendMpPacketUpdate()
118
	{
119
		owner.addPacketBroadcastMask(BroadcastMode.UPDATE_PLAYER_MP_STAT);
120
	}
121
	
122
	public void sendMpPacketUpdateImpl()
123
	{
124
		if(owner == null)
125
			return;
126
127
		PacketSendUtility.sendPacket((Player) owner, new SM_STATUPDATE_MP(currentMp, getMaxMp()));
128
	}
110
}
129
}

Added trunk/AE-go_GameServer/src/com/aionemu/gameserver/taskmanager/PacketBroadcaster.java

Show contents