public static bool HandleDrawMoney(Models.Entities.Player player, Models.Packets.Items.ItemActionPacket packet) { if (player.Guild != null && player.Guild.InHouse(player)) { if (player.Guild.DbGuild.WHMoney < packet.Data1) { return(true); } player.Guild.DbGuild.WHMoney -= packet.Data1; player.Guild.DbGuild.Update(); } else { if (player.WarehouseMoney < packet.Data1) { return(true); } player.WarehouseMoney -= packet.Data1; } player.Money += packet.Data1; return(true); }
public static bool HandleSell(Models.Entities.Player player, Models.Packets.Items.ItemActionPacket packet) { Models.Misc.Shop shop; if (Collections.ShopCollection.TryGetShop(packet.ClientId, out shop)) { var npc = shop.Npc; if (npc != null && Tools.RangeTools.ValidDistance(npc.X, npc.Y, player.X, player.Y)) { Models.Items.Item item; if (player.Inventory.TryGetItem(packet.Data1, out item)) { if (!item.Discardable) { player.SendSystemMessage("NO_PERMISSION_ITEM"); return(true); } player.AddActionLog("Sell", item.DbOwnerItem.Id); uint giveback = (uint)(item.DbOwnerItem.CurrentDura > 0 ? (item.DbItem.Price / 3) : 0); if (player.Inventory.Remove(item.ClientId)) { player.Money += giveback; } } } } return(true); }
/// <summary> /// Unmasks an equipment. /// </summary> /// <param name="position">The position.</param> /// <returns>True if the unmask was done successfully.</returns> public bool Unmask(Enums.ItemPosition position) { Models.Items.Item removedItem; var success = _maskedEquipments.TryRemove(position, out removedItem); Models.Items.Item equipment; if (success) { Player.ClientSocket.Send(new Models.Packets.Items.ItemActionPacket { Player = this.Player, ClientId = removedItem.ClientId, Action = Enums.ItemAction.Unequip, Data1Low = (ushort)position }); var itempacket = new Models.Packets.Items.ItemActionPacket(); itempacket.Action = Enums.ItemAction.Remove; itempacket.ClientId = removedItem.ClientId; Player.ClientSocket.Send(itempacket); if (_equipments.TryGetValue(position, out equipment)) { Equip(equipment, position, false, true); } } return(success); }
public static bool Handle(Models.Entities.Player player, Models.Packets.Items.ItemActionPacket packet) { if (!player.Alive) { return(true); } Models.Items.Item upgradeItem; Models.Items.Item meteor; if (!player.Inventory.TryGetItem(packet.ClientId, out upgradeItem) || !player.Inventory.TryGetItem(packet.Data1, out meteor) || (meteor.DbItem.Id != 1088001 && meteor.DbItem.Id != 1088002)) { player.SendSystemMessage("UPLEVEL_ITEM_NOT_FOUND_OR_NO_METEORS"); return(true); } if (upgradeItem.DbOwnerItem.CurrentDura < upgradeItem.DbOwnerItem.MaxDura) { player.SendSystemMessage("UPLEVEL_ITEM_LOW_DURA"); return(true); } if (upgradeItem.IsGarment || upgradeItem.IsArrow || upgradeItem.IsBottle || upgradeItem.IsMountArmor || upgradeItem.IsMisc) { player.SendSystemMessage("UPLEVEL_ITEM_INVALID"); return(true); } if (upgradeItem.DbItem.Level >= 120) { player.SendSystemMessage("UPLEVEL_ITEM_MAX_LEVEL"); return(true); } if (player.Inventory.Remove(packet.Data1)) { int extraChance = Math.Max(0, (80 - upgradeItem.DbItem.Level)); int chance = Math.Min(90, Data.Constants.Chances.UpgradeLevelChance + extraChance); player.AddActionLog("ItemUpLevel", upgradeItem.DbOwnerItem.Id); if (upgradeItem.UpgradeLevel(player) && Tools.CalculationTools.ChanceSuccess(chance)) { upgradeItem.UpgradeSockets(player); player.SendSystemMessage("UPLEVEL_SUCCESS"); } else { player.SendSystemMessage("UPLEVEL_FAIL"); } } return(true); }
public static bool Handle(Models.Entities.Player player, Models.Packets.Items.ItemActionPacket packet) { if (!player.Alive) { return(true); } Models.Items.Item upgradeItem; Models.Items.Item dragonBall; if (!player.Inventory.TryGetItem(packet.ClientId, out upgradeItem) || !player.Inventory.TryGetItem(packet.Data1, out dragonBall) || dragonBall.DbItem.Id != 1088000) { player.SendSystemMessage("IMPROVE_ITEM_NOT_FOUND_OR_NO_DRAGONBALLS"); return(true); } if (upgradeItem.DbOwnerItem.CurrentDura < upgradeItem.DbOwnerItem.MaxDura) { player.SendSystemMessage("IMPROVE_ITEM_LOW_DURA"); return(true); } if (upgradeItem.IsGarment || upgradeItem.IsArrow || upgradeItem.IsBottle || upgradeItem.IsMountArmor || upgradeItem.IsMisc) { player.SendSystemMessage("IMPROVE_ITEM_INVALID"); return(true); } if (upgradeItem.Quality == Enums.ItemQuality.Super) { player.SendSystemMessage("IMPROVE_ITEM_IS_SUPER"); return(true); } int extraChance = Math.Max(0, (80 - ((int)upgradeItem.Quality) * 10)); int chance = Math.Min(90, Data.Constants.Chances.UpgradeQualityChance + extraChance); player.AddActionLog("Improve", upgradeItem.DbOwnerItem.Id); if (player.Inventory.Remove(packet.Data1) && Tools.CalculationTools.ChanceSuccess(chance)) { upgradeItem.UpgradeQuality(player); upgradeItem.UpgradeSockets(player); player.SendSystemMessage("IMPROVE_SUCCESS"); } else { player.SendSystemMessage("IMPROVE_FAIL"); } return(true); }
public static bool HandleBuy(Models.Entities.Player player, Models.Packets.Items.ItemActionPacket packet) { if (player.Inventory.Count == 40) { player.SendSystemMessage("INVENTORY_FULL"); return(true); } Models.Misc.Shop shop; if (Collections.ShopCollection.TryGetShop(packet.ClientId, out shop)) { var npc = shop.Npc; if (shop.ShopType != Enums.ShopType.Money || npc != null && Tools.RangeTools.ValidDistance(npc.X, npc.Y, player.X, player.Y)) { uint itemId = packet.Data1; if (!shop.Items.Contains(itemId)) { return(false); } uint amount = packet.Data2; int above = (int)((player.Inventory.Count + amount) - 40); if (above > 0) { amount -= (uint)above; } if ((player.Inventory.Count + amount) > 40) { player.SendSystemMessage("INVENTORY_NO_SPACE"); return(true); } switch (shop.ShopType) { case Enums.ShopType.Money: return(HandleBuy(player, itemId, amount, true)); case Enums.ShopType.CPs: return(HandleBuy(player, itemId, amount, false)); default: return(true); } } } return(false); }
public static bool Handle(Models.Entities.Player player, Models.Packets.Items.ItemActionPacket packet) { if (!player.Alive) { return(true); } if (player.Battle != null) { return(true); } player.Equipments.Unequip((Enums.ItemPosition)packet.Data1); return(true); }
/// <summary> /// Pops an item from the inventory. /// </summary> /// <param name="id">The client id of the item to pop.</param> /// <returns>The popped item.</returns> public Models.Items.Item Pop(uint id) { Models.Items.Item removedItem; if (_items.TryRemove(id, out removedItem)) { if (removedItem.DbOwnerItem.Delete(Database.Models.DbOwnerItem.Inventories)) { removedItem.DbOwnerItem.Id = 0; var itempacket = new Models.Packets.Items.ItemActionPacket(); itempacket.Action = Enums.ItemAction.Remove; itempacket.ClientId = id; Player.ClientSocket.Send(itempacket); } } return(removedItem); }
public static bool HandleRepairAll(Models.Entities.Player player, Models.Packets.Items.ItemActionPacket packet) { var repairItems = player.Equipments.GetAll(); uint repairPrice = 0; // Gets the price for the repair ... foreach (var item in repairItems) { if (item.DbOwnerItem.CurrentDura > 0) { repairPrice += item.RepairPrice; } } if (player.Money < repairPrice) { // Necessary, because the client automatically sets the durability to max durability without server-side validation. foreach (var item in repairItems) { item.UpdateClient(player, Enums.ItemUpdateAction.Update); } player.SendSystemMessage("REPAIR_ALL_NOT_ENOUGH_MONEY"); return(true); } player.AddActionLog("RepairAll"); player.Money -= repairPrice; foreach (var repairItem in repairItems) { if (repairItem.DbOwnerItem.CurrentDura >= 0) { repairItem.DbOwnerItem.CurrentDura = repairItem.DbOwnerItem.MaxDura; repairItem.UpdateDatabase(); } repairItem.UpdateClient(player, Enums.ItemUpdateAction.Update); } return(true); }
public static bool HandleRepair(Models.Entities.Player player, Models.Packets.Items.ItemActionPacket packet) { Models.Items.Item repairItem; if (player.Inventory.TryGetItem(packet.ClientId, out repairItem)) { if (repairItem.DbOwnerItem.CurrentDura <= 0) { int meteorAmount; if (!player.Inventory.ContainsById(1088001, out meteorAmount) || meteorAmount < 5) { player.SendSystemMessage("REPAIR_NOT_ENOUGH_METEORS"); return(true); } if (!player.Inventory.RemoveByCount(1088001, 5)) { player.SendSystemMessage("REPAIR_NOT_ENOUGH_METEORS"); return(true); } } else { uint repairPrice = repairItem.RepairPrice; if (player.Money < repairPrice) { player.SendSystemMessage("REPAIR_NOT_ENOUGH_MONEY"); return(true); } player.Money -= repairPrice; } player.AddActionLog("Repair", repairItem.DbOwnerItem.Id); repairItem.DbOwnerItem.CurrentDura = repairItem.DbOwnerItem.MaxDura; repairItem.UpdateDatabase(); repairItem.UpdateClient(player, Enums.ItemUpdateAction.Update); } return(true); }
public static bool HandleQueryMoneySaved(Models.Entities.Player player, Models.Packets.Items.ItemActionPacket packet) { if (player.Guild != null && player.Guild.InHouse(player)) { packet.Data1 = player.Guild.DbGuild.WHMoney; player.ClientSocket.Send(packet); // ???? player.UpdateClient(Enums.UpdateClientType.WarehouseMoney, packet.Data1); } else { packet.Data1 = player.WarehouseMoney; player.ClientSocket.Send(packet); // ???? player.WarehouseMoney = player.WarehouseMoney; } return(true); }
public static bool Handle(Models.Entities.Player player, Models.Packets.Items.ItemActionPacket packet) { if (!player.Alive) { return(true); } if (player.Battle != null) { return(true); } var location = player.Map.GetValidItemCoordinate(player.X, player.Y); if (location.Valid) { Models.Items.Item item = player.Inventory.Find(i => i.ClientId == packet.ClientId); if (item != null && item.Discardable) { player.AddActionLog("ItemDrop", item.DbOwnerItem.Id); if (player.Inventory.Remove(item.ClientId)) { item.Drop(player.MapId, location.X, location.Y, true, player.ClientId); } } else { Database.Dal.Accounts.Ban( player.DbPlayer.Account, Drivers.Messages.INVALID_DROP_ITEM, Database.Models.DbAccount.BanRangeType.Perm); player.ClientSocket.Disconnect(Drivers.Messages.INVALID_DROP_ITEM); return(false); } } return(true); }
public static bool Handle(Models.Entities.Player player, Models.Packets.Items.ItemActionPacket packet) { var arenaBattle = player.Battle as Controllers.Arena.ArenaBattleController; if (player.Battle != null && !(player.Battle is Controllers.Arena.ArenaBattleController)) { return(true); } Models.Items.Item item; if (!player.Inventory.TryGetItem(packet.ClientId, out item)) { Database.Dal.Accounts.Ban( player.DbPlayer.Account, Drivers.Messages.INVALID_USE_ITEM, Database.Models.DbAccount.BanRangeType.Perm); player.ClientSocket.Disconnect(Drivers.Messages.INVALID_USE_ITEM); return(false); } if (item.IsMisc) { player.AddActionLog("ItemUsage", item.DbItem.Id); if (!Collections.ItemScriptCollection.Invoke(player, item.DbItem.Id)) { player.SendFormattedSystemMessage("ITEM_USAGE_NOT_FOUND", true, item.DbItem.Name, item.DbItem.Id); } } else { var position = (Enums.ItemPosition)packet.Data1; if (position != Enums.ItemPosition.Inventory) { player.Equipments.Equip(item, position, true); } } return(true); }
/// <summary> /// Unmasks all masked equipments. /// </summary> public void UnmaskAll() { foreach (var maskedEquip in _maskedEquipments.Values) { Player.ClientSocket.Send(new Models.Packets.Items.ItemActionPacket { Player = this.Player, ClientId = maskedEquip.ClientId, Action = Enums.ItemAction.Unequip, Data1Low = (ushort)maskedEquip.Position }); var itempacket = new Models.Packets.Items.ItemActionPacket(); itempacket.Action = Enums.ItemAction.Remove; itempacket.ClientId = maskedEquip.ClientId; Player.ClientSocket.Send(itempacket); } _maskedEquipments.Clear(); foreach (var equip in _equipments.Values.ToArray()) { Equip(equip, equip.Position, false, true); } }
public static bool Handle(Models.Entities.Player player, Models.Packets.Items.ItemActionPacket packet) { if (!player.Alive) { return(true); } if (player.MapId != 1036 || !Tools.RangeTools.ValidDistance(320, 229, player.X, player.Y)) { return(true); } Models.Items.Item blessItem; if (!player.Inventory.TryGetItem(packet.ClientId, out blessItem)) { player.SendSystemMessage("BLESS_ITEM_NOT_FOUND"); return(true); } if (blessItem.DbOwnerItem.CurrentDura < blessItem.DbOwnerItem.MaxDura) { player.SendSystemMessage("BLESS_ITEM_LOW_DURA"); return(true); } if (blessItem.IsGarment || blessItem.IsArrow || blessItem.IsBottle || blessItem.IsMountArmor || blessItem.IsMisc || blessItem.IsFan || blessItem.IsTower) { player.SendSystemMessage("BLESS_ITEM_INVALID"); return(true); } int requiredTortoiseGems = 5; byte setBless = 1; switch (blessItem.DbOwnerItem.Bless) { case 0: requiredTortoiseGems = 5; break; default: requiredTortoiseGems = blessItem.DbOwnerItem.Bless; setBless = (byte)(requiredTortoiseGems + 2); break; } if (setBless > 7) { player.SendSystemMessage("BLESS_ITEM_MAX_BLESS"); return(true); } int tortoiseAmount; if (!player.Inventory.ContainsById(700073, out tortoiseAmount) || tortoiseAmount < requiredTortoiseGems) { player.SendSystemMessage("BLESS_NOT_ENOUGH_TORTOISE_GEMS"); return(true); } player.AddActionLog("BlessItem", blessItem.DbOwnerItem.Id); if (player.Inventory.RemoveByCount(700073, requiredTortoiseGems)) { blessItem.DbOwnerItem.Bless = setBless; blessItem.DbOwnerItem.Update(); blessItem.UpdateClient(player, Enums.ItemUpdateAction.Update); player.ClientSocket.Send(packet); } return(true); }
public static bool Handle(Models.Entities.Player player, Models.Packets.Items.ItemActionPacket packet) { player.ClientSocket.Send(packet); return(true); }