public void Execute(IRocketPlayer caller, string[] command) { ItemType type = ItemType.Item; if (command.Length >= 1) { type = command[0].ToLower() == "v" ? ItemType.Vehicle : ItemType.Item; } if (command.Length == (type == ItemType.Item ? 0 : 1) || command.Length > 2) { UnturnedChat.Say(caller, DShop.Instance.Translate("buy_help3")); return; } if (!DShop.Instance.Database.IsLoaded) { UnturnedChat.Say(caller, DShop.Instance.Translate("db_load_error")); return; } ushort count = 1; if (command.Length == 2 && type == ItemType.Item) { if (!ushort.TryParse(command[1], out count)) { UnturnedChat.Say(caller, DShop.Instance.Translate("invalid_amount")); return; } if (count > DShop.Instance.Configuration.Instance.MaxBuyCount) { count = DShop.Instance.Configuration.Instance.MaxBuyCount; } if (count == 0) { count = 1; } } UnturnedPlayer player = caller as UnturnedPlayer; if (!DShop.GetItemID(caller, command, type, 0, out ushort itemID)) { return; } if (itemID.AssetFromID(type) == null) { UnturnedChat.Say(caller, DShop.Instance.Translate("invalid_id")); return; } ShopObject sObject = DShop.Instance.Database.GetItem(type, itemID); if (sObject.ItemID != itemID) { Asset asset = itemID.AssetFromID(type); if (type == ItemType.Item) { UnturnedChat.Say(caller, DShop.Instance.Translate("item_not_in_db", (asset != null && ((ItemAsset)asset).itemName != null) ? ((ItemAsset)asset).itemName : string.Empty, itemID)); } else { UnturnedChat.Say(caller, DShop.Instance.Translate("item_not_in_db", (asset != null && ((VehicleAsset)asset).vehicleName != null) ? ((VehicleAsset)asset).vehicleName : string.Empty, itemID)); } return; } decimal balance = Uconomy.Instance.Database.GetBalance(caller.Id); decimal newCost = sObject.BuyCost; decimal totalCost = 0; short actualCount = 0; string moneyName = Uconomy.Instance.Configuration.Instance.MoneyName; if (type == ItemType.Item) { ShopItem sItem = sObject as ShopItem; if (sItem.Buy(balance, player, count, out newCost, out totalCost, out actualCount)) { UnturnedChat.Say(caller, DShop.Instance.Translate("bought_item_complete", actualCount, sObject.ItemName, sObject.ItemID, Math.Round(totalCost, 2), moneyName, Math.Round(balance - totalCost, 2), moneyName)); } else { if (actualCount == 0) { UnturnedChat.Say(caller, DShop.Instance.Translate("not_enough_to_buy", moneyName, sObject.ItemName, sObject.ItemID)); return; } if (actualCount == -2) { UnturnedChat.Say(caller, DShop.Instance.Translate("bought_item_error", sObject.ItemName, sObject.ItemID)); return; } if (actualCount == -3) { UnturnedChat.Say(caller, DShop.Instance.Translate("item_sell_only", sObject.ItemName, sObject.ItemID)); return; } if (actualCount < count) { UnturnedChat.Say(caller, DShop.Instance.Translate("bought_item_partial", actualCount, count, sObject.ItemName, sObject.ItemID, Math.Round(totalCost, 2), moneyName, Math.Round(balance - totalCost, 2), moneyName)); } } } else { ShopVehicle sVehicle = sObject as ShopVehicle; if (sVehicle.Buy(balance, player, out totalCost, out actualCount)) { UnturnedChat.Say(caller, DShop.Instance.Translate("bought_vehicle", sObject.ItemName, sObject.ItemID, Math.Round(totalCost, 2), moneyName, Math.Round(balance - totalCost, 2), moneyName)); } else { if (actualCount == 0) { UnturnedChat.Say(caller, DShop.Instance.Translate("not_enough_to_buy", moneyName, sObject.ItemName, sObject.ItemID)); return; } if (actualCount == -2) { UnturnedChat.Say(caller, DShop.Instance.Translate("bought_vehicle_error", sObject.ItemName, sObject.ItemID)); return; } if (actualCount == -3) { UnturnedChat.Say(caller, DShop.Instance.Translate("vehicle_sell_only", sObject.ItemName, sObject.ItemID)); return; } } } if (totalCost > 0) { Uconomy.Instance.Database.IncreaseBalance(caller.Id, -(Math.Round(totalCost, 2))); } }