public void SendCopy(PacketOut Out) { Out.WritePacketLength(); PacketOut packet = new PacketOut(0); packet.Position = 0; packet.Write(Out.ToArray(), 0, Out.ToArray().Length); SendPacket(packet); }
public byte[] Encrypt(PacketOut packet) { byte[] data = packet.ToArray(); Log.Info("[SERVER PRE-ENCRYPT]", this.DumpData(data)); encryption.Process(data, 4, data.Length - 4); return(data); }
public void Send(PacketOut packet) { Console.Write("Sent:"); for (int i = 0; i < packet.ToArray().Length; i++) Console.Write(" " + packet.ToArray()[i]); Console.WriteLine(); byte[] toSend = Crypto.Encrypt(packet); MemoryStream tcpOut = new MemoryStream(); tcpOut.WriteByte((Byte)((toSend.Length & 0xffff) & 0xff)); tcpOut.WriteByte((Byte)((toSend.Length & 0xffff) >> 8)); tcpOut.WriteByte((Byte)((toSend.Length >> 16) & 0xff)); tcpOut.WriteByte((Byte)(toSend.Length >> 24)); tcpOut.Write(toSend, 4, toSend.Length - 4); SendTCP(tcpOut.ToArray()); tcpOut.Dispose(); toSend = null; }
public void Send(PacketOut packet) { try { if (!Connected) { return; } Log.WriteLine(LogType.Network, "Sending packet: {0}", packet.packetId); if (!Connected) { return; } Byte[] Data = packet.ToArray(); int Length = Data.Length; byte[] Packet = new byte[2 + Length]; Packet[0] = (byte)(Length >> 8); Packet[1] = (byte)(Length & 0xff); Data.CopyTo(Packet, 2); mCrypt.Encrypt(Packet, 0, 6); //While writing this part of code I had a strange feeling of Deja-Vu or whatever it's called :> Log.WriteLine(LogType.Packet, "{0}", packet.ToHex()); mSocket.Send(Packet); } catch (Exception ex) { Log.WriteLine(LogType.Error, "Exception Occured"); Log.WriteLine(LogType.Error, "Message: {0}", ex.Message); Log.WriteLine(LogType.Error, "Stacktrace: {0}", ex.StackTrace); } }
public byte[] Encrypt(PacketOut packet) { byte[] data = packet.ToArray(); Log.Info("[SERVER PRE-ENCRYPT]", this.DumpData(data)); encryption.Process(data, 4, data.Length - 4); return data; }
private void SendBuffer(Player Plr, ref PacketOut Buffer, ref byte Count) { // On Envoi le Packet des items PacketOut Packet = new PacketOut((byte)Opcodes.F_GET_ITEM); Packet.WriteByte(Count); Packet.Fill(0, 3); Packet.Write(Buffer.ToArray(), 0, Buffer.ToArray().Length); Plr.SendPacket(Packet); // On Remet le compteur a zero Count = 0; // On Initalise un nouveau buffer Buffer = new PacketOut(0); Buffer.Position = 0; }
public void SendFriends(List <Character_social> Socials) { PacketOut Out = new PacketOut((byte)Opcodes.F_SOCIAL_NETWORK); Out.WriteUInt16(0); Out.WriteByte(1); Out.WriteByte((byte)Socials.Count); Out.WriteByte(0); foreach (Character_social Social in Socials) { BuildPlayerInfo(ref Out, Social); } Log.Dump("Friends", Out.ToArray(), 0, Out.ToArray().Length); GetPlayer().SendPacket(Out); }
public void Send(PacketOut packet) { if (Connected) { Log.WriteLine(LogType.Network, "Sending packet {0}. Length: {1}", packet.packetId.ToString(), packet.Lenght()); Log.WriteLine(LogType.Packet, "{0}", packet.ToHex()); Byte[] Data = packet.ToArray(); mSocket.Send(Data); } }
public void SendCopy(PacketOut Out) { Out.WritePacketLength(); byte[] Buf = Out.ToArray(); PacketOut packet = new PacketOut(0); packet.Position = 0; packet.Write(Buf, 0, Buf.Length); SendPacket(packet); }
public void Send(PacketOut packet) { Console.Write("Sent:"); for (int i = 0; i < packet.ToArray().Length; i++) { Console.Write(" " + packet.ToArray()[i]); } Console.WriteLine(); byte[] toSend = Crypto.Encrypt(packet); MemoryStream tcpOut = new MemoryStream(); tcpOut.WriteByte((byte)((toSend.Length & 0xffff) & 0xff)); tcpOut.WriteByte((byte)((toSend.Length & 0xffff) >> 8)); tcpOut.WriteByte((byte)((toSend.Length >> 16) & 0xff)); tcpOut.WriteByte((byte)(toSend.Length >> 24)); tcpOut.Write(toSend, 4, toSend.Length - 4); SendTCP(tcpOut.ToArray()); tcpOut.Dispose(); toSend = null; }
private void LogOutPacket(PacketOut packet) { if (_logThread == null) { _logThread = new Thread(new ThreadStart(PacketLogThread)); _logThread.Start(); } lock (_packetLog) { _packetLog.Add(Utils.ToLogHexString((byte)packet.Opcode, true, packet.ToArray())); } }
public void SendCampaignStatus(Player plr, VictoryPointProgress vpp, Realms realm) { _logger.Trace("Send Campaign Status"); _logger.Warn("F_CAMPAIGN_STATUS"); PacketOut Out = new PacketOut((byte)Opcodes.F_CAMPAIGN_STATUS, 159); Out.WriteHexStringBytes("0005006700CB00"); // 7 // Dwarfs vs Greenskins T1 BuildCaptureStatus(Out, WorldMgr.GetRegion(1, false), realm); // Dwarfs vs Greenskins T2 BuildCaptureStatus(Out, WorldMgr.GetRegion(12, false), realm); // Dwarfs vs Greenskins T3 BuildCaptureStatus(Out, WorldMgr.GetRegion(10, false), realm); // Dwarfs vs Greenskins T4 BuildCaptureStatus(Out, WorldMgr.GetRegion(2, false), realm); // Empire vs Chaos T1 BuildCaptureStatus(Out, WorldMgr.GetRegion(8, false), realm); // Empire vs Chaos T2 BuildCaptureStatus(Out, WorldMgr.GetRegion(14, false), realm); // Empire vs Chaos T3 BuildCaptureStatus(Out, WorldMgr.GetRegion(6, false), realm); // Empire vs Chaos T4 BuildCaptureStatus(Out, WorldMgr.GetRegion(11, false), realm); // High Elves vs Dark Elves T1 BuildCaptureStatus(Out, WorldMgr.GetRegion(3, false), realm); // High Elves vs Dark Elves T2 BuildCaptureStatus(Out, WorldMgr.GetRegion(15, false), realm); // High Elves vs Dark Elves T3 BuildCaptureStatus(Out, WorldMgr.GetRegion(16, false), realm); // High Elves vs Dark Elves T4 BuildCaptureStatus(Out, WorldMgr.GetRegion(4, false), realm); Out.Fill(0, 83); // RB 4/24/2016 Added logic for T4 campaign progression. //gs t4 // 0 contested 1 order controled 2 destro controled 3 notcontroled locked Out.WriteByte(3); //dwarf fort BuildBattleFrontStatus(Out, WorldMgr.GetRegion(2, false)); //kadrin valley Out.WriteByte(3); //orc fort //chaos t4 Out.WriteByte(3); //empire fort Out.WriteByte((byte)3); BuildBattleFrontStatus(Out, WorldMgr.GetRegion(11, false)); //reikland Out.WriteByte(3); //chaos fort //elf Out.WriteByte(3); //elf fort BuildBattleFrontStatus(Out, WorldMgr.GetRegion(4, false)); //etaine Out.WriteByte(3); //delf fort Out.WriteByte(0); // Order underdog rating Out.WriteByte(0); // Destruction underdog rating if (plr == null) { byte[] buffer = Out.ToArray(); if (Player._Players.Count == 0) { plr.SendPacket(Out); } else { lock (Player._Players) { foreach (Player player in Player._Players) { if (player == null || player.IsDisposed || !player.IsInWorld()) { continue; } PacketOut playerCampaignStatus = new PacketOut(0, 159) { Position = 0 }; playerCampaignStatus.Write(buffer, 0, buffer.Length); if (player.Region?.Campaign != null) { WriteVictoryPoints(player.Realm, playerCampaignStatus, vpp); } else { playerCampaignStatus.Fill(0, 9); } playerCampaignStatus.Fill(0, 4); player.SendPacket(playerCampaignStatus); } } } } else { if (plr.Region?.Campaign != null) { WriteVictoryPoints(plr.Realm, Out, vpp); } else { Out.Fill(0, 9); } Out.Fill(0, 4); plr.SendPacket(Out); } }
public byte[] BuildCharacters() { PacketOut Out = new PacketOut((byte)0); Out.Position = 0; Out.WriteUInt16(GetCharacterCount()); Character Char = null; for (int i = 0; i < MAX_CHARS; ++i) { Char = Chars[i]; if (Char == null) Out.Write(new byte[280], 0, 280); else { Out.FillString(Char.Name, 48); Out.WriteByte(Char.Info[0].Level); Out.WriteByte(Char.Career); Out.WriteByte(Char.Realm); Out.WriteByte(Char.Sex); Out.WriteByte(Char.ModelId); Out.WriteUInt16(Char.Info[0].ZoneId); Out.Write(new byte[5], 0, 5); Character_items Item = null; for (UInt16 SlotId = 14; SlotId < 30; ++SlotId) { Item = Char.GetItemInSlot(SlotId); if (Item == null) Out.WriteUInt16(0); else Out.WriteUInt16Reverse(Item.ModelId); Out.Write(new byte[6], 0, 6); } Out.Write(new byte[6], 0, 6); for (int j = 0; j < 5; ++j) { Out.Write(new byte[6], 0, 6); Out.WriteUInt16(0xFF00); } for (UInt16 SlotId = 10; SlotId < 13; ++SlotId) { Item = Char.GetItemInSlot(SlotId); Out.WriteUInt16(0); if (Item == null) Out.WriteUInt16(0); else Out.WriteUInt16Reverse(Item.ModelId); } Out.Write(new byte[10], 0, 10); Out.WriteUInt16(0xFF00); Out.WriteByte(0); Out.WriteByte(Char.Race); Out.WriteUInt16(0); Out.Write(Char.bTraits, 0, Char.bTraits.Length); Out.Write(new byte[10], 0, 10); } } return Out.ToArray(); }
public byte[] BuildRealms(uint sequence) { try { PacketOut Out = new PacketOut((byte)0); Out.Position = 0; Out.WriteUInt32(sequence); Out.WriteUInt16(0); lock (_Realms) { Log.Info("BuildRealm", "Envoi de " + _Realms.Count + " royaumes"); Out.WriteUInt32((uint)_Realms.Count); foreach (Realm Rm in _Realms.Values) { Out.WriteByte(Rm.RealmId); Out.WriteByte((byte)(Rm.RpcId != 0 ? 1 : 0)); Out.WriteUInt32(1); Out.WriteByte(Rm.RealmId); Out.WriteByte(Rm.RealmId); Out.WriteString("[" + Rm.Language + "] " + Rm.Name); Out.WriteUInt32(19); Out.WriteString("setting.allow_trials"); Out.WriteString(Rm.AllowTrials); Out.WriteString("setting.charxferavailable"); Out.WriteString(Rm.CharfxerAvailable); Out.WriteString("setting.language"); Out.WriteString(Rm.Language); Out.WriteString("setting.legacy"); Out.WriteString(Rm.Legacy); Out.WriteString("setting.manualbonus.realm.destruction"); Out.WriteString(Rm.BonusDestruction); Out.WriteString("setting.manualbonus.realm.order"); Out.WriteString(Rm.BonusOrder); Out.WriteString("setting.name"); Out.WriteString(Rm.Name); Out.WriteString("setting.net.address"); Out.WriteString(Rm.Adresse); Out.WriteString("setting.net.port"); Out.WriteString(Rm.Port.ToString()); Out.WriteString("setting.redirect"); Out.WriteString(Rm.Redirect); Out.WriteString("setting.region"); Out.WriteString(Rm.Region); Out.WriteString("setting.retired"); Out.WriteString(Rm.Retired); Out.WriteString("status.queue.Destruction.waiting"); Out.WriteString(Rm.WaitingDestruction); Out.WriteString("status.queue.Order.waiting"); Out.WriteString(Rm.WaitingOrder); Out.WriteString("status.realm.destruction.density"); Out.WriteString(Rm.DensityDestruction); Out.WriteString("status.realm.order.density"); Out.WriteString(Rm.DensityOrder); Out.WriteString("status.servertype.openrvr"); Out.WriteString(Rm.OpenRvr); Out.WriteString("status.servertype.rp"); Out.WriteString(Rm.Rp); Out.WriteString("status.status"); Out.WriteString(Rm.Status); } } Out.WriteUInt32(0); return Out.ToArray(); } catch (Exception e) { return new byte[0]; } }
public PacketOut Crypt(PacketOut packet) { if (m_crypts.Count <= 0) { return(packet); } byte[] Packet = packet.ToArray(); int Hpos = 0; Hpos += PacketOut.SizeLen; if (PacketOut.OpcodeInLen) { Hpos += packet.OpcodeLen; } byte[] Header = new byte[Hpos]; byte[] ToCrypt = new byte[(packet.Length - Hpos)]; for (int i = 0; i < Hpos; ++i) { Header[i] = Packet[i]; } for (int i = Hpos; i < Packet.Length; ++i) { ToCrypt[i - Hpos] = Packet[i]; } try { foreach (KeyValuePair <ICryptHandler, CryptKey[]> Entry in m_crypts) { ToCrypt = Entry.Key.Crypt(Entry.Value[0], ToCrypt); } } catch (Exception e) { Log.Error("Crypt Error : " + e.ToString()); return(packet); } PacketOut Out = new PacketOut((byte)0); Out.Opcode = packet.Opcode; Out.OpcodeLen = packet.OpcodeLen; Out.Position = 0; Out.SetLength(0); byte[] Total = new byte[Header.Length + ToCrypt.Length]; for (int i = 0; i < Total.Length; ++i) { if (i < Header.Length) { Total[i] = Header[i]; } else { Total[i] = ToCrypt[i - Header.Length]; } } Out.Write(Total, 0, Total.Length); return(Out); }
public byte[] Encrypt(PacketOut packet) { byte[] data = packet.ToArray(); encryption.Process(data, 4, data.Length - 4); return(data); }
public static byte[] BuildCharactersList(int AccountId) { Log.Debug("BuildCharactersList", "AcocuntId = " + AccountId); Character[] Chars = GetAccountChar(AccountId)._Chars; int count = 0; PacketOut Out = new PacketOut(0); Out.Position = 0; Character Char = null; for (int k = 0; k < MAX_SLOT; ++k) { Char = Chars[k]; if (Char != null) { List <Character_items> Items = CharMgr.GetItemChar(Char.CharacterId); /**** char slot start ****/ Out.FillString(Char.Name, 48); // name Out.WriteByte(Char.Value[0].Level); // Level Out.WriteByte(Char.Career); //career Out.WriteByte(Char.Realm); // realm Out.WriteByte(Char.Sex); // gender Out.WriteUInt16R(Char.ModelId); //model id Out.WriteUInt16R(Char.Value[0].ZoneId); // zone id Out.Fill(0, 12); // unk Character_items Item = null; for (UInt16 SlotId = 14; SlotId < 30; ++SlotId) { Item = Items.Find(item => item != null && item.SlotId == SlotId); if (Item == null) { Out.WriteInt32(0); Out.WriteInt32(0); } else { Out.WriteInt32((int)Item.ModelId); Out.WriteUInt16R(0); // primary dye Out.WriteUInt16R(0); // secondary dye } } Out.WriteUInt32(0x00); // 0x00000000 for (int i = 0; i < 4; i++) { Out.WriteUInt32(0xFF000000); Out.WriteUInt32(0x00); } Out.WriteUInt32(0xFF000000); //weapons for (UInt16 SlotId = 10; SlotId < 13; ++SlotId) { Item = Items.Find(item => item != null && item.SlotId == SlotId); if (Item == null) { Out.WriteUInt32(0); } else { Out.WriteUInt16R((ushort)Item.ModelId); Out.WriteUInt16(0); } } Out.Fill(0, 8); Out.WriteUInt16(0xFF00); Out.WriteByte(0); Out.WriteByte(Char.Race); // char slot position Out.WriteUInt16(0x00); //unk /* //Traits [8 bytes] * Out.WriteByte(1); //face * Out.WriteByte(4); //jewel * Out.WriteByte(4); //scar * Out.WriteByte(0); //hair * Out.WriteByte(3); //hair color * Out.WriteByte(2); //skin color * Out.WriteByte(0); //eye color * Out.WriteByte(5); //metal color */ Out.Write(Char.bTraits, 0, Char.bTraits.Length); Out.Fill(0, 14); //unk count++; } } for (int i = 0; i < (MAX_SLOT - count); ++i) { Out.Write(new byte[284], 0, 284); } return(Out.ToArray()); }
public byte[] BuildCharacters() { PacketOut Out = new PacketOut((byte)0); Out.Position = 0; Out.WriteUInt16(GetCharacterCount()); Character Char = null; for (int i = 0; i < MAX_CHARS; ++i) { Char = Chars[i]; if (Char == null) { Out.Write(new byte[280], 0, 280); } else { Out.FillString(Char.Name, 48); Out.WriteByte(Char.Info[0].Level); Out.WriteByte(Char.Career); Out.WriteByte(Char.Realm); Out.WriteByte(Char.Sex); Out.WriteByte(Char.ModelId); Out.WriteUInt16(Char.Info[0].ZoneId); Out.Write(new byte[5], 0, 5); Character_items Item = null; for (UInt16 SlotId = 14; SlotId < 30; ++SlotId) { Item = Char.GetItemInSlot(SlotId); if (Item == null) { Out.WriteUInt16(0); } else { Out.WriteUInt16Reverse(Item.ModelId); } Out.Write(new byte[6], 0, 6); } Out.Write(new byte[6], 0, 6); for (int j = 0; j < 5; ++j) { Out.Write(new byte[6], 0, 6); Out.WriteUInt16(0xFF00); } for (UInt16 SlotId = 10; SlotId < 13; ++SlotId) { Item = Char.GetItemInSlot(SlotId); Out.WriteUInt16(0); if (Item == null) { Out.WriteUInt16(0); } else { Out.WriteUInt16Reverse(Item.ModelId); } } Out.Write(new byte[10], 0, 10); Out.WriteUInt16(0xFF00); Out.WriteByte(0); Out.WriteByte(Char.Race); Out.WriteUInt16(0); Out.Write(Char.bTraits, 0, Char.bTraits.Length); Out.Write(new byte[10], 0, 10); } } return(Out.ToArray()); }
public byte[] BuildRealms(uint sequence) { try { PacketOut Out = new PacketOut((byte)0); Out.Position = 0; Out.WriteUInt32(sequence); Out.WriteUInt16(0); lock (_Realms) { Log.Info("BuildRealm", "Envoi de " + _Realms.Count + " royaumes"); Out.WriteUInt32((uint)_Realms.Count); foreach (Realm Rm in _Realms.Values) { Out.WriteByte(Rm.RealmId); Out.WriteByte((byte)(Rm.RpcId != 0 ? 1 : 0)); Out.WriteUInt32(1); Out.WriteByte(Rm.RealmId); Out.WriteByte(Rm.RealmId); Out.WriteString("[" + Rm.Language + "] " + Rm.Name); Out.WriteUInt32(19); Out.WriteString("setting.allow_trials"); Out.WriteString(Rm.AllowTrials); Out.WriteString("setting.charxferavailable"); Out.WriteString(Rm.CharfxerAvailable); Out.WriteString("setting.language"); Out.WriteString(Rm.Language); Out.WriteString("setting.legacy"); Out.WriteString(Rm.Legacy); Out.WriteString("setting.manualbonus.realm.destruction"); Out.WriteString(Rm.BonusDestruction); Out.WriteString("setting.manualbonus.realm.order"); Out.WriteString(Rm.BonusOrder); Out.WriteString("setting.name"); Out.WriteString(Rm.Name); Out.WriteString("setting.net.address"); Out.WriteString(Rm.Adresse); Out.WriteString("setting.net.port"); Out.WriteString(Rm.Port.ToString()); Out.WriteString("setting.redirect"); Out.WriteString(Rm.Redirect); Out.WriteString("setting.region"); Out.WriteString(Rm.Region); Out.WriteString("setting.retired"); Out.WriteString(Rm.Retired); Out.WriteString("status.queue.Destruction.waiting"); Out.WriteString(Rm.WaitingDestruction); Out.WriteString("status.queue.Order.waiting"); Out.WriteString(Rm.WaitingOrder); Out.WriteString("status.realm.destruction.density"); Out.WriteString(Rm.DensityDestruction); Out.WriteString("status.realm.order.density"); Out.WriteString(Rm.DensityOrder); Out.WriteString("status.servertype.openrvr"); Out.WriteString(Rm.OpenRvr); Out.WriteString("status.servertype.rp"); Out.WriteString(Rm.Rp); Out.WriteString("status.status"); Out.WriteString(Rm.Status); } } Out.WriteUInt32(0); return(Out.ToArray()); } catch (Exception e) { return(new byte[0]); } }
public static byte[] BuildCharacters(int AccountId) { Log.Debug("BuildCharacters", "AcocuntId = " + AccountId); Character[] Chars = GetAccountChar(AccountId)._Chars; UInt16 Count = 0; // On Compte le nombre de personnages existant du joueur for (UInt16 c = 0; c < Chars.Length; ++c) { if (Chars[c] != null) { ++Count; } } PacketOut Out = new PacketOut(0); Out.Position = 0; Out.WriteByte(MAX_SLOT); Out.WriteUInt32(0xFF); Out.WriteByte(0x14); Character Char = null; for (int i = 0; i < MAX_SLOT; ++i) { Char = Chars[i]; if (Char == null) { Out.Fill(0, 284); // 284 } else { List <Character_item> Items = CharMgr.GetItemChar(Char.CharacterId); Out.FillString(Char.Name, 48); Out.WriteByte(Char.Value.Level); Out.WriteByte(Char.Career); Out.WriteByte(Char.Realm); Out.WriteByte(Char.Sex); Out.WriteByte(Char.ModelId); Out.WriteUInt16(Char.Value.ZoneId); Out.Fill(0, 5); Character_item Item = null; for (UInt16 SlotId = 14; SlotId < 30; ++SlotId) { Item = Items.Find(item => item != null && item.SlotId == SlotId); if (Item == null) { Out.WriteUInt32(0); } else { Out.WriteUInt32R(Item.ModelId); } Out.Fill(0, 4); } Out.Fill(0, 6); for (int j = 0; j < 5; ++j) { Out.Fill(0, 6); Out.WriteUInt16(0xFF00); } for (UInt16 SlotId = 10; SlotId < 13; ++SlotId) { Item = Items.Find(item => item != null && item.SlotId == SlotId); Out.WriteUInt16(0); if (Item == null) { Out.WriteUInt16(0); } else { Out.WriteUInt16R((ushort)Item.ModelId); } } Out.Fill(0, 10); Out.WriteUInt16(0xFF00); Out.WriteByte(0); Out.WriteByte(Char.Race); Out.WriteUInt16(0); Out.Write(Char.bTraits, 0, Char.bTraits.Length); Out.Fill(0, 14);// 272 } } return(Out.ToArray()); }
public byte[] Encrypt(PacketOut packet) { byte[] data = packet.ToArray(); encryption.Process(data, 4, data.Length - 4); return data; }