using System; using System.Collections.Generic; using BlackBlock.Network.GamePackets; using BlackBlock.Interfaces; using BlackBlock.Network; namespace BlackBlock.Game.ConquerStructures { public class Equipment { public bool IsWearingItemID(uint ItemID) { foreach (var obj in Objects) { if (obj == null) continue; if (obj.ID == ItemID) return true; } return false; } public short GetTPL() { short value = 0; foreach (var item in objects) if (item != null) value += (short)item.Stars; return value; } public bool IsWearingItemUID(uint ItemUID) { foreach (var obj in Objects) { if (obj == null) continue; if (obj.UID == ItemUID) return true; } return false; } public uint GetFullEquipmentPlusPoints { get { uint val = 0; foreach (Network.GamePackets.ConquerItem item in Objects) { if (item == null) continue; if (item.Position > 19 || item.Position == 7 || item.Position == 9 || item.Position == 15 || item.Position == 16 || item.Position == 17) continue; if (!Network.PacketHandler.IsTwoHand(item.ID)) { if (item.Plus == 1) val += 200; if (item.Plus == 2) val += 600; if (item.Plus == 3) val += 1200; if (item.Plus == 4) val += 1800; if (item.Plus == 5) val += 2600; if (item.Plus == 6) val += 3500; if (item.Plus == 7) val += 4800; if (item.Plus == 8) val += 5800; if (item.Plus == 9) val += 6800; if (item.Plus == 10) val += 7800; if (item.Plus == 11) val += 8800; if (item.Plus == 12) val += 10000; } else { if (item.Plus == 1) val += 400; if (item.Plus == 2) val += 1200; if (item.Plus == 3) val += 2400; if (item.Plus == 4) val += 3600; if (item.Plus == 5) val += 5200; if (item.Plus == 6) val += 7000; if (item.Plus == 7) val += 9600; if (item.Plus == 8) val += 11600; if (item.Plus == 9) val += 13600; if (item.Plus == 10) val += 15600; if (item.Plus == 11) val += 17600; if (item.Plus == 12) val += 20000; } } return val; } } public uint GetFullEquipmentEnumPoints { get { uint Points = 0; foreach (Network.GamePackets.ConquerItem item in Objects) { if (item == null) continue; if (item.Position > 19 || item.Position == 7 || item.Position == 9 || item.Position == 15 || item.Position == 16 || item.Position == 17) continue; if (!Network.PacketHandler.IsTwoHand(item.ID)) { if (item.ID % 10 == 9) Points += 500; if (item.ID % 10 == 8) Points += 300; if (item.ID % 10 == 7) Points += 200; if (item.ID % 10 == 6) Points += 100; if (item.ID % 10 > 0 && item.ID % 10 < 6) Points += 50; } else { if (item.ID % 10 == 9) Points += 1000; if (item.ID % 10 == 8) Points += 600; if (item.ID % 10 == 7) Points += 400; if (item.ID % 10 == 6) Points += 200; if (item.ID % 10 > 0 && item.ID % 10 < 6) Points += 100; } } return Points; } } public uint GetFullEquipmentSoulPoints { get { uint Points = 0; foreach (Network.GamePackets.ConquerItem item in Objects) { if (item == null || !item.Purification.Available) continue; if (item.Position > 19 || item.Position == 7 || item.Position == 9 || item.Position == 15 || item.Position == 16 || item.Position == 17) continue; if (!Network.PacketHandler.IsTwoHand(item.ID)) { if (item.Purification.PurificationLevel == 1) Points += 100; if (item.Purification.PurificationLevel == 2) Points += 300; if (item.Purification.PurificationLevel == 3) Points += 500; if (item.Purification.PurificationLevel == 4) Points += 800; if (item.Purification.PurificationLevel == 5) Points += 1200; if (item.Purification.PurificationLevel == 6) Points += 1600; if (item.Purification.PurificationLevel == 7) Points += 2000; } else { if (item.Purification.PurificationLevel == 1) Points += 200; if (item.Purification.PurificationLevel == 2) Points += 600; if (item.Purification.PurificationLevel == 3) Points += 1000; if (item.Purification.PurificationLevel == 4) Points += 1600; if (item.Purification.PurificationLevel == 5) Points += 2400; if (item.Purification.PurificationLevel == 6) Points += 3200; if (item.Purification.PurificationLevel == 7) Points += 4000; } } return Points; } } public uint GetFullEquipmentEnchantPoints { get { uint val = 0; foreach (Network.GamePackets.ConquerItem item in Objects) { if (item == null) continue; if (item.Position > 19 || item.Position == 7 || item.Position == 9 || item.Position == 15 || item.Position == 16 || item.Position == 17) continue; if (!Network.PacketHandler.IsTwoHand(item.ID)) { var enc = (uint)(item.Enchant); if (enc != 0) { if (enc <= 200) val += enc * 1; if (enc <= 240) val += (uint)(enc * 1.3); if (enc <= 254) val += (uint)(enc * 1.6); if (enc <= 255) val += enc * 2; } } else { var enc = (uint)(item.Enchant); if (enc != 0) { if (enc <= 200) val += enc * 2; if (enc <= 240) val += (uint)(enc * 2.6); if (enc <= 254) val += (uint)(enc * 3.2); if (enc <= 255) val += enc * 4; } } } return val; } } public uint GetFullEquipmentLevelPoints { get { uint val = 0; foreach (Network.GamePackets.ConquerItem item in Objects) { if (item == null || !Database.ConquerItemInformation.BaseInformations.ContainsKey(item.ID)) continue; if (item.Position > 19 || item.Position == 7 || item.Position == 9 || item.Position == 15 || item.Position == 16 || item.Position == 17) continue; if (!Network.PacketHandler.IsTwoHand(item.ID)) { var lvl = (uint)Database.ConquerItemInformation.BaseInformations[item.ID].Level; if (lvl <= 120) val += lvl * 3; else if (lvl <= 130) val += lvl * 5; else if (lvl <= 140) val += lvl * 6; } else { var lvl = (uint)Database.ConquerItemInformation.BaseInformations[item.ID].Level; if (lvl <= 120) val += lvl * 6; else if (lvl <= 130) val += lvl * 10; else if (lvl <= 140) val += lvl * 12; } } return val; } } public uint GetFullEquipmentGemPoints { get { uint val = 0; foreach (Network.GamePackets.ConquerItem item in Objects) { if (item == null) continue; if (item.Position > 19 || item.Position == 7 || item.Position == 9 || item.Position == 15 || item.Position == 16 || item.Position == 17) continue; if (!Network.PacketHandler.IsTwoHand(item.ID)) { if (item.SocketOne != (Game.Enums.Gem)0) { if (item.SocketOne2 % 10 == 1) val += 200; if (item.SocketOne2 % 10 == 2) val += 500; if (item.SocketOne2 % 10 == 3) val += 800; } if (item.SocketTwo != (Game.Enums.Gem)0) { if (item.SocketTwo2 % 10 == 1) val += 200; if (item.SocketTwo2 % 10 == 2) val += 500; if (item.SocketTwo2 % 10 == 3) val += 800; } } else { if (item.SocketOne != (Game.Enums.Gem)0) { if (item.SocketOne2 % 10 == 1) val += 400; if (item.SocketOne2 % 10 == 2) val += 1000; if (item.SocketOne2 % 10 == 3) val += 1600; } if (item.SocketTwo != (Game.Enums.Gem)0) { if (item.SocketTwo2 % 10 == 1) val += 400; if (item.SocketTwo2 % 10 == 2) val += 1000; if (item.SocketTwo2 % 10 == 3) val += 1600; } } } return val; } } public uint GetFullEquipmentPerfecetionLevelPoints { get { uint Points = 0; foreach (Network.GamePackets.ConquerItem item in Objects) { if (item == null) continue; if (item.Position > 19 || item.Position == 7 || item.Position == 9 || item.Position == 15 || item.Position == 16 || item.Position == 17) continue; if (item.Stars >= 1) Points += 180; if (item.Stars >= 2) Points += 180; if (item.Stars >= 3) Points += 180; if (item.Stars >= 4) Points += 180; if (item.Stars >= 5) Points += 180; if (item.Stars >= 6) Points += 180; if (item.Stars >= 7) Points += 180; if (item.Stars >= 8) Points += 180; if (item.Stars >= 9) Points += 180; if (item.Stars >= 10) Points += 2380; if (item.Stars >= 11) Points += 400; if (item.Stars >= 12) Points += 400; if (item.Stars >= 13) Points += 400; if (item.Stars >= 14) Points += 400; if (item.Stars >= 15) Points += 400; if (item.Stars >= 16) Points += 400; if (item.Stars >= 17) Points += 400; if (item.Stars >= 18) Points += 400; if (item.Stars >= 19) Points += 5150; if (item.Stars >= 20) Points += 650; if (item.Stars >= 21) Points += 650; if (item.Stars >= 22) Points += 650; if (item.Stars >= 23) Points += 650; if (item.Stars >= 24) Points += 650; if (item.Stars >= 25) Points += 650; if (item.Stars >= 26) Points += 650; if (item.Stars >= 27) Points += 650; if (item.Stars >= 28) Points += 100; if (item.Stars >= 29) Points += 100; if (item.Stars >= 30) Points += 100; if (item.Stars >= 31) Points += 100; if (item.Stars >= 32) Points += 100; if (item.Stars >= 33) Points += 100; if (item.Stars >= 34) Points += 100; if (item.Stars >= 35) Points += 100; if (item.Stars >= 36) Points += 100; if (item.Stars >= 37) Points += 100; if (item.Stars >= 38) Points += 100; if (item.Stars >= 39) Points += 100; if (item.Stars >= 40) Points += 100; if (item.Stars >= 41) Points += 100; if (item.Stars >= 42) Points += 100; if (item.Stars >= 43) Points += 100; if (item.Stars >= 44) Points += 100; if (item.Stars >= 45) Points += 100; if (item.Stars >= 46) Points += 100; if (item.Stars >= 47) Points += 100; if (item.Stars >= 48) Points += 100; if (item.Stars >= 49) Points += 100; if (item.Stars >= 50) Points += 100; if (item.Stars >= 51) Points += 100; if (item.Stars >= 52) Points += 100; if (item.Stars >= 53) Points += 100; if (item.Stars >= 54) Points += 100; if (Network.PacketHandler.IsTwoHand(item.ID)) { if (item.Stars >= 1) Points += 180; if (item.Stars >= 2) Points += 180; if (item.Stars >= 3) Points += 180; if (item.Stars >= 4) Points += 180; if (item.Stars >= 5) Points += 180; if (item.Stars >= 6) Points += 180; if (item.Stars >= 7) Points += 180; if (item.Stars >= 8) Points += 180; if (item.Stars >= 9) Points += 180; if (item.Stars >= 10) Points += 2380; if (item.Stars >= 11) Points += 400; if (item.Stars >= 12) Points += 400; if (item.Stars >= 13) Points += 400; if (item.Stars >= 14) Points += 400; if (item.Stars >= 15) Points += 400; if (item.Stars >= 16) Points += 400; if (item.Stars >= 17) Points += 400; if (item.Stars >= 18) Points += 400; if (item.Stars >= 19) Points += 5150; if (item.Stars >= 20) Points += 650; if (item.Stars >= 21) Points += 650; if (item.Stars >= 22) Points += 650; if (item.Stars >= 23) Points += 650; if (item.Stars >= 24) Points += 650; if (item.Stars >= 25) Points += 650; if (item.Stars >= 26) Points += 650; if (item.Stars >= 27) Points += 650; if (item.Stars >= 28) Points += 100; if (item.Stars >= 29) Points += 100; if (item.Stars >= 30) Points += 100; if (item.Stars >= 31) Points += 100; if (item.Stars >= 32) Points += 100; if (item.Stars >= 33) Points += 100; if (item.Stars >= 34) Points += 100; if (item.Stars >= 35) Points += 100; if (item.Stars >= 36) Points += 100; if (item.Stars >= 37) Points += 100; if (item.Stars >= 38) Points += 100; if (item.Stars >= 39) Points += 100; if (item.Stars >= 40) Points += 100; if (item.Stars >= 41) Points += 100; if (item.Stars >= 42) Points += 100; if (item.Stars >= 43) Points += 100; if (item.Stars >= 44) Points += 100; if (item.Stars >= 45) Points += 100; if (item.Stars >= 46) Points += 100; if (item.Stars >= 47) Points += 100; if (item.Stars >= 48) Points += 100; if (item.Stars >= 49) Points += 100; if (item.Stars >= 50) Points += 100; if (item.Stars >= 51) Points += 100; if (item.Stars >= 52) Points += 100; if (item.Stars >= 53) Points += 100; if (item.Stars >= 54) Points += 100; } } return Points; } } public uint GetFullEquipmentSocketPoints { get { uint val = 0; foreach (Network.GamePackets.ConquerItem item in Objects) { if (item == null) continue; if (item.Position > 19 || item.Position == 7 || item.Position == 9 || item.Position == 15 || item.Position == 16 || item.Position == 17) continue; if (!Network.PacketHandler.IsTwoHand(item.ID)) { if (item.SocketOne != (Game.Enums.Gem)0) val += 1000; if (item.SocketTwo != (Game.Enums.Gem)0) val += 2500; } else { if (item.SocketOne != (Game.Enums.Gem)0) val += 2000; if (item.SocketTwo != (Game.Enums.Gem)0) val += 5000; } } return val; } } public uint GetFullEquipmentBlessPoints { get { uint val = 0; foreach (Network.GamePackets.ConquerItem item in Objects) { if (item == null) continue; if (item.Position > 19 || item.Position == 7 || item.Position == 9 || item.Position == 15 || item.Position == 16 || item.Position == 17) continue; if (!Network.PacketHandler.IsTwoHand(item.ID)) { val += (uint)(item.Bless * 100); } else { val += (uint)(item.Bless * 200); } } return val; } } public uint GetFullEquipmentRefinePoints { get { uint val = 0; foreach (Network.GamePackets.ConquerItem item in Objects) { if (item == null || !item.ExtraEffect.Available) continue; if (item.Position > 19 || item.Position == 7 || item.Position == 9 || item.Position == 15 || item.Position == 16 || item.Position == 17) continue; if (!Network.PacketHandler.IsTwoHand(item.ID)) { if (item.ExtraEffect.EffectLevel == 1) val += 100; if (item.ExtraEffect.EffectLevel == 2) val += 400; if (item.ExtraEffect.EffectLevel == 3) val += 800; if (item.ExtraEffect.EffectLevel == 4) val += 1200; if (item.ExtraEffect.EffectLevel == 5) val += 1600; if (item.ExtraEffect.EffectLevel == 6) val += 2000; } else { if (item.ExtraEffect.EffectLevel == 1) val += 200; if (item.ExtraEffect.EffectLevel == 2) val += 800; if (item.ExtraEffect.EffectLevel == 3) val += 1600; if (item.ExtraEffect.EffectLevel == 4) val += 2400; if (item.ExtraEffect.EffectLevel == 5) val += 3200; if (item.ExtraEffect.EffectLevel == 6) val += 4000; } } return val; } } public ushort TotalStars { get { ushort Count = 0; foreach (Network.GamePackets.ConquerItem item in Objects) { if (item == null) continue; if (item.Position > 19 || item.Position == 7 || item.Position == 9 || item.Position == 15 || item.Position == 16 || item.Position == 17) continue; Count += (ushort)(Network.PacketHandler.IsTwoHand(item.ID) ? item.Stars * 2 : item.Stars); } return Count; } } ConquerItem[] objects; Client.GameState Owner; public Equipment(Client.GameState client) { Owner = client; objects = new ConquerItem[29]; } public void UpdateEntityPacket() { for (byte Position = 1; Position < 30; Position++) { if (Free(Position)) { ClearItemview(Position); // ClearItemview2(Position); /////////////////////////////Cpu////////////////////////////// /////////////////////////////Cpu////////////////////////////// } else { var item = TryGetItem(Position); UpdateItemview(item); /////////////////////////////Cpu////////////////////////////// /////////////////////////////Cpu////////////////////////////// } } if (Owner.ArmorLook != 0) { Network.Writer.WriteUInt32(0, ArmorSoul, Owner.Player.SpawnPacket); Network.Writer.WriteUInt32(Owner.ArmorLook, Armor, Owner.Player.SpawnPacket); } if (Owner.HeadgearLook > 0) { Network.Writer.WriteUInt32(0, HeadSoul, Owner.Player.SpawnPacket); Network.Writer.WriteUInt32(Owner.HeadgearLook, Head, Owner.Player.SpawnPacket); } if (Owner.WeaponLook > 0) { Network.Writer.WriteUInt32(0, RightWeaponSoul, Owner.Player.SpawnPacket); Network.Writer.WriteUInt32(Owner.WeaponLook, RightWeapon, Owner.Player.SpawnPacket); } if (Owner.WeaponLook2 > 0) { Network.Writer.WriteUInt32(0, LeftWeaponSoul, Owner.Player.SpawnPacket); Network.Writer.WriteUInt32(Owner.WeaponLook2, LeftWeapon, Owner.Player.SpawnPacket); } Owner.SendScreen(Owner.Player.SpawnPacket, false); } public uint GetGear(byte Position, Client.GameState C) { ConquerItem I = C.Equipment.TryGetItem(Position); if (I == null) { return 0; } return I.UID; } public bool Add(ConquerItem item) { if (objects.Length < item.Position) return false; if (item.Position - 1 >= objects.Length) return false; if (item.Position - 1 < 0) return false; if (objects[item.Position - 1] == null) { item.IsWorn = true; UpdateItemview(item); objects[item.Position - 1] = item; item.Position = item.Position; item.Send(Owner); Owner.LoadItemStats(); Owner.SendScreenSpawn(Owner.Player, false); return true; } else return false; } public bool Add(ConquerItem item, Enums.ItemUse use) { if (objects[item.Position - 1] == null) { objects[item.Position - 1] = item; item.Mode = Enums.ItemMode.Default; if (use != Enums.ItemUse.None) { item.IsWorn = true; UpdateItemview(item); item.Send(Owner); Owner.LoadItemStats(); } return true; } else return false; } #region Offsets public const int Head = 56, Garment = 60, Armor = 64, LeftWeapon = 68, RightWeapon = 72, LeftWeaponAccessory = 76, RightWeaponAccessory = 80, Steed = 84, MountArmor = 88, Wing = 92, WingPlus = 96, WingProgress = 97, ArmorColor = 162, LeftWeaponColor = 164, HeadColor = 166, SteedPlus = 172, SteedColor = 174, HeadSoul = 221, ArmorSoul = 225, LeftWeaponSoul = 229, RightWeaponSoul = 233; #endregion Offsets public void ClearItemview(uint Position) { switch ((ushort)Position) { case Network.GamePackets.ConquerItem.Head: Writer.Write(0, HeadSoul, Owner.Player.SpawnPacket); Writer.Write(0, Head, Owner.Player.SpawnPacket); Writer.Write(0, HeadColor, Owner.Player.SpawnPacket); break; case Network.GamePackets.ConquerItem.Garment: if (Owner.Player.MapID != 1081) Writer.Write(0, Garment, Owner.Player.SpawnPacket); break; case Network.GamePackets.ConquerItem.Armor: Writer.Write(0, ArmorSoul, Owner.Player.SpawnPacket); Writer.Write(0, Armor, Owner.Player.SpawnPacket); Writer.Write(0, ArmorColor, Owner.Player.SpawnPacket); break; case Network.GamePackets.ConquerItem.RightWeapon: Writer.Write(0, RightWeaponSoul, Owner.Player.SpawnPacket); Writer.Write(0, RightWeapon, Owner.Player.SpawnPacket); break; case Network.GamePackets.ConquerItem.LeftWeapon: Writer.Write(0, LeftWeaponSoul, Owner.Player.SpawnPacket); Writer.Write(0, LeftWeapon, Owner.Player.SpawnPacket); Writer.Write(0, LeftWeaponColor, Owner.Player.SpawnPacket); break; case Network.GamePackets.ConquerItem.RightWeaponAccessory: Writer.Write(0, RightWeaponAccessory, Owner.Player.SpawnPacket); break; case Network.GamePackets.ConquerItem.LeftWeaponAccessory: Writer.Write(0, LeftWeaponAccessory, Owner.Player.SpawnPacket); break; case Network.GamePackets.ConquerItem.Steed: Writer.Write(0, Steed, Owner.Player.SpawnPacket); Writer.Write(0, SteedPlus, Owner.Player.SpawnPacket); Writer.Write(0, SteedColor, Owner.Player.SpawnPacket); break; case Network.GamePackets.ConquerItem.SteedArmor: Writer.Write(0, MountArmor, Owner.Player.SpawnPacket); break; case Network.GamePackets.ConquerItem.Wing: Writer.Write(0, Wing, Owner.Player.SpawnPacket); Writer.Write(0, WingPlus, Owner.Player.SpawnPacket); Writer.Write(0, WingProgress, Owner.Player.SpawnPacket); break; } } public void UpdateItemview(ConquerItem item) { if (item == null) return; if (!item.IsWorn) return; switch ((ushort)item.Position) { case Network.GamePackets.ConquerItem.AlternateHead: case Network.GamePackets.ConquerItem.Head: if (item.Purification.Available) Writer.Write(item.Purification.PurificationItemID, HeadSoul, Owner.Player.SpawnPacket); else Writer.Write(0, HeadSoul, Owner.Player.SpawnPacket); Writer.Write(item.ID, Head, Owner.Player.SpawnPacket); Writer.Write((byte)item.Color, HeadColor, Owner.Player.SpawnPacket); break; case Network.GamePackets.ConquerItem.AlternateGarment: case Network.GamePackets.ConquerItem.Garment: Writer.Write(item.ID, Garment, Owner.Player.SpawnPacket); break; case Network.GamePackets.ConquerItem.AlternateArmor: case Network.GamePackets.ConquerItem.Armor: if (item.Purification.Available) Writer.Write(item.Purification.PurificationItemID, ArmorSoul, Owner.Player.SpawnPacket); else Writer.Write(0, ArmorSoul, Owner.Player.SpawnPacket); Writer.Write(item.ID, Armor, Owner.Player.SpawnPacket); Writer.Write((byte)item.Color, ArmorColor, Owner.Player.SpawnPacket); break; case Network.GamePackets.ConquerItem.AlternateRightWeapon: case Network.GamePackets.ConquerItem.RightWeapon: if (item.Purification.Available) Writer.Write(item.Purification.PurificationItemID, RightWeaponSoul, Owner.Player.SpawnPacket); else Writer.Write(0, RightWeaponSoul, Owner.Player.SpawnPacket); Writer.Write(item.ID, RightWeapon, Owner.Player.SpawnPacket); break; case Network.GamePackets.ConquerItem.RightWeaponAccessory: Writer.Write(item.ID, RightWeaponAccessory, Owner.Player.SpawnPacket); break; case Network.GamePackets.ConquerItem.AlternateLeftWeapon: case Network.GamePackets.ConquerItem.LeftWeapon: if (item.Purification.Available) Writer.Write(item.Purification.PurificationItemID, LeftWeaponSoul, Owner.Player.SpawnPacket); else Writer.Write(0, LeftWeaponSoul, Owner.Player.SpawnPacket); Writer.Write((byte)item.Color, LeftWeaponColor, Owner.Player.SpawnPacket); Writer.Write(item.ID, LeftWeapon, Owner.Player.SpawnPacket); break; case Network.GamePackets.ConquerItem.LeftWeaponAccessory: Writer.Write(item.ID, LeftWeaponAccessory, Owner.Player.SpawnPacket); break; case Network.GamePackets.ConquerItem.Steed: Writer.Write(item.ID, Steed, Owner.Player.SpawnPacket); Writer.Write((byte)item.Plus, SteedPlus, Owner.Player.SpawnPacket); Writer.Write(item.SocketProgress, SteedColor, Owner.Player.SpawnPacket); break; case Network.GamePackets.ConquerItem.SteedArmor: Writer.Write(item.ID, MountArmor, Owner.Player.SpawnPacket); break; case Network.GamePackets.ConquerItem.Wing: Writer.Write(item.ID, Wing, Owner.Player.SpawnPacket); Writer.Write(item.Plus, WingPlus, Owner.Player.SpawnPacket); Writer.Write(item.PlusProgress, WingProgress, Owner.Player.SpawnPacket); break; } } public bool TryGetItem(uint itemGuid, out ConquerItem myItem) { for (int i = 0; i < Objects.Length; i++) { var item = Objects[i]; if (item != null) { if (item.UID == itemGuid) { myItem = item; return true; } } } myItem = null; return false; } public bool Remove(byte Position, bool dontAdd = false) { if (objects == null || objects[Position - 1] == null) return false; if (objects[Position - 1] != null) { if (Owner.Inventory.Count <= 39) { if (dontAdd ? true : Owner.Inventory.Add(objects[Position - 1], Enums.ItemUse.Move)) { objects[Position - 1].Position = Position; objects[Position - 1].IsWorn = false; objects[Position - 1].Position = 0; if (Position == 12) Owner.Player.RemoveFlag((ulong)Update.Flags.Ride); if (Position == 4) Owner.Player.RemoveFlag((ulong)Update.Flags.Fly); ItemUsage iu = new ItemUsage(true); iu.UID = objects[Position - 1].UID; iu.dwParam = Position; iu.ID = ItemUsage.UnequipItem; Owner.Send(iu.ToArray()); ClearItemview(Position); objects[Position - 1] = null; Owner.SendScreenSpawn(Owner.Player, false); return true; } } else { Owner.Send("Not enough room in your inventory."); } } return false; } public bool DestroyArrow(uint Position) { if (objects[Position - 1] != null) { objects[Position - 1].Position = (ushort)Position; if (objects[Position - 1].ID == 0) { objects[Position - 1].Position = 0; Database.ConquerItemTable.DeleteItem(objects[Position - 1].UID); objects[Position - 1] = null; return true; } if (!Network.PacketHandler.IsArrow(objects[Position - 1].ID)) return false; //Owner.UnloadItemStats(objects[Position - 1], false); objects[Position - 1].IsWorn = false; Database.ConquerItemTable.DeleteItem(objects[Position - 1].UID); Network.GamePackets.ItemUsage iu = new Network.GamePackets.ItemUsage(true); iu.UID = objects[Position - 1].UID; iu.dwParam = Position; iu.ID = Network.GamePackets.ItemUsage.UnequipItem; Owner.Send(iu); iu.dwParam = 0; iu.ID = Network.GamePackets.ItemUsage.RemoveInventory; Owner.Send(iu); ClearItemview(Position); objects[Position - 1].Position = 0; objects[Position - 1] = null; return true; } return false; } public bool RemoveToGround(uint Position) { if (Position == 0 || Position > 29) return true; if (objects[Position - 1] != null) { objects[Position - 1].Position = (ushort)Position; objects[Position - 1].IsWorn = false; //Owner.UnloadItemStats(objects[Position - 1], false); objects[Position - 1].Position = 0; Database.ConquerItemTable.RemoveItem(objects[Position - 1].UID); Network.GamePackets.ItemUsage iu = new Network.GamePackets.ItemUsage(true); iu.UID = objects[Position - 1].UID; iu.dwParam = Position; iu.ID = Network.GamePackets.ItemUsage.UnequipItem; Owner.Send(iu); iu.dwParam = 0; iu.ID = Network.GamePackets.ItemUsage.RemoveInventory; Owner.Send(iu); ClearItemview(Position); objects[Position - 1] = null; return true; } return false; } public ConquerItem[] Objects { get { return objects; } } public byte Count { get { byte count = 0; foreach (ConquerItem i in objects) if (i != null) count++; return count; } } public bool Free(byte Position) { return TryGetItem(Position) == null; } public bool Free(uint Position) { return TryGetItem((byte)Position) == null; } public ConquerItem TryGetItem(byte Position) { ConquerItem item = null; if (Position < 1 || Position > 29) return item; item = objects[Position - 1]; return item; } public ConquerItem TryGetItem(uint uid) { try { foreach (ConquerItem item in objects) { if (item != null) if (item.UID == uid) return item; } } catch (Exception e) { Program.SaveException(e); Console.WriteLine(e); } return TryGetItem((byte)uid); } public bool IsArmorSuper() { if (TryGetItem(3) != null) return TryGetItem(3).ID % 10 == 9; return false; } public bool IsAllSuper() { for (byte count = 1; count < 12; count++) { if (count == 5) { if (Owner.Player.Class > 100) continue; if (TryGetItem(count) != null) { if (Network.PacketHandler.IsArrow(TryGetItem(count).ID)) continue; if (Network.PacketHandler.IsTwoHand(TryGetItem(4).ID)) continue; if (TryGetItem(count).ID % 10 != 9) return false; } } else { if (TryGetItem(count) != null) { if (count != Network.GamePackets.ConquerItem.Bottle && count != Network.GamePackets.ConquerItem.Garment) if (TryGetItem(count).ID % 10 != 9) return false; } else if (count != Network.GamePackets.ConquerItem.Bottle && count != Network.GamePackets.ConquerItem.Garment) return false; } } return true; } public void ForceEquipments(Equipment equips) { objects = equips.objects; } public IEnumerable<ConquerItem> GetCollection() { foreach (var it in objects) { if (it != null) yield return it; } } } }