public static void SendPvpData(IPacketReceiver reciever, BattlegroundSide side, Battleground bg) { bg.EnsureContext(); using (RealmPacketOut packet = new RealmPacketOut(RealmServerOpCode.MSG_PVP_LOG_DATA, 10 + bg.PlayerCount * 40)) { BattlegroundTeam winner = bg.Winner; packet.Write(bg.IsArena); if (bg.IsArena) { for (int index = 0; index < 2; ++index) { packet.Write(0); packet.Write(3999); packet.Write(0); } packet.WriteCString(string.Empty); packet.WriteCString(string.Empty); } bool flag = bg.Winner != null; packet.Write(flag); if (flag) { packet.Write((byte)bg.Winner.Side); } List <Character> characters = bg.Characters; List <BattlegroundStats> listStats = new List <BattlegroundStats>(characters.Count); characters.ForEach(chr => listStats.Add(chr.Battlegrounds.Stats)); packet.Write(listStats.Count); for (int index = 0; index < listStats.Count; ++index) { Character character = characters[index]; if (character.IsInBattleground) { BattlegroundStats stats = character.Battlegrounds.Stats; packet.Write(character.EntityId); packet.Write(stats.KillingBlows); if (bg.IsArena) { packet.Write(winner != null && character.Battlegrounds.Team == winner); } else { packet.Write(stats.HonorableKills); packet.Write(stats.Deaths); packet.Write(stats.BonusHonor); } packet.Write(stats.TotalDamage); packet.Write(stats.TotalHealing); packet.Write(stats.SpecialStatCount); stats.WriteSpecialStats(packet); } } reciever.Send(packet, false); } }
public static void SendPvpData(IPacketReceiver reciever, BattlegroundSide side, Battleground bg) { bg.EnsureContext(); using (var packet = new RealmPacketOut(RealmServerOpCode.MSG_PVP_LOG_DATA, 10 + bg.PlayerCount * 40)) { var winner = bg.Winner; packet.Write(bg.IsArena); if (bg.IsArena) { // TODO: Arena for (var i = 0; i < 2; i++) { packet.Write(0); // old rating packet.Write(3999); // new rating (3000 + diff) packet.Write(0); // matchmaking value (lvl group/rank?) } packet.WriteCString(string.Empty); // arena team names packet.WriteCString(string.Empty); } var isFinished = bg.Winner != null; packet.Write(isFinished); if (isFinished) { packet.Write((byte)bg.Winner.Side); } var chrs = bg.Characters; List <BattlegroundStats> listStats = new List <BattlegroundStats>(chrs.Count); chrs.ForEach(chr => listStats.Add(chr.Battlegrounds.Stats)); packet.Write(listStats.Count); for (var i = 0; i < listStats.Count; i++) { var chr = chrs[i]; if (!chr.IsInBattleground) { continue; } var stats = chr.Battlegrounds.Stats; packet.Write(chr.EntityId); // player guid packet.Write(stats.KillingBlows); if (bg.IsArena) { packet.Write(winner != null && chr.Battlegrounds.Team == winner); // is on the winning team } else { packet.Write(stats.HonorableKills); packet.Write(stats.Deaths); packet.Write(stats.BonusHonor); } packet.Write(stats.TotalDamage); packet.Write(stats.TotalHealing); packet.Write(stats.SpecialStatCount); stats.WriteSpecialStats(packet); } reciever.Send(packet); } }