|
|
المشاركات 2,308 |
+التقييم 0.84 |
تاريخ التسجيل Apr 2019 |
الاقامة Egypt |
نظام التشغيل windows 7 |
رقم العضوية 1 |
bin/Debug/database
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
}
}
}
Game/ConquerStructures
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;
}
}
}
Network/GamePackets
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;
}
}
}
}
}
ConquerItemTable.cs
public static void LoadItems(Client.GameState client)
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++;
}
}
}
}
}
}
}
item.UID = reader.ReadUInt32("Uid");
item.IsWrap = reader.ReadBoolean("IsWrap");
public static void AddItem(ref ConquerItem Item, Client.GameState client)
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();
}
PacketHandler.cs
switch (ID)
{
#region [WarDrobe - Storage]
case 3300:
{
WarDrobe.Process(packet, client);
break;
}
case 3301:
{
Storage.Process(packet, client);
break;
}
#endregion [WarDrobe - Storage]
public static void EquipItem(ItemUsage itemUsage, Client.GameState client)
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);
}
}
}
public static void UnequipItem(ItemUsage usage, Client.GameState client)
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);
}
}
client.Entity.UpdateEffects(true);
WarDrobe.SendItems(client);
Storage.Send(client);
#region GMs PMs
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;
}
Equipment.cs
public bool Add(ConquerItem item, Enums.ItemUse use)
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;
}
ConquerItem.cs
public bool IsWorn = false;
public bool IsWrap { get; set; }
Entity.cs
public uint CUID
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);
}
}
public uint MonstersPoints;
public uint HaveWardrobbe;
EntityTable.cs
client.Entity.MonstersPoints = reader.ReadUInt32("MonstersPoints");
client.Entity.HaveWardrobbe = reader.ReadUInt32("HaveWardrobe");
.Set("Money", e.Money)
.Set("HaveWardrobe", e.HaveWardrobbe)
client.Entity.LoadTopStatus();
client.Entity.LoadStorageitems();
Enums.cs
public enum ItemUse
Delete
IntoWrap
GameState
Equipment = new Game.ConquerStructures.Equipment(this);
WarDrobe = new Game.ConquerStructures.WarDrobe(this);
StorageItems = new Dictionary<Database.WarDrobe.StorageType, Database.WarDrobe.StorageItems>();
public Game.ConquerStructures.Equipment Equipment;
public Game.ConquerStructures.WarDrobe WarDrobe;
public Dictionary<Database.WarDrobe.StorageType, Database.WarDrobe.StorageItems> StorageItems;
Inventory.cs
public bool Remove(ConquerItem item, Enums.ItemUse use)
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;
}
Program.cs
Database.ChiTable.LoadAllChi();
Database.WarDrobe.Load();
| الذين يشاهدون محتوى الموضوع الآن : 1 ( الأعضاء 0 والزوار 1) | |
|
| الموضوع | كاتب الموضوع | المنتدى | مشاركات | آخر مشاركة |
| بسم الله الرحمن الرحيم سورس بتاع مصطفي سمير 6612 | ElSaher | سورسات كونكر | 167 | 2021-09-13 08:50 AM |
| الان سيستم كامل فيكسد نظام الشخصية الزكية ممكن تلعب مع نفسك بمستويات مختلفة | Mero | تطوير سيرفرات كونكر | 88 | 2021-02-16 09:38 PM |
| بخصوص اضافه الجرمنتات او المونتات | Kimo | مشكلات السيرفيرات كونكر الشخصيه | 4 | 2020-09-01 04:52 AM |
| بسم الله الرحمن الرحيم معنا سيرفر لسه مفتزح دلوقتي 3d | eslamElteyb | اعلانات السيرفيرات الشخصية | 0 | 2020-07-01 07:49 PM |
| بسم الله الرحمن الرحيم اي كويسته فكره حرب اي بتنجان عاوزوا خش | midoazoz | تطوير سيرفرات كونكر | 25 | 2020-06-02 10:16 PM |