Let ServerPacket Handle the writting of packet data.

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