DarkEmu_GameServer.Systems.Player_BuyItem C# (CSharp) Метод

Player_BuyItem() публичный Метод

public Player_BuyItem ( byte selected_tab, byte selected_line, short buy_amount, int selected_npc_id ) : void
selected_tab byte
selected_line byte
buy_amount short
selected_npc_id int
Результат void
        void Player_BuyItem(byte selected_tab, byte selected_line, short buy_amount, int selected_npc_id)
        {
            #region Buy item
            try
            {
                //Create new object
                obj npc_details = GetObject(selected_npc_id);
                //Get shop line information
                string s = Data.ObjectBase[npc_details.ID].Tab[selected_tab];
                //Get shop index content
                Global.shop_data shopitem = Global.shop_data.GetShopIndex(s);
                //Get items
                short items = (short)Data.ItemBase[Global.item_database.GetItem(shopitem.Item[selected_line])].ID;
                //Set item price
                int gold = Data.ItemBase[items].Shop_price;
                //Check slot information
                byte slot = GetFreeSlot();
                if (slot <= 12) return;
                //Check the max amount of the item.
                if (buy_amount <= Data.ItemBase[Global.item_database.GetItem(shopitem.Item[selected_line])].Max_Stack)
                {
                    //Get item id
                    int Itemidinfo = Data.ItemBase[Global.item_database.GetItem(shopitem.Item[selected_line])].ID;
                    //Check if what the player is buying is a wearable type and not ETC so max stack is 1
                    if (Data.ItemBase[Itemidinfo].Itemtype == Global.item_database.ItemType.SPEAR ||
                                Data.ItemBase[Itemidinfo].Itemtype == Global.item_database.ItemType.GLAVIE ||
                                Data.ItemBase[Itemidinfo].Itemtype == Global.item_database.ItemType.SWORD ||
                                Data.ItemBase[Itemidinfo].Itemtype == Global.item_database.ItemType.BLADE ||
                                Data.ItemBase[Itemidinfo].Itemtype == Global.item_database.ItemType.EU_AXE ||
                                Data.ItemBase[Itemidinfo].Itemtype == Global.item_database.ItemType.EU_DAGGER ||
                                Data.ItemBase[Itemidinfo].Itemtype == Global.item_database.ItemType.EU_DARKSTAFF ||
                                Data.ItemBase[Itemidinfo].Itemtype == Global.item_database.ItemType.EU_HARP ||
                                Data.ItemBase[Itemidinfo].Itemtype == Global.item_database.ItemType.EU_STAFF ||
                                Data.ItemBase[Itemidinfo].Itemtype == Global.item_database.ItemType.EU_SWORD ||
                                Data.ItemBase[Itemidinfo].Itemtype == Global.item_database.ItemType.EU_TSTAFF ||
                                Data.ItemBase[Itemidinfo].Itemtype == Global.item_database.ItemType.EU_TSWORD ||
                                Data.ItemBase[Itemidinfo].Itemtype == Global.item_database.ItemType.CH_SHIELD ||
                                Data.ItemBase[Itemidinfo].Itemtype == Global.item_database.ItemType.EU_SHIELD ||
                                Data.ItemBase[Itemidinfo].Itemtype == Global.item_database.ItemType.BOW ||
                                Data.ItemBase[Itemidinfo].Itemtype == Global.item_database.ItemType.EU_CROSSBOW ||
                                Data.ItemBase[Itemidinfo].Itemtype == Global.item_database.ItemType.HUNTERSUIT ||
                                Data.ItemBase[Itemidinfo].Itemtype == Global.item_database.ItemType.THIEFSUIT ||
                                Data.ItemBase[Itemidinfo].Itemtype == Global.item_database.ItemType.TRADERSUIT ||
                                Data.ItemBase[Itemidinfo].Type == Global.item_database.ArmorType.ARMOR||
                                Data.ItemBase[Itemidinfo].Type == Global.item_database.ArmorType.GARMENT ||
                                Data.ItemBase[Itemidinfo].Type == Global.item_database.ArmorType.HEAVY ||
                                Data.ItemBase[Itemidinfo].Type == Global.item_database.ArmorType.LIGHT ||
                                Data.ItemBase[Itemidinfo].Type == Global.item_database.ArmorType.PROTECTOR ||
                                Data.ItemBase[Itemidinfo].Type == Global.item_database.ArmorType.ROBE ||
                                Data.ItemBase[Itemidinfo].Itemtype == Global.item_database.ItemType.EARRING ||
                                Data.ItemBase[Itemidinfo].Itemtype == Global.item_database.ItemType.RING ||
                                Data.ItemBase[Itemidinfo].Itemtype == Global.item_database.ItemType.NECKLACE
                        )
                        buy_amount = 1;
                    //Multiply the amount / price.
                    gold *= buy_amount;
                    //Reduct the gold from the player

                    //If the character gold equals or is higher then the price , continue
                    if (Character.Information.Gold >= gold)
                    {
                        Character.Information.Gold -= gold;
                        //Send packet to update gold visual
                        client.Send(Packet.UpdateGold(Character.Information.Gold));
                        //Save player gold
                        SaveGold();
                        //Add new item to user
                        client.Send(Packet.MoveItemBuy(8, selected_tab, selected_line, (byte)buy_amount, slot, buy_amount));
                        //Amount information
                        if (buy_amount > 1)
                            AddItem(items, buy_amount, slot, Character.Information.CharacterID, 0);
                        else if (buy_amount == 1)
                            AddItem(items, 0, slot, Character.Information.CharacterID, 0);
                    }
                    else
                    {
                        client.Send(Packet.IngameMessages(SERVER_ITEM_MOVE, IngameMessages.UIIT_MSG_STRGERR_NOT_ENOUGH_GOLD));
                    }
                }
                else
                {
                    client.Send(Packet.IngameMessages(SERVER_ITEM_MOVE, IngameMessages.UIIT_MSG_STRGERR_POSSESSION_LIMIT_EXCEEDED));
                }
            }
            catch (Exception ex)
            {
                Print.Format("Player_BuyItem({0},{1},{2},{3})::Error..", selected_tab, selected_line, buy_amount, selected_npc_id);
                Console.WriteLine("Buy item error {0}", ex);
                Systems.Debugger.Write(ex);
            }
            SavePlayerInfo();
            #endregion
        }
Systems