- الرئيسية
- ما الجديد !
-
الصفحات▼
الصفحات
أهلا وسهلا بك زائرنا الكريم في منتدى دعم PBBoard الرسمي، لكي تتمكن من المشاركة ومشاهدة جميع أقسام المنتدى وكافة الميزات ، يجب عليك إنشاء حساب جديد بالتسجيل بالضغط هنا أو تسجيل الدخول اضغط هنا إذا كنت عضواً .
محتاج اضيف محرر sceditor
-
-
محتاج اضيف محرر sceditor23-02-2024 04:37 مساءً
-
ahmedothmanمعلومات الكاتبعضو
- انضم في :
- 10-12-2023
- رقم العضوية :
- 9624
- المشاركات :
- 23
- الدولة :
- مصر
- الجنس:
- تاريخ الميلاد :
- 26-1-1997
- قوة السمعة:
- 60
- موقعي:
- زيارة موقعي
-
CODE
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using ProtoBuf; using System.IO; namespace Conquer_Online_Server.Network.GamePackets { [ProtoContract] public class ItemPacket { [ProtoMember(1, IsRequired = true)] public uint UID; [ProtoMember(2, IsRequired = true)] public uint ID; [ProtoMember(3, IsRequired = true)] public uint Unknowen1; [ProtoMember(4, IsRequired = true)] public uint Socket1; [ProtoMember(5, IsRequired = true)] public uint Socket2; [ProtoMember(6, IsRequired = true)] public uint Unknowen4; [ProtoMember(7, IsRequired = true)] public uint Unknowen5; [ProtoMember(8, IsRequired = true)] public uint Plus; [ProtoMember(9, IsRequired = true)] public uint Bless; [ProtoMember(10, IsRequired = true)] public uint Bound; [ProtoMember(11, IsRequired = true)] public uint HP; [ProtoMember(12, IsRequired = true)] public uint Unknowen10; [ProtoMember(13, IsRequired = true)] public uint Unknowen11; [ProtoMember(14, IsRequired = true)] public uint Lock; [ProtoMember(15, IsRequired = true)] public uint Unknowen13; [ProtoMember(16, IsRequired = true)] public uint Unknowen14; [ProtoMember(17, IsRequired = true)] public uint Unknowen15; [ProtoMember(18, IsRequired = true)] public uint Unknowen16; [ProtoMember(19, IsRequired = true)] public uint Unknowen17; [ProtoMember(20, IsRequired = true)] public uint Unknowen18; [ProtoMember(21, IsRequired = true)] public uint Unknowen19; [ProtoMember(22, IsRequired = true)] public uint Dura; [ProtoMember(23, IsRequired = true)] public uint MaxDura; } [ProtoContract] public class WarDrobePacket { [ProtoMember(1, IsRequired = true)] public WarDrobe.ActionType Action; [ProtoMember(2, IsRequired = true)] public uint UID; [ProtoMember(3, IsRequired = true)] public uint Data; [ProtoMember(4, IsRequired = true)] public uint Unknowen; } [ProtoContract] public class StoragePacket { [ProtoMember(1, IsRequired = true)] public uint Action; [ProtoMember(2, IsRequired = true)] public uint Param; [ProtoMember(3, IsRequired = true)] public uint Param1; [ProtoMember(4, IsRequired = true)] public ulong Param2; [ProtoMember(5, IsRequired = true)] public ulong Param3; } public class WarDrobe { public enum ActionType : uint { Default = 0, Add = 1, Remove = 2, Equip = 5, UnEquip = 6 } public ActionType Action; public uint UID; public uint Data; public uint Unknowen; public byte[] Buffer; public WarDrobe(byte[] buff) { Buffer = buff; } public void Deserialize() { byte[] Packet = new byte[Buffer.Length - 12]; System.Buffer.BlockCopy(Buffer, 4, Packet, 0, Buffer.Length - 12); var result = Serializer.Deserialize<WarDrobePacket>(new MemoryStream(Packet)); this.Action = result.Action; this.UID = result.UID; this.Data = result.Data; this.Unknowen = result.Unknowen; } public void Serialize() { WarDrobePacket Packet = new WarDrobePacket(); Packet.Action = this.Action; Packet.UID = this.UID; Packet.Data = this.Data; Packet.Unknowen = this.Unknowen; byte[] buffer; using (var ms = new MemoryStream()) { Serializer.Serialize(ms, Packet); buffer = ms.ToArray(); } byte[] Array = new byte[buffer.Length + 12]; System.Buffer.BlockCopy(buffer, 0, Array, 4, buffer.Length); Writer.WriteUInt16((ushort)(Array.Length - 8), 0, Array); Writer.WriteUInt16(3300, 2, Array); this.Buffer = Array; } public static void Process(byte[] Data, Client.GameState client) { WarDrobe Packet = new WarDrobe(Data); Packet.Deserialize(); switch (Packet.Action) { case ActionType.Add: { ConquerItem item; if (client.Inventory.TryGetItem(Packet.UID, out item)) { if (client.WarDrobe.Add(item)) { WarDrobe res = new WarDrobe(null); res.Action = ActionType.Add; res.UID = item.UID; res.Data = item.ID; res.Unknowen = 0; res.Serialize(); client.Send(res.Buffer); } } break; } case ActionType.Remove: { ConquerItem item = null; if (client.WarDrobe.TryGetItem(Packet.UID, out item)) { if (client.WarDrobe.Remove(item)) { WarDrobe res = new WarDrobe(null); res.Action = ActionType.Remove; res.UID = item.UID; res.Data = item.ID; res.Unknowen = 0; res.Serialize(); client.Send(res.Buffer); } } break; } case ActionType.Equip: { ConquerItem item = null; if (client.WarDrobe.TryGetItem(Packet.UID, out item)) { if (PacketHandler.Equipable(item, client)) { WarDrobe res = new WarDrobe(null); res.Action = ActionType.Equip; res.UID = item.UID; res.Data = item.ID; res.Unknowen = 0; res.Serialize(); client.Send(res.Buffer); ItemUsage usage = new ItemUsage(true); usage.dwParam = Packet.Data; usage.UID = Packet.UID; PacketHandler.EquipItem(usage, client); } } break; } case ActionType.UnEquip: { ConquerItem item = null; if (client.WarDrobe.TryGetItem(Packet.UID, out item)) { WarDrobe res = new WarDrobe(null); res.Action = ActionType.UnEquip; res.UID = item.UID; res.Data = item.ID; res.Unknowen = 0; res.Serialize(); client.Send(res.Buffer); ItemUsage usage = new ItemUsage(true); usage.dwParam = Packet.Data; PacketHandler.UnequipItem(usage, client); } break; } default: { client.Entity.SendSysMesage("3300: unknowen type " + Packet.Action); break; } } } public static void SendItems(Client.GameState client) { var Items = client.WarDrobe.Objects.ToList(); int i = 0; i = Items.Count; laple_121: byte[] buffer = null; int done = 1; List<ItemPacket> packets = new List<ItemPacket>(); while (i > 0 && done < 10) { var Wrap = client.WarDrobe.Objects[i - 1]; if (Wrap.Position == 0) { ItemPacket item = new ItemPacket(); item.ID = Wrap.ID; item.Socket1 = (uint)Wrap.SocketOne; item.Socket2 = (uint)Wrap.SocketTwo; item.Plus = (uint)Wrap.Plus; item.Bless = (uint)Wrap.Bless; item.Bound = (uint)(Wrap.Bound ? 1 : 0); item.HP = Wrap.Enchant; item.Lock = Wrap.Lock; item.UID = Wrap.UID; item.Dura = Wrap.Durability; item.MaxDura = Wrap.MaximDurability; packets.Add(item); } done++; i--; } WarDrobe wardrobe = new WarDrobe(null); wardrobe.Action = ActionType.Default; wardrobe.Unknowen = 0; wardrobe.Serialize(); if (packets.Count > 0) { using (var ms = new System.IO.MemoryStream()) { ProtoBuf.Serializer.Serialize<List<ItemPacket>>(ms, packets); buffer = ms.ToArray(); uint value = buffer[1]; int offset = 2; while (offset < buffer.Length) { buffer[offset - 2] = 42; offset += buffer[offset - 1] + 2; } } } if (buffer != null) { byte[] array = new byte[wardrobe.Buffer.Length + buffer.Length]; System.Buffer.BlockCopy(wardrobe.Buffer, 0, array, 0, wardrobe.Buffer.Length); System.Buffer.BlockCopy(buffer, 0, array, wardrobe.Buffer.Length - 8, buffer.Length); Writer.WriteUInt16((ushort)(array.Length - 8), 0, array); client.Send(array); } else { client.Send(wardrobe.Buffer); } if (i > 0) { goto laple_121; } } } public class Storage { public uint Action; public uint Param; public uint Param1; public ulong Param2; public byte[] Buffer; public Storage(byte[] buff) { Buffer = buff; } public void Deserialize() { byte[] Packet = new byte[Buffer.Length - 12]; System.Buffer.BlockCopy(Buffer, 4, Packet, 0, Buffer.Length - 12); var result = Serializer.Deserialize<StoragePacket>(new MemoryStream(Packet)); this.Action = (uint)result.Action; this.Param = result.Param; this.Param1 = result.Param1; this.Param2 = result.Param2; } public static void Send(Client.GameState client) { uint Points = 0; byte[] buffer = null; List<StoragePacket> packets = new List<StoragePacket>(); foreach (var item in client.StorageItems.Values) { StoragePacket packet = new StoragePacket() { Action = (uint)item.Type, Param = item.ID, Param1 = 0, Param2 = 0, Param3 = 0, }; if (client.Entity.TitleID == (uint)item.Type * 10000 + item.ID) { packet.Param1 = 1; } if (client.Entity.WingID == (uint)item.Type * 10000 + item.ID) { packet.Param1 = 1; } if (item.Type == Database.WarDrobe.StorageType.Conqueror || item.Type == Database.WarDrobe.StorageType.RisingStar) { Points += 300; } if (item.Type == Database.WarDrobe.StorageType.GrandMaster) { Points += 500; } if (item.Type == Database.WarDrobe.StorageType.Fashionist || item.Type == Database.WarDrobe.StorageType.OverLord || item.Type == Database.WarDrobe.StorageType.Talent || item.Type == Database.WarDrobe.StorageType.Victor || item.Type == Database.WarDrobe.StorageType.SwiftChaser) { Points += 150; } packets.Add(packet); } Storage wardrobe = new Storage(null); wardrobe.Action = 0; wardrobe.Param = Points; wardrobe.Param1 = 0; wardrobe.Param2 = 0; wardrobe.Serialize(); if (packets.Count > 0) { using (var ms = new System.IO.MemoryStream()) { ProtoBuf.Serializer.Serialize<List<StoragePacket>>(ms, packets); buffer = ms.ToArray(); uint value = buffer[1]; int offset = 2; while (offset < buffer.Length) { buffer[offset - 2] = 42; offset += buffer[offset - 1] + 2; } } } if (buffer != null) { byte[] array = new byte[wardrobe.Buffer.Length + buffer.Length]; System.Buffer.BlockCopy(wardrobe.Buffer, 0, array, 0, wardrobe.Buffer.Length); System.Buffer.BlockCopy(buffer, 0, array, wardrobe.Buffer.Length - 8, buffer.Length); Writer.WriteUInt16((ushort)(array.Length - 8), 0, array); client.Send(array); } else { client.Send(wardrobe.Buffer); } } public void Serialize() { StoragePacket Packet = new StoragePacket(); Packet.Action = this.Action; Packet.Param = this.Param; Packet.Param1 = this.Param1; Packet.Param2 = this.Param2; byte[] buffer; using (var ms = new MemoryStream()) { Serializer.Serialize(ms, Packet); buffer = ms.ToArray(); } byte[] Array = new byte[buffer.Length + 12]; System.Buffer.BlockCopy(buffer, 0, Array, 4, buffer.Length); Writer.WriteUInt16((ushort)(Array.Length - 8), 0, Array); Writer.WriteUInt16(3301, 2, Array); this.Buffer = Array; } public static void Process(byte[] packet, Client.GameState client) { Storage Packet = new Storage(packet); Packet.Deserialize(); switch (Packet.Action) { case 4: { if (client.StorageItems.ContainsKey((Database.WarDrobe.StorageType)Packet.Param1)) { if (Packet.Param1 == 4001 || Packet.Param1 == 6001 || Packet.Param1 == 6002 || Packet.Param1 == 6003 || Packet.Param1 == 6004) { client.Entity.WingID = (uint)((Packet.Param1 * 10000) + Packet.Param2); client.Send(packet); } else { client.Entity.TitleID = (uint)((Packet.Param1 * 10000) + Packet.Param2); client.Send(packet); } } break; } case 5: { if (client.StorageItems.ContainsKey((Database.WarDrobe.StorageType)Packet.Param1)) { if (Packet.Param1 == 4001 || Packet.Param1 == 6001 || Packet.Param1 == 6002 || Packet.Param1 == 6003 || Packet.Param1 == 6004) { client.Entity.WingID = 0; client.Send(packet); } else { client.Entity.TitleID = 0; client.Send(packet); } } break; } } } } }
الساعة الآن 09:38 AM