示例#1
0
        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)));
            }
        }