| Hazem |
2021-08-16 02:02 PM |
بسم الله الرحمن الرحيم معانا انهارد سيستم الجرمنتات كامل بنسبه 98% السيستم بنظام سور
وحط فيهم الملفين دول
عفواً لايمكن عرض الروابط إلا بعد الرد على الموضوع
بعد كده هتخش هنا Database
وتعمل كلاس جديد باسم Wrap.cs
وامسح كل الي فيه وبدلو بده
كود PHP:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Conquer_Online_Server.Database
{
public class WarDrobe
{
public static Dictionary<StorageType, StorageItems> Storage = new Dictionary<StorageType, StorageItems>();
public static Dictionary<string, Wrap> Items = new Dictionary<string, Wrap>();
public static void Load()
{
string File = "database\\WrapTypeData.ini";
IniFile IniFile = new IniFile(File);
var Count = IniFile.ReadUInt32("Wrap", "WrapCount");
for (uint i = 0; i < Count; i++)
{
Wrap Wrap = new Wrap();
Wrap.ID = IniFile.ReadUInt16(i.ToString(), "WrapID");
Wrap.ItemID = IniFile.ReadUInt32(i.ToString(), "ItemType");
Wrap.Type = (WrapType)IniFile.ReadByte(i.ToString(), "WrapType", 0);
var item = Database.ConquerItemInformation.BaseInformations.Values.Where(p => p.ID == Wrap.ItemID).FirstOrDefault();
if (item != null)
{
if (!Items.ContainsKey(item.Name.ToLower()))
{
Items.Add(item.Name.ToLower(), Wrap);
}
}
else
{
Console.WriteLine("[Wrap] Couldn't load item:" + Wrap.ItemID);
}
}
LoadStorage();
}
public static void LoadStorage()
{
string File = "database\\Storage.ini";
IniFile IniFile = new IniFile(File);
var Count = IniFile.ReadUInt32("Storage", "StorageTypeCount");
for (uint i = 1; i < Count + 1; i++)
{
StorageItems item = new StorageItems();
item.Type = (StorageType)IniFile.ReadUInt16(i.ToString(), "Type");
item.ID = IniFile.ReadUInt32(i.ToString() + "-1", "ID");
Storage.Add(item.Type, item);
}
}
public struct Wrap
{
public ushort ID;
public WrapType Type;
public uint ItemID;
}
public enum WrapType : byte
{
Garment = 1,
Mount = 2
}
public struct StorageItems
{
public StorageType Type;
public uint ID;
public ulong Time;
}
public enum StorageType : uint
{
OverLord = 1,
GrandMaster = 2018,
RisingStar = 2001,
Victor = 2002,
Conqueror = 2003,
Talent = 2004,
Fashionist = 2005,
SwiftChaser = 2006,
Fairy = 2020,
Goddess = 2021,
Beauty = 2022,
Scholar = 2023,
Handsome = 2024,
Wise = 2025,
EarthKnight = 2028,
SkyKnight = 2029,
GloryKnight = 2030,
Paladin = 2031,
SolarDragon = 4001,
InfernalBeast = 6001,
RadiantWings = 6002,
StarlightWings = 6003,
MoonlightWings = 6004,
FairyWings = 6005
}
}
}
بعد كده هتخش المسار ده
وتعمل كلاس جديد باسم
WarDrobe.cs
وامسح كل الي فيه وبدله بده
كود PHP:
using System;
using System.Linq;
using Conquer_Online_Server.Client;
using System.Collections.Generic;
using Conquer_Online_Server.Network.GamePackets;
namespace Conquer_Online_Server.Game.ConquerStructures
{
public unsafe class WarDrobe
{
Dictionary<uint, ConquerItem> WarDrobeItems;
ConquerItem[] objects;
Client.GameState Owner;
public WarDrobe(Client.GameState client)
{
Owner = client;
WarDrobeItems = new Dictionary<uint, ConquerItem>();
objects = new ConquerItem[0];
}
public ConquerItem[] Objects
{
get { return objects; }
}
public byte Count
{
get { return (byte)Objects.Length; }
}
public bool Remove(ConquerItem item)
{
if (WarDrobeItems.ContainsKey(item.UID))
{
if (item.Position == 0)
{
item.IsWrap = false;
WarDrobeItems.Remove(item.UID);
objects = WarDrobeItems.Values.ToArray();
item.Mode = Enums.ItemMode.Default;
Database.ConquerItemTable.UpdateWrap(item);
Owner.Inventory.Add(item, Enums.ItemUse.Move);
Owner.Send(item);
return true;
}
}
return false;
}
public bool TryGetItem(uint UID, out ConquerItem item)
{
return WarDrobeItems.TryGetValue(UID, out item);
}
public bool Add(ConquerItem item)
{
if (!WarDrobeItems.ContainsKey(item.UID))
{
var Info = Database.ConquerItemInformation.BaseInformations.Values.Where(p => p.ID == item.ID).FirstOrDefault();
if (Info != null)
{
if (Database.WarDrobe.Items.ContainsKey(Info.Name.ToLower()))
{
item.IsWrap = true;
WarDrobeItems.Add(item.UID, item);
objects = WarDrobeItems.Values.ToArray();
item.Mode = Enums.ItemMode.Default;
Database.ConquerItemTable.UpdateWrap(item);
Owner.Inventory.Remove(item, Enums.ItemUse.IntoWrap);
return true;
}
else
{
Owner.Entity.SendSysMesage("Couldn't found this item into our database");
}
}
else
{
Owner.Entity.SendSysMesage("Couldn't found this item into our database");
}
}
return false;
}
}
}
بعد كده هتخش المسار ده بردو
وتعمل كلاس جديد باسم WarDrobe.cs
وامسح كل الي فيه وبدلو بده
كود PHP:
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;
}
if (item.Type == Database.WarDrobe.StorageType.Fairy || item.Type == Database.WarDrobe.StorageType.Scholar)
{
Points += 300;
}
if (item.Type == Database.WarDrobe.StorageType.Goddess || item.Type == Database.WarDrobe.StorageType.Handsome)
{
Points += 200;
}
if (item.Type == Database.WarDrobe.StorageType.Beauty || item.Type == Database.WarDrobe.StorageType.Wise)
{
Points += 100;
}
if (item.Type == Database.WarDrobe.StorageType.EarthKnight ||
item.Type == Database.WarDrobe.StorageType.SkyKnight ||
item.Type == Database.WarDrobe.StorageType.GloryKnight ||
item.Type == Database.WarDrobe.StorageType.Paladin)
{
Points += 50;
}
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;
}
}
}
}
}
كده احنا خلصنا من الكلاسات
هيظهر معاك ايرورات كتيره قوي بعد ما تضيف الكلاسات دي هتقوم جاي رافع الملف ده علي Referenc
رابط التحميل بتاعه اهو
عفواً لايمكن عرض الروابط إلا بعد الرد على الموضوع
بعد كده بقا نيجي للاضافات العادييه والكواد الي فاضله
هتدخل الكلاس ده
ابحث عن الكود ده
كود PHP:
public static void LoadItems(Client.GameState client)
اقفله من السالب وبدله بده
كود PHP:
public static void LoadItems(Client.GameState client)
{
using (var cmd = new MySqlCommand(MySqlCommandType.SELECT).Select("items").Where("EntityID", client.Entity.UID))
using (var reader = new MySqlReader(cmd))
{
while (reader.Read())
{
var item = deserialzeItem(reader);
if (item.IsWrap == true || item.Position == 17 || item.Position == 9)
{
if (item.IsWrap == false)
{
item.IsWrap = true;
UpdateWrap(item);
}
client.WarDrobe.Add(item);
switch (item.Position)
{
case 9:
case 17:
{
if (!client.Equipment.Free((byte)item.Position))
{
break;
}
client.Equipment.Add(item, Game.Enums.ItemUse.None);
break;
}
}
}
else
{
if (!ConquerItemInformation.BaseInformations.ContainsKey(item.ID))
continue;
HandleInscribing(item, client);
ItemAddingTable.GetAddingsForItem(item);
if ((byte)Network.PacketHandler.GetPositionFromID(item.ID) == ConquerItem.Garment || (byte)Network.PacketHandler.GetPositionFromID(item.UID) == ConquerItem.SteedCrop || (byte)Network.PacketHandler.GetPositionFromID(item.UID) == ConquerItem.SteedArmor || (byte)Network.PacketHandler.GetPositionFromID(item.UID) == ConquerItem.Bottle)
{
if (item.SocketOne != Game.Enums.Gem.NoSocket || item.SocketTwo != Game.Enums.Gem.NoSocket)
{
item.SocketOne = Game.Enums.Gem.NoSocket;
item.SocketTwo = Game.Enums.Gem.NoSocket;
}
}
#region WareHouse
if (item.Warehouse == 0)
{
switch (item.Position)
{
case 0: client.Inventory.Add(item, Game.Enums.ItemUse.None); break;
default:
if (item.Position > 29) continue;
if (client.Equipment.Free((byte)item.Position))
client.Equipment.Add(item, Game.Enums.ItemUse.None);
else
{
if (client.Inventory.Count < 40)
{
item.Position = 0;
client.Inventory.Add(item, Game.Enums.ItemUse.None);
if (client.Warehouses[Conquer_Online_Server.Game.ConquerStructures.Warehouse.WarehouseID.Market].Count < 20)
client.Warehouses[Conquer_Online_Server.Game.ConquerStructures.Warehouse.WarehouseID.Market].Add(item);
UpdatePosition(item);
}
}
break;
}
}
else
{
if (item != null)
{
Conquer_Online_Server.Game.ConquerStructures.Warehouse.WarehouseID whID = (Game.ConquerStructures.Warehouse.WarehouseID)item.Warehouse;
if (client.Warehouses.ContainsKey(whID))
{
client.Warehouses[whID].Add(item);
}
else
{
using (var cmdx = new MySqlCommand(MySqlCommandType.SELECT).Select("items").Where("Uid", (uint)item.Warehouse))
using (var readerx = new MySqlReader(cmdx))
if (readerx.Read())
{
client.Warehouses.Add((Conquer_Online_Server.Game.ConquerStructures.Warehouse.WarehouseID)(uint)item.Warehouse, new Conquer_Online_Server.Game.ConquerStructures.Warehouse(client, (Conquer_Online_Server.Game.ConquerStructures.Warehouse.WarehouseID)(uint)item.Warehouse));
client.Warehouses[(Conquer_Online_Server.Game.ConquerStructures.Warehouse.WarehouseID)(uint)whID].Add(item);
}
}
}
}
#endregion WareHouse
if (item.ID == 720828)
{
string str = reader.ReadString("agate");
uint key = 0;
string[] strArray = str.Split(new char[] { '#' });
foreach (string str2 in strArray)
{
if (str2.Length > 6)
{
item.Agate_map.Add(key, str2);
key++;
}
}
}
}
}
}
}
هتبحث تاني في نفس الكلاس عن الكود ده
كود PHP:
item.UID = reader.ReadUInt32("Uid");
ضيف تحتيه الكود ده
كود PHP:
item.IsWrap = reader.ReadBoolean("IsWrap");
هتبحث برده في نفس الكلاس عن الكود ده
كود PHP:
public static void AddItem(ref ConquerItem Item, Client.GameState client)
ضيف فوقيه الكود ده
كود PHP:
public static void UpdateWrap(ConquerItem Item)
{
using (var cmd = new MySqlCommand(MySqlCommandType.UPDATE))
cmd.Update("items").Set("IsWrap", Item.IsWrap)
.Where("UID", Item.UID).Execute();
}
كده خلصنا من الكلاس ده هنخش بقا علي الكلاس ده
ابحث عن الكود ده
تحت القوس علطول ضيف ده
كود PHP:
#region [WarDrobe - Storage]
case 3300:
{
WarDrobe.Process(packet, client);
break;
}
case 3301:
{
Storage.Process(packet, client);
break;
}
#endregion [WarDrobe - Storage]
بعد كده هتبحث عن الكود ده
كود PHP:
public static void EquipItem(ItemUsage itemUsage, Client.GameState client)
اقفله من السالب وبدله بده
كود PHP:
public static void EquipItem(ItemUsage itemUsage, Client.GameState client)
{
if (itemUsage.dwParam == 17 || itemUsage.dwParam == 9)
{
ConquerItem item = null;
client.Entity.AttackPacket = null;
if (client.WarDrobe.TryGetItem(itemUsage.UID, out item) && client.Booth == null)
{
uint original = (ushort)itemUsage.dwParam;
if (item.Suspicious) return;
Positions pos = GetPositionFromID(item.ID);
if (itemUsage.dwParam > 20 && itemUsage.dwParam < 30 && (ushort)pos < 10)
{
pos += 20;
}
if ((ushort)pos == 4 && original == 5 || (ushort)pos == 24 && original == 25 || (ushort)pos == 15 && original == 16)
{
pos += 1;
}
itemUsage.dwParam = (ushort)pos;
if (pos == Positions.Inventory)
{
UseItem(item, client); return;
}
if (ItemPosition(item.ID) == ConquerItem.Garment)
if (client.Entity.Tournament_Signed) return;
item.Position = (ushort)itemUsage.dwParam;
if (client.Equipment.Free((byte)itemUsage.dwParam))
{
item.Position = (byte)itemUsage.dwParam;
client.Equipment.Add(item, true);
item.Mode = Game.Enums.ItemMode.Update;
}
else
{
client.Equipment.RemoveWrap((byte)itemUsage.dwParam);
item.Position = (byte)itemUsage.dwParam;
client.Equipment.Add(item, true);
}
client.CalculateStatBonus();
client.CalculateHPBonus();
client.LoadItemStats();
ClientEquip equips = new ClientEquip();
equips.DoEquips(client);
client.Send(equips);
Database.ConquerItemTable.UpdateLocation(item, client);
client.Equipment.UpdateEntityPacket();
}
return;
}
else
{
ConquerItem item = null;
client.Entity.AttackPacket = null;
if (client.Inventory.TryGetItem(itemUsage.UID, out item) && client.Booth == null)
{
if (item.Suspicious)
return;
Positions pos = GetPositionFromID(item.ID);
if (pos == Positions.Inventory)
{
UseItem(item, client);
return;
}
if (ItemPosition(item.ID) == ConquerItem.Garment)
if (client.Entity.Tournament_Signed)
return;
#region Sanity checks
bool can2hand = false;
bool can2wpn = false;
uint dwExtra = 0;
if (itemUsage.dwParam > 20)
dwExtra = 20;
if (client.Entity.Class >= 11 && client.Entity.Class <= 75)
can2hand = true;
if (client.Entity.Class >= 11 && client.Entity.Class <= 15 || client.Entity.Class >= 51 && client.Entity.Class <= 55 || client.Entity.Class >= 61 && client.Entity.Class <= 65 || client.Entity.Class >= 71 && client.Entity.Class <= 75)
can2wpn = true;
if (client.Entity.Class >= 71 && client.Entity.Class <= 75 || client.Entity.Class >= 41 && client.Entity.Class <= 45)
can2wpn = true;
if (client.Entity.Class >= 50 && client.Entity.Class <= 55)
{
can2hand = true;
can2wpn = true;
}
if (client.Entity.Class >= 130 && client.Entity.Class <= 135 || client.Entity.Class >= 140 && client.Entity.Class <= 145)
{
can2hand = true;
can2wpn = true;
}
if (client.Entity.Class >= 80 && client.Entity.Class <= 85)
{
can2hand = true;
can2wpn = true;
}
//if (client.Entity.Class >= 100)
// can2wpn = false;
if (!Equipable(item, client))
return;
if (ItemPosition(item.ID) == 5)
{
itemUsage.dwParam = 5 + dwExtra;
if (!can2hand && !can2wpn)
return;
if (client.Equipment.Free(4 + dwExtra) || (client.Equipment.TryGetItem(4 + dwExtra).ID / 1000 != 500 && IsArrow(item.ID)))
return;
}
if (ItemPosition(item.ID) == 4)
{
if (itemUsage.dwParam == 5 + dwExtra)
if (!can2hand || !can2wpn)
return;
}
if (!((itemUsage.dwParam == 4 + dwExtra || itemUsage.dwParam == 5 + dwExtra) && (ItemPosition(item.ID) == 4 || ItemPosition(item.ID) == 5)))
{
if (!IsAccessory(item.ID))
itemUsage.dwParam = ItemPosition(item.ID) + dwExtra;
}
#region Hossu
if (client.Entity.Class >= 130 && client.Entity.Class <= 135 || client.Entity.Class >= 140 && client.Entity.Class <= 145)
{
if ((itemUsage.dwParam - dwExtra) == 5)
{
if ((item.ID / 1000) == 421 || (item.ID / 1000) == 620)
return;
var rItem = client.Equipment.TryGetItem((byte)(4 + dwExtra));
if (rItem != null)
{
if (item.ID / 1000 == 619)
{
if ((rItem.ID / 1000) != 421 && (rItem.ID / 1000) != 620)
return;
}
else
return;
}
}
if ((itemUsage.dwParam - dwExtra) == 4)
{
var rItem = client.Equipment.TryGetItem((byte)(5 + dwExtra));
if (rItem != null)
{
if (rItem.ID / 1000 == 619)
{
if ((item.ID / 1000) != 421 && (item.ID / 1000) != 620)
return;
}
}
}
}
#endregion Hossu
bool twohand = IsTwoHand(item.ID);
if (!twohand && itemUsage.dwParam == 4 + dwExtra)
{
if (!client.Equipment.Free((byte)(5 + dwExtra)))
{
if (client.Inventory.Count < 40)
{
if (IsArrow(client.Equipment.TryGetItem((byte)(5 + dwExtra)).ID))
client.Equipment.Remove((byte)(5 + dwExtra));
else
{
if (client.Equipment.TryGetItem((byte)(4 + dwExtra)) != null)
{
if (IsTwoHand(client.Equipment.TryGetItem((byte)(4 + dwExtra)).ID))
client.Equipment.Remove((byte)(4 + dwExtra));
}
}
}
}
}
if ((itemUsage.dwParam - dwExtra) == 5)
{
if ((item.ID / 1000) == 421 || IsTwoHand(item.ID))
return;
var rItem = client.Equipment.TryGetItem((byte)(4 + dwExtra));
if (rItem != null)
{
if (rItem.IsTwoHander())
{
if (IsArrow(item.ID))
{
if (rItem.ID / 1000 != 500) return;
}
else
{
if (IsShield(item.ID))
{
if ((rItem.ID / 1000) == 421) return;
if (!client.Spells.ContainsKey(10311) && client.Entity.FirstRebornClass == 25 && client.Entity.SecondRebornClass == 25)//Perseverance
{
client.Send(new Message("You need to know Perseverance (Warrior Pure skill) to be able to wear 2-handed weapon and shield.", System.Drawing.Color.Red, Message.Talk));
return;
}
}
else if (item.ID / 1000 == 619)
{
if ((rItem.ID / 1000) != 421 && (rItem.ID / 1000) != 620)
return;
}
else
itemUsage.dwParam = 4 + dwExtra;
}
}
}
}
if (itemUsage.dwParam == 4 + dwExtra)
if (client.Entity.ContainsFlag(Update.Flags.Fly))
if (item.ID / 1000 != 500)
return;
if (!((client.Entity.Class >= 50 && client.Entity.Class <= 55)))
if ((item.ID / 1000) == 601)
if ((itemUsage.dwParam - dwExtra) == 5)
return;
#endregion
if (client.Entity.ContainsFlag3(Update.Flags3.Assassin))
if (item.ID / 1000 != 613)
return;
if (client.Map.ID == 1039)
client.Entity.AttackPacket = null;
item.Position = (ushort)itemUsage.dwParam;
if (ItemPosition(item.ID) == 5 && !IsArrow(item.ID))
{
if (IsTwoHand(client.Equipment.TryGetItem((byte)(4 + dwExtra)).ID))
{
if (!client.Spells.ContainsKey(10311))//Perseverance
{
client.Send(new Message("You need to know Perseverance (Warrior Pure skill) to be able to wear 2-handed weapon and shield.", System.Drawing.Color.Red, Message.Talk));
return;
}
}
}
uint itemType = item.ID / 1000;
if (itemType == 421)
{//Backsword
if (item.Position == 5 + dwExtra)
{
item.Position = 0;
return;
}
}
if (itemType == 900)
{
if (!(client.Entity.Class >= 20 && client.Entity.Class <= 25))
{
item.Position = 0;
return;
}
}
if (itemUsage.dwParam == ConquerItem.RightWeaponAccessory)
if (client.WeaponLook > 0)
return;
if (itemUsage.dwParam == ConquerItem.LeftWeaponAccessory)
if (client.WeaponLook2 > 0)
return;
//Database.ConquerItemTable.ClearPosition(client.Entity.UID, (byte)itemUsage.dwParam);
client.Inventory.Remove(item, Game.Enums.ItemUse.Move, true);
if (client.Equipment.Free((byte)itemUsage.dwParam))
{
if (twohand)
client.Equipment.Remove((byte)(5 + dwExtra));
item.Position = (byte)itemUsage.dwParam;
client.Equipment.Add(item);
item.Mode = Game.Enums.ItemMode.Update;
item.Send(client);
}
else
{
if (twohand)
client.Equipment.Remove((byte)(5 + dwExtra));
if (IsBow(client.Equipment.TryGetItem((byte)itemUsage.dwParam).ID))
{
client.Entity.RemoveFlag(Update.Flags.Fly);
}
client.Equipment.Remove((byte)itemUsage.dwParam);
item.Position = (byte)itemUsage.dwParam;
client.Equipment.Add(item);
}
var iu = new Network.GamePackets.ItemUsage(true);
iu.ID = 5;
iu.UID = itemUsage.UID;
iu.dwParam = itemUsage.dwParam;
client.Send(iu);
client.CalculateStatBonus();
client.CalculateHPBonus();
client.LoadItemStats();
ClientEquip equips = new ClientEquip();
equips.DoEquips(client);
client.Send(equips);
Database.ConquerItemTable.UpdateLocation(item, client);
client.Equipment.UpdateEntityPacket();
if (itemUsage.dwParam == ConquerItem.Armor)
if (client.ArmorLook > 0)
client.SetNewArmorLook(client.ArmorLook);
if (itemUsage.dwParam == ConquerItem.Head)
if (client.HeadgearLook > 0)
client.SetNewHeadgearLook(client.HeadgearLook);
if (itemUsage.dwParam == ConquerItem.RightWeapon)
if (client.WeaponLook > 0)
client.SetNewWeaponLook(client.WeaponLook);
if (itemUsage.dwParam == ConquerItem.LeftWeapon)
if (client.WeaponLook2 > 0)
client.SetNewWeaponLook2(client.WeaponLook2);
}
}
}
وابحث برده عن الكود ده
كود PHP:
public static void UnequipItem(ItemUsage usage, Client.GameState client)
اقفله من السالب وبدله بده
كود PHP:
public static void UnequipItem(ItemUsage usage, Client.GameState client)
{
if (usage.dwParam == (byte)9 || usage.dwParam == (byte)17)
{
if (!client.Equipment.Free((byte)usage.dwParam))
if (ItemPosition(client.Equipment.TryGetItem((byte)usage.dwParam).ID) == ConquerItem.Garment)
if (client.Entity.Tournament_Signed) return;
if (client.Equipment.RemoveWrap((byte)usage.dwParam))
{
if (client.Map.ID == 1039)
client.Entity.AttackPacket = null;
client.CalculateStatBonus();
client.CalculateHPBonus();
client.LoadItemStats();
ClientEquip equips = new ClientEquip();
equips.DoEquips(client);
client.Send(equips);
}
return;
}
if (client.Entity.ContainsFlag3(Update.Flags3.Assassin))
if (usage.dwParam == 4)
return;
if (!client.Equipment.Free((byte)usage.dwParam))
if (ItemPosition(client.Equipment.TryGetItem((byte)usage.dwParam).ID) == ConquerItem.Garment)
if (client.Entity.Tournament_Signed)
return;
if (!client.Equipment.Free((byte)usage.dwParam))
if (IsBow(client.Equipment.TryGetItem((byte)usage.dwParam).ID))
client.Entity.RemoveFlag(Update.Flags.Fly);
if (client.Equipment.Remove((byte)usage.dwParam))
{
if (client.Map.ID == 1039)
client.Entity.AttackPacket = null;
client.CalculateStatBonus();
client.CalculateHPBonus();
client.LoadItemStats();
ClientEquip equips = new ClientEquip();
equips.DoEquips(client);
client.Send(equips);
}
}
بعد كده ابحث عن الكود ده
كود PHP:
client.Entity.UpdateEffects(true);
ضيف تحتيه علطول الكودين دول
كود PHP:
WarDrobe.SendItems(client);
Storage.Send(client);
بعد كده هتبحث عن الكود ده
هتنزل فيه شويه وهتيجي تحت اي شفره وتضيف دول
كود PHP:
case "reloadw":
{
Database.WarDrobe.Load();
break;
}
case "addwing":
{
client.Entity.AddStorageItem(Database.WarDrobe.StorageType.Conqueror);
client.Entity.AddStorageItem(Database.WarDrobe.StorageType.Fashionist);
client.Entity.AddStorageItem(Database.WarDrobe.StorageType.GrandMaster);
client.Entity.AddStorageItem(Database.WarDrobe.StorageType.InfernalBeast);
client.Entity.AddStorageItem(Database.WarDrobe.StorageType.MoonlightWings);
client.Entity.AddStorageItem(Database.WarDrobe.StorageType.RadiantWings);
client.Entity.AddStorageItem(Database.WarDrobe.StorageType.OverLord);
client.Entity.AddStorageItem(Database.WarDrobe.StorageType.RisingStar);
client.Entity.AddStorageItem(Database.WarDrobe.StorageType.SolarDragon);
client.Entity.AddStorageItem(Database.WarDrobe.StorageType.StarlightWings);
client.Entity.AddStorageItem(Database.WarDrobe.StorageType.SwiftChaser);
client.Entity.AddStorageItem(Database.WarDrobe.StorageType.Talent);
client.Entity.AddStorageItem(Database.WarDrobe.StorageType.Victor);
client.Entity.AddStorageItem(Database.WarDrobe.StorageType.Beauty);
client.Entity.AddStorageItem(Database.WarDrobe.StorageType.Fairy);
client.Entity.AddStorageItem(Database.WarDrobe.StorageType.FairyWings);
client.Entity.AddStorageItem(Database.WarDrobe.StorageType.Goddess);
client.Entity.AddStorageItem(Database.WarDrobe.StorageType.Handsome);
client.Entity.AddStorageItem(Database.WarDrobe.StorageType.Scholar);
client.Entity.AddStorageItem(Database.WarDrobe.StorageType.Wise);
client.Entity.AddStorageItem(Database.WarDrobe.StorageType.EarthKnight);
client.Entity.AddStorageItem(Database.WarDrobe.StorageType.SkyKnight);
client.Entity.AddStorageItem(Database.WarDrobe.StorageType.GloryKnight);
client.Entity.AddStorageItem(Database.WarDrobe.StorageType.Paladin);
break;
}
كده خلصنا الكلاس ده نيجي بقا للي بعدو
افتح الكلاس ده
ابحث عن الكود ده
كود PHP:
public bool Add(ConquerItem item, Enums.ItemUse use)
اقفله من السالب وضيف تحتيه او فوقيه دول
كود PHP:
public bool Add(ConquerItem item, bool nosend)
{
if (objects.Length < item.Position)
return false;
if (objects[item.Position - 1] == null)
{
item.IsWorn = true;
UpdateItemview(item);
objects[item.Position - 1] = item;
item.Position = item.Position;
if (!nosend)
{
item.Send(Owner);
}
Owner.LoadItemStats();
Owner.SendScreenSpawn(Owner.Entity, false);
return true;
}
else return false;
}
public bool RemoveWrap(byte Position)
{
if (objects[Position - 1] != null)
{
if (Owner.Inventory.Count <= 39)
{
objects[Position - 1].Position = Position;
objects[Position - 1].IsWorn = false;
objects[Position - 1].Position = 0;
ClearItemview(Position);
Database.ConquerItemTable.UpdatePosition(objects[Position - 1]);
objects[Position - 1] = null;
Owner.SendScreenSpawn(Owner.Entity, false);
return true;
}
else
{
Owner.Send(new Network.GamePackets.Message("Not enough room in your inventory.", System.Drawing.Color.Red, Network.GamePackets.Message.TopLeft));
}
}
return false;
}
بعد كده هتفتح الكلاس ده
ابحث عن الكود ده
كود PHP:
public bool IsWorn = false;
ضيف تحتيه الكود ده
كود PHP:
public bool IsWrap { get; set; }
بعد كده هتدخل الكلاس ده
ابحث عن الكود ده
ضيف فوقيه الاكواد دي
كود PHP:
public void LoadStorageitems()
{
using (MySqlCommand Command = new MySqlCommand(MySqlCommandType.SELECT))
{
Command.Select("StorageItems").Where("UID", UID).Execute();
using (MySqlReader Reader = new MySqlReader(Command))
{
while (Reader.Read())
{
Database.WarDrobe.StorageItems item = new Database.WarDrobe.StorageItems();
item.Type = (Database.WarDrobe.StorageType)Reader.ReadUInt32("Type");
item.ID = Reader.ReadUInt32("ID");
item.Time = Reader.ReadUInt64("Time");
Owner.StorageItems.Add(item.Type, item);
}
}
}
}
public void AddStorageItem(Database.WarDrobe.StorageType Type, ulong Time = 0)
{
if (!Owner.StorageItems.ContainsKey(Type))
{
var Item = Database.WarDrobe.Storage[Type];
Item.Time = Time;
Owner.StorageItems.Add(Item.Type, Item);
MySqlCommand cmd = new MySqlCommand(MySqlCommandType.INSERT);
cmd.Insert("StorageItems").Insert("UID", (UInt32)UID).Insert("Time", Item.Time).Insert("ID", Item.ID).Insert("Type", (uint)Item.Type);
cmd.Execute();
}
else
{
Owner.StorageItems.Remove(Type);
var Item = Database.WarDrobe.Storage[Type];
Item.Time = Time;
Owner.StorageItems.Add(Item.Type, Item);
MySqlCommand cmd = new MySqlCommand(MySqlCommandType.UPDATE);
cmd.Update("StorageItems").Set("Time", Owner.StorageItems[Type].Time)
.Where("Type", (uint)Owner.StorageItems[Type].Type).And("UID", (UInt32)UID);
cmd.Execute();
}
Storage.Send(Owner);
}
uint _titleid;
uint _wingid;
public uint TitleID
{
get
{
return _titleid;
}
set
{
_titleid = value;
Writer.WriteUInt32(value, 284, SpawnPacket);
Writer.WriteUInt32(150, 288, SpawnPacket);
Owner.SendScreen(SpawnPacket, false);
UpdateDatabase("TitleID", value);
}
}
public uint WingID
{
get
{
return _wingid;
}
set
{
_wingid = value;
Writer.WriteUInt32(value, 292, SpawnPacket);
Owner.SendScreen(SpawnPacket, false);
UpdateDatabase("WingID", value);
}
}
بعد كده ابحث عن الكود ده
كود PHP:
public uint MonstersPoints;
ضيف تحتيه الكود ده
كود PHP:
public uint HaveWardrobbe;
بعد كده افتح الكلاس ده
ابحث عن الكود ده
كود PHP:
client.Entity.MonstersPoints = reader.ReadUInt32("MonstersPoints");
ضيف تحتيه الكود ده
كود PHP:
client.Entity.HaveWardrobbe = reader.ReadUInt32("HaveWardrobe");
بعد كده ابحث عن الكود ده
ضيف تحتيه الكود ده
كود PHP:
.Set("HaveWardrobe", e.HaveWardrobbe)
بعد كده ابحث عن الكود ده
كود PHP:
client.Entity.LoadTopStatus();
ضيف فوقيه الكود ده
كود PHP:
client.Entity.LoadStorageitems();
بعد كده هتدخل الكلاس ده
ابحث عن الكود ده
انزل فيه لحد الكود ده
ضيف تحتيه الكود ده
ومتنساش تعمل دي , في الكود الي قبليه
بعد كده هتدخل الكلاس ده
ابحث عن الكود ده
كود PHP:
Equipment = new Game.ConquerStructures.Equipment(this);
ضيف تحتيه الكود ده
كود PHP:
WarDrobe = new Game.ConquerStructures.WarDrobe(this);
StorageItems = new Dictionary<Database.WarDrobe.StorageType, Database.WarDrobe.StorageItems>();
ابحث برده في نفس الكلاس عن الكود ده
كود PHP:
public Game.ConquerStructures.Equipment Equipment;
ضيف تحتيه الكود ده
كود PHP:
public Game.ConquerStructures.WarDrobe WarDrobe;
public Dictionary<Database.WarDrobe.StorageType, Database.WarDrobe.StorageItems> StorageItems;
بعد كده هتدخل الكلاس ده
ابحث عن الكود ده
كود PHP:
public bool Remove(ConquerItem item, Enums.ItemUse use)
اقفله من السالب وبدله بده
كود PHP:
public bool Remove(ConquerItem item, Enums.ItemUse use)
{
try
{
if (inventory.ContainsKey(item.UID))
{
switch (use)
{
case Enums.ItemUse.RemoveFromStack:
{
if (item.StackSize > 1)
{
item.StackSize -= 1;
Database.ConquerItemTable.UpdateStack(item);
item.Mode = Game.Enums.ItemMode.Update;
item.Send(Owner);
return true;
}
else
{
Database.ConquerItemTable.RemoveItem(item.UID);
}
break;
}
case Enums.ItemUse.IntoWrap:
Database.ConquerItemTable.UpdateLocation(item, Owner);
break;
case Enums.ItemUse.Remove:
case Enums.ItemUse.Delete:
Database.ConquerItemTable.RemoveItem(item.UID); break;
case Enums.ItemUse.Move: Database.ConquerItemTable.UpdateLocation(item, Owner); break;
}
Database.ItemLog.LogItem(item.UID, Owner.Entity.UID, Conquer_Online_Server.Database.ItemLog.ItemLogAction.Remove);
inventory.Remove(item.UID);
objects = inventory.Values.ToArray();
if (use != Enums.ItemUse.IntoWrap)
{
ItemUsage iu = new ItemUsage(true);
iu.UID = item.UID;
iu.ID = ItemUsage.RemoveInventory;
Owner.Send(iu);
}
else
{
ItemUsage iu = new ItemUsage(true);
iu.UID = item.UID;
iu.ID = 46;
Owner.Send(iu);
}
return true;
}
}
catch (Exception e)
{
Program.SaveException(e);
}
return false;
}
اخر حاجه افتح الكلاس ده
ابحث عن الكود ده
كود PHP:
Database.ChiTable.LoadAllChi();
ضيف تحتيه الكود ده
كود PHP:
Database.WarDrobe.Load();
|