Let ServerPacket Handle the writting of packet data.
This commit is contained in:
@@ -637,6 +637,7 @@ namespace Game.Achievements
|
||||
achievementEarned.EarnerNativeRealm = achievementEarned.EarnerVirtualRealm = Global.WorldMgr.GetVirtualRealmAddress();
|
||||
achievementEarned.AchievementID = achievement.Id;
|
||||
achievementEarned.Time = Time.UnixTime;
|
||||
|
||||
if (!achievement.Flags.HasAnyFlag(AchievementFlags.TrackingFlag))
|
||||
_owner.SendMessageToSetInRange(achievementEarned, WorldConfig.GetFloatValue(WorldCfg.ListenRangeSay), true);
|
||||
else
|
||||
|
||||
@@ -349,13 +349,12 @@ namespace Game.BattleGrounds
|
||||
timer.Type = TimerType.Pvp;
|
||||
timer.TimeRemaining = countdownMaxForBGType - (GetElapsedTime() / 1000);
|
||||
timer.TotalTime = countdownMaxForBGType;
|
||||
timer.Write();
|
||||
|
||||
foreach (var guid in GetPlayers().Keys)
|
||||
{
|
||||
Player player = Global.ObjAccessor.FindPlayer(guid);
|
||||
if (player)
|
||||
player.SendPacket(timer, false);
|
||||
player.SendPacket(timer);
|
||||
}
|
||||
|
||||
m_CountdownTimer = 0;
|
||||
|
||||
@@ -376,11 +376,10 @@ namespace Game.Entities
|
||||
|
||||
DuelComplete duelCompleted = new DuelComplete();
|
||||
duelCompleted.Started = type != DuelCompleteType.Interrupted;
|
||||
duelCompleted.Write();
|
||||
SendPacket(duelCompleted, false);
|
||||
SendPacket(duelCompleted);
|
||||
|
||||
if (duel.opponent.GetSession() != null)
|
||||
duel.opponent.SendPacket(duelCompleted, false);
|
||||
duel.opponent.SendPacket(duelCompleted);
|
||||
|
||||
if (type != DuelCompleteType.Interrupted)
|
||||
{
|
||||
|
||||
@@ -982,9 +982,9 @@ namespace Game.Entities
|
||||
new PlayerAI GetAI() { return (PlayerAI)i_AI; }
|
||||
|
||||
//Network
|
||||
public void SendPacket(ServerPacket data, bool writePacket = true)
|
||||
public void SendPacket(ServerPacket data)
|
||||
{
|
||||
Session.SendPacket(data, writePacket);
|
||||
Session.SendPacket(data);
|
||||
}
|
||||
|
||||
//Time
|
||||
@@ -5298,6 +5298,8 @@ namespace Game.Entities
|
||||
if (WorldConfig.GetBoolValue(WorldCfg.AlwaysMaxskill)) // Max weapon skill when leveling up
|
||||
UpdateSkillsToMaxSkillsForLevel();
|
||||
|
||||
_ApplyAllLevelScaleItemMods(true); // Moved to above SetFullHealth so player will have full health from Heirlooms
|
||||
|
||||
// set current level health and mana/energy to maximum after applying all mods.
|
||||
SetFullHealth();
|
||||
SetPower(PowerType.Mana, GetMaxPower(PowerType.Mana));
|
||||
@@ -5306,8 +5308,6 @@ namespace Game.Entities
|
||||
SetPower(PowerType.Rage, GetMaxPower(PowerType.Rage));
|
||||
SetPower(PowerType.Focus, 0);
|
||||
|
||||
_ApplyAllLevelScaleItemMods(true);
|
||||
|
||||
// update level to hunter/summon pet
|
||||
Pet pet = GetPet();
|
||||
if (pet)
|
||||
|
||||
@@ -64,7 +64,7 @@ namespace Game.Entities
|
||||
playScene.Location = position;
|
||||
playScene.TransportGUID = GetPlayer().GetTransGUID();
|
||||
|
||||
GetPlayer().SendPacket(playScene, true);
|
||||
GetPlayer().SendPacket(playScene);
|
||||
|
||||
AddInstanceIdToSceneMap(sceneInstanceID, sceneTemplate);
|
||||
|
||||
@@ -91,7 +91,7 @@ namespace Game.Entities
|
||||
|
||||
CancelScene cancelScene = new CancelScene();
|
||||
cancelScene.SceneInstanceID = sceneInstanceID;
|
||||
GetPlayer().SendPacket(cancelScene, true);
|
||||
GetPlayer().SendPacket(cancelScene);
|
||||
}
|
||||
|
||||
public void OnSceneTrigger(uint sceneInstanceID, string triggerName)
|
||||
|
||||
@@ -94,8 +94,6 @@ namespace Game.Entities
|
||||
if (!player)
|
||||
return;
|
||||
|
||||
packet.Write();
|
||||
|
||||
AccountTypes gmSecLevel = (AccountTypes)WorldConfig.GetIntValue(WorldCfg.GmLevelInWhoList);
|
||||
foreach (var pair in _socialMap)
|
||||
{
|
||||
@@ -114,7 +112,7 @@ namespace Game.Entities
|
||||
continue;
|
||||
|
||||
if (player.IsVisibleGloballyFor(target))
|
||||
session.SendPacket(packet, false);
|
||||
session.SendPacket(packet);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -562,8 +562,6 @@ namespace Game.Entities
|
||||
i_source = src;
|
||||
i_message = msg;
|
||||
i_distSq = dist;
|
||||
|
||||
i_message.Write();
|
||||
}
|
||||
|
||||
bool IsInRangeHelper(WorldObject obj)
|
||||
@@ -636,7 +634,7 @@ namespace Game.Entities
|
||||
if (!player.IsAdvancedCombatLoggingEnabled())
|
||||
i_message.DisableAdvancedCombatLogging();
|
||||
|
||||
player.SendPacket(i_message, false);
|
||||
player.SendPacket(i_message);
|
||||
}
|
||||
|
||||
WorldObject i_source;
|
||||
|
||||
+6
-12
@@ -823,7 +823,6 @@ namespace Game.Groups
|
||||
lootRoll.Roll = rollNumber;
|
||||
lootRoll.RollType = rollType;
|
||||
roll.FillPacket(lootRoll.Item);
|
||||
lootRoll.Write();
|
||||
|
||||
foreach (var pair in roll.playerVote)
|
||||
{
|
||||
@@ -832,7 +831,7 @@ namespace Game.Groups
|
||||
continue;
|
||||
|
||||
if (pair.Value != RollType.NotValid)
|
||||
p.SendPacket(lootRoll, false);
|
||||
p.SendPacket(lootRoll);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -845,7 +844,6 @@ namespace Game.Groups
|
||||
lootRollWon.RollType = rollType;
|
||||
roll.FillPacket(lootRollWon.Item);
|
||||
lootRollWon.MainSpec = true; // offspec rolls not implemented
|
||||
lootRollWon.Write();
|
||||
|
||||
foreach (var pair in roll.playerVote)
|
||||
{
|
||||
@@ -854,7 +852,7 @@ namespace Game.Groups
|
||||
continue;
|
||||
|
||||
if (pair.Value != RollType.NotValid)
|
||||
p.SendPacket(lootRollWon, false);
|
||||
p.SendPacket(lootRollWon);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -863,7 +861,6 @@ namespace Game.Groups
|
||||
LootAllPassed lootAllPassed = new LootAllPassed();
|
||||
lootAllPassed.LootObj = roll.getTarget().GetGUID();
|
||||
roll.FillPacket(lootAllPassed.Item);
|
||||
lootAllPassed.Write();
|
||||
|
||||
foreach (var pair in roll.playerVote)
|
||||
{
|
||||
@@ -872,7 +869,7 @@ namespace Game.Groups
|
||||
continue;
|
||||
|
||||
if (pair.Value != RollType.NotValid)
|
||||
player.SendPacket(lootAllPassed, false);
|
||||
player.SendPacket(lootAllPassed);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -881,7 +878,6 @@ namespace Game.Groups
|
||||
LootRollsComplete lootRollsComplete = new LootRollsComplete();
|
||||
lootRollsComplete.LootObj = roll.getTarget().GetGUID();
|
||||
lootRollsComplete.LootListID = (byte)(roll.itemSlot + 1);
|
||||
lootRollsComplete.Write();
|
||||
|
||||
foreach (var pair in roll.playerVote)
|
||||
{
|
||||
@@ -890,7 +886,7 @@ namespace Game.Groups
|
||||
continue;
|
||||
|
||||
if (pair.Value != RollType.NotValid)
|
||||
player.SendPacket(lootRollsComplete, false);
|
||||
player.SendPacket(lootRollsComplete);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1443,13 +1439,12 @@ namespace Game.Groups
|
||||
|
||||
PartyMemberState packet = new PartyMemberState();
|
||||
packet.Initialize(player);
|
||||
packet.Write();
|
||||
|
||||
for (GroupReference refe = GetFirstMember(); refe != null; refe = refe.next())
|
||||
{
|
||||
Player member = refe.GetSource();
|
||||
if (member && member != player && (!member.IsInMap(player) || !member.IsWithinDist(player, member.GetSightRange(), false)))
|
||||
member.SendPacket(packet, false);
|
||||
member.SendPacket(packet);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1469,7 +1464,6 @@ namespace Game.Groups
|
||||
|
||||
public void BroadcastPacket(ServerPacket packet, bool ignorePlayersInBGRaid, int group = -1, ObjectGuid ignore = default(ObjectGuid))
|
||||
{
|
||||
packet.Write();
|
||||
for (GroupReference refe = GetFirstMember(); refe != null; refe = refe.next())
|
||||
{
|
||||
Player player = refe.GetSource();
|
||||
@@ -1477,7 +1471,7 @@ namespace Game.Groups
|
||||
continue;
|
||||
|
||||
if (player.GetSession() != null && (group == -1 || refe.getSubGroup() == group))
|
||||
player.SendPacket(packet, false);
|
||||
player.SendPacket(packet);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1402,39 +1402,36 @@ namespace Game.Guilds
|
||||
|
||||
public void BroadcastPacketToRank(ServerPacket packet, byte rankId)
|
||||
{
|
||||
packet.Write();
|
||||
foreach (var member in m_members.Values)
|
||||
{
|
||||
if (member.IsRank(rankId))
|
||||
{
|
||||
Player player = member.FindPlayer();
|
||||
if (player != null)
|
||||
player.SendPacket(packet, false);
|
||||
player.SendPacket(packet);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void BroadcastPacket(ServerPacket packet)
|
||||
{
|
||||
packet.Write();
|
||||
foreach (var member in m_members.Values)
|
||||
{
|
||||
Player player = member.FindPlayer();
|
||||
if (player != null)
|
||||
player.SendPacket(packet, false);
|
||||
player.SendPacket(packet);
|
||||
}
|
||||
}
|
||||
|
||||
public void BroadcastPacketIfTrackingAchievement(ServerPacket packet, uint criteriaId)
|
||||
{
|
||||
packet.Write();
|
||||
foreach (var member in m_members.Values)
|
||||
{
|
||||
if (member.IsTrackingCriteriaId(criteriaId))
|
||||
{
|
||||
Player player = member.FindPlayer();
|
||||
if (player)
|
||||
player.SendPacket(packet, false);
|
||||
player.SendPacket(packet);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -342,7 +342,7 @@ namespace Game.Guilds
|
||||
|
||||
Player player = Global.ObjAccessor.FindPlayer(guild.GetLeaderGUID());
|
||||
if (player)
|
||||
player.SendPacket(applicantListChanged, false);
|
||||
player.SendPacket(applicantListChanged);
|
||||
}
|
||||
|
||||
void SendMembershipRequestListUpdate(Player player)
|
||||
|
||||
@@ -74,10 +74,9 @@ namespace Game
|
||||
plTarget.duel.startTimer = now;
|
||||
|
||||
DuelCountdown packet = new DuelCountdown(3000);
|
||||
packet.Write();
|
||||
|
||||
player.SendPacket(packet, false);
|
||||
plTarget.SendPacket(packet, false);
|
||||
player.SendPacket(packet);
|
||||
plTarget.SendPacket(packet);
|
||||
}
|
||||
|
||||
void HandleDuelCancelled()
|
||||
|
||||
+7
-10
@@ -785,10 +785,10 @@ namespace Game.Maps
|
||||
obj.BuildOutOfRangeUpdateBlock(data);
|
||||
UpdateObject packet;
|
||||
data.BuildPacket(out packet);
|
||||
packet.Write();
|
||||
|
||||
foreach (var pl in players)
|
||||
if (pl.GetTransport() != obj)
|
||||
pl.SendPacket(packet, false);
|
||||
pl.SendPacket(packet);
|
||||
}
|
||||
|
||||
if (!_transports.Contains(obj))
|
||||
@@ -2215,9 +2215,8 @@ namespace Game.Maps
|
||||
|
||||
public void SendToPlayers(ServerPacket data)
|
||||
{
|
||||
data.Write();
|
||||
foreach (Player pl in m_activePlayers)
|
||||
pl.SendPacket(data, false);
|
||||
pl.SendPacket(data);
|
||||
}
|
||||
|
||||
public bool ActiveObjectsNearGrid(Grid grid)
|
||||
@@ -2653,11 +2652,10 @@ namespace Game.Maps
|
||||
if (!players.Empty())
|
||||
{
|
||||
PlayMusic data = new PlayMusic(musicId);
|
||||
data.Write();
|
||||
|
||||
foreach (var player in players)
|
||||
if (player.GetZoneId() == zoneId)
|
||||
player.SendPacket(data, false);
|
||||
player.SendPacket(data);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2674,10 +2672,10 @@ namespace Game.Maps
|
||||
if (!players.Empty())
|
||||
{
|
||||
WeatherPkt weather = new WeatherPkt(weatherId, weatherGrade);
|
||||
weather.Write();
|
||||
|
||||
foreach (var player in players)
|
||||
if (player.GetZoneId() == zoneId)
|
||||
player.SendPacket(weather, false);
|
||||
player.SendPacket(weather);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2697,11 +2695,10 @@ namespace Game.Maps
|
||||
overrideLight.AreaLightID = _defaultLight;
|
||||
overrideLight.OverrideLightID = lightId;
|
||||
overrideLight.TransitionMilliseconds = fadeInTime;
|
||||
overrideLight.Write();
|
||||
|
||||
foreach (var player in players)
|
||||
if (player.GetZoneId() == zoneId)
|
||||
player.SendPacket(overrideLight, false);
|
||||
player.SendPacket(overrideLight);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+31
-14
@@ -29,13 +29,13 @@ namespace Game.Network
|
||||
_worldPacket = worldPacket;
|
||||
}
|
||||
|
||||
public abstract void Read();
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
_worldPacket.Dispose();
|
||||
}
|
||||
|
||||
public abstract void Read();
|
||||
|
||||
public ClientOpcodes GetOpcode() { return (ClientOpcodes)_worldPacket.GetOpcode(); }
|
||||
|
||||
public void LogPacket(WorldSession session)
|
||||
@@ -46,7 +46,7 @@ namespace Game.Network
|
||||
protected WorldPacket _worldPacket;
|
||||
}
|
||||
|
||||
public abstract class ServerPacket : IDisposable
|
||||
public abstract class ServerPacket
|
||||
{
|
||||
public ServerPacket(ServerOpcodes opcode)
|
||||
{
|
||||
@@ -60,15 +60,21 @@ namespace Game.Network
|
||||
_worldPacket = new WorldPacket(opcode);
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
public void Clear()
|
||||
{
|
||||
_worldPacket.Dispose();
|
||||
_worldPacket.Clear();
|
||||
buffer = null;
|
||||
}
|
||||
|
||||
public void Clear() { _worldPacket.Clear(); }
|
||||
public ServerOpcodes GetOpcode() { return (ServerOpcodes)_worldPacket.GetOpcode(); }
|
||||
public uint GetSize() { return _worldPacket.GetSize(); }
|
||||
public byte[] GetData() { return _worldPacket.GetData(); }
|
||||
public ServerOpcodes GetOpcode()
|
||||
{
|
||||
return (ServerOpcodes)_worldPacket.GetOpcode();
|
||||
}
|
||||
|
||||
public byte[] GetData()
|
||||
{
|
||||
return buffer;
|
||||
}
|
||||
|
||||
public void LogPacket(WorldSession session)
|
||||
{
|
||||
@@ -77,10 +83,21 @@ namespace Game.Network
|
||||
|
||||
public abstract void Write();
|
||||
|
||||
public void WritePacketData()
|
||||
{
|
||||
if (buffer != null)
|
||||
return;
|
||||
|
||||
Write();
|
||||
|
||||
buffer = _worldPacket.GetData();
|
||||
_worldPacket.Dispose();
|
||||
}
|
||||
|
||||
public ConnectionType GetConnection() { return connectionType; }
|
||||
|
||||
byte[] buffer;
|
||||
ConnectionType connectionType;
|
||||
|
||||
protected WorldPacket _worldPacket;
|
||||
}
|
||||
|
||||
@@ -88,12 +105,12 @@ namespace Game.Network
|
||||
{
|
||||
public WorldPacket(ServerOpcodes opcode = ServerOpcodes.None)
|
||||
{
|
||||
Opcode = (uint)opcode;
|
||||
this.opcode = (uint)opcode;
|
||||
}
|
||||
|
||||
public WorldPacket(byte[] data, uint opcode) : base(data)
|
||||
{
|
||||
Opcode = opcode;
|
||||
this.opcode = opcode;
|
||||
}
|
||||
|
||||
public ObjectGuid ReadPackedGuid()
|
||||
@@ -201,9 +218,9 @@ namespace Game.Network
|
||||
WriteFloat(o);
|
||||
}
|
||||
|
||||
public uint GetOpcode() { return Opcode; }
|
||||
public uint GetOpcode() { return opcode; }
|
||||
|
||||
uint Opcode;
|
||||
uint opcode;
|
||||
}
|
||||
|
||||
public class ServerPacketHeader
|
||||
|
||||
@@ -250,21 +250,18 @@ namespace Game.Network
|
||||
return true;
|
||||
}
|
||||
|
||||
public void SendPacket(ServerPacket packet, bool writePacket = true)
|
||||
public void SendPacket(ServerPacket packet)
|
||||
{
|
||||
if (!IsOpen())
|
||||
return;
|
||||
|
||||
packet.LogPacket(_worldSession);
|
||||
|
||||
if (writePacket)
|
||||
packet.Write();
|
||||
|
||||
uint packetSize = packet.GetSize();
|
||||
ServerOpcodes opcode = packet.GetOpcode();
|
||||
packet.WritePacketData();
|
||||
|
||||
var data = packet.GetData();
|
||||
packet.Dispose();
|
||||
uint packetSize = (uint)data.Length;
|
||||
ServerOpcodes opcode = packet.GetOpcode();
|
||||
PacketLog.Write(data, opcode, GetRemoteIpAddress(), GetRemotePort(), _connectType);
|
||||
|
||||
if (packetSize > 0x400 && worldCrypt.IsInitialized)
|
||||
@@ -602,7 +599,7 @@ namespace Game.Network
|
||||
//else
|
||||
//{
|
||||
// transfer_aborted when/if we get map node redirection
|
||||
// SendPacket(*WorldPackets.Auth.ResumeComms().Write());
|
||||
// SendPacket(*WorldPackets.Auth.ResumeComms());
|
||||
//}
|
||||
}
|
||||
|
||||
|
||||
@@ -181,14 +181,13 @@ namespace Game.PvP
|
||||
void BroadcastPacket(ServerPacket packet)
|
||||
{
|
||||
// This is faster than sWorld.SendZoneMessage
|
||||
packet.Write();
|
||||
for (int team = 0; team < 2; ++team)
|
||||
{
|
||||
foreach (var guid in m_players[team])
|
||||
{
|
||||
Player player = Global.ObjAccessor.FindPlayer(guid);
|
||||
if (player)
|
||||
player.SendPacket(packet, false);
|
||||
player.SendPacket(packet);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1401,13 +1401,12 @@ namespace Game
|
||||
public bool SendZoneMessage(uint zone, ServerPacket packet, WorldSession self = null, uint team = 0)
|
||||
{
|
||||
bool foundPlayerToSend = false;
|
||||
packet.Write();
|
||||
foreach (var session in m_sessions.Values)
|
||||
{
|
||||
if (session != null && session.GetPlayer() && session.GetPlayer().IsInWorld &&
|
||||
session.GetPlayer().GetZoneId() == zone && session != self && (team == 0 || (uint)session.GetPlayer().GetTeam() == team))
|
||||
{
|
||||
session.SendPacket(packet, false);
|
||||
session.SendPacket(packet);
|
||||
foundPlayerToSend = true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -373,7 +373,7 @@ namespace Game
|
||||
Log.outError(LogFilter.Network, "Received unexpected opcode {0} Status: {1} Reason: {2} from {3}", (ClientOpcodes)packet.GetOpcode(), status, reason, GetPlayerInfo());
|
||||
}
|
||||
|
||||
public void SendPacket(ServerPacket packet, bool writePacket = true)
|
||||
public void SendPacket(ServerPacket packet)
|
||||
{
|
||||
if (packet == null)
|
||||
return;
|
||||
@@ -397,7 +397,7 @@ namespace Game
|
||||
return;
|
||||
}
|
||||
|
||||
m_Socket[(int)conIdx].SendPacket(packet, writePacket);
|
||||
m_Socket[(int)conIdx].SendPacket(packet);
|
||||
}
|
||||
|
||||
public void AddInstanceConnection(WorldSocket sock) { m_Socket[(int)ConnectionType.Instance] = sock; }
|
||||
|
||||
@@ -3636,10 +3636,9 @@ namespace Game.Spells
|
||||
packet.ArbiterGUID = pGameObj.GetGUID();
|
||||
packet.RequestedByGUID = caster.GetGUID();
|
||||
packet.RequestedByWowAccount = caster.GetSession().GetAccountGUID();
|
||||
packet.Write();
|
||||
|
||||
caster.SendPacket(packet, false);
|
||||
target.SendPacket(packet, false);
|
||||
caster.SendPacket(packet);
|
||||
target.SendPacket(packet);
|
||||
|
||||
// create duel-info
|
||||
DuelInfo duel = new DuelInfo();
|
||||
|
||||
Reference in New Issue
Block a user