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

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

public Player_DropItem ( byte slot ) : void
slot byte
Результат void
        void Player_DropItem(byte slot)
        {
            #region Drop Item
            try
            {
                if (Character.Action.nAttack) return;
                if (Character.Action.sAttack) return;
                if (Character.Stall.Stallactive) return;
                if (Character.State.Exchanging) return;
                if (Character.Alchemy.working) return;
                if (Character.State.Busy) return;
                if (Character.Network.Guild.UsingStorage) return;
                //Else we continue
                else
                {
                    //Get item information from slot.
                    Global.slotItem item = GetItem((uint)Character.Information.CharacterID, slot, 0);
                    //Check if the item is a item mall item before dropping.
                    if (Data.ItemBase[item.ID].Etctype == Global.item_database.EtcType.AVATAR28D ||
                        Data.ItemBase[item.ID].Etctype == Global.item_database.EtcType.CHANGESKIN ||
                        Data.ItemBase[item.ID].Etctype == Global.item_database.EtcType.GLOBALCHAT ||
                        Data.ItemBase[item.ID].Etctype == Global.item_database.EtcType.INVENTORYEXPANSION ||
                        Data.ItemBase[item.ID].Etctype == Global.item_database.EtcType.REVERSESCROLL ||
                        Data.ItemBase[item.ID].Etctype == Global.item_database.EtcType.STALLDECORATION ||
                        Data.ItemBase[item.ID].Etctype == Global.item_database.EtcType.WAREHOUSE ||
                        Data.ItemBase[item.ID].Etctype == Global.item_database.EtcType.AVATAR28D ||
                        Data.ItemBase[item.ID].Type == Global.item_database.ArmorType.AVATAR ||
                        Data.ItemBase[item.ID].Type == Global.item_database.ArmorType.AVATARATTACH ||
                        Data.ItemBase[item.ID].Type == Global.item_database.ArmorType.AVATARHAT ||
                        Data.ItemBase[item.ID].Pettype == Global.item_database.PetType.ATTACKPET ||
                        Data.ItemBase[item.ID].Pettype == Global.item_database.PetType.GRABPET)
                        return;
                    //If the id model is lower then 4 dont allow to drop.
                    //Gold drop requires another drop part.
                    if (item.ID < 4) return;
                    //Anti hack check
                    int owner = MsSQL.GetDataInt("SELECT * FROM char_items WHERE id='" + item.dbID + "'", "owner");
                    //If the player really is the owner of this item we continue to drop it.
                    if (owner == Character.Information.CharacterID)
                    {
                        //Check for item amount.
                        if (item.Amount <= Data.ItemBase[item.ID].Max_Stack)
                        {
                            //Spawn new item globally
                            world_item sitem = new world_item();
                            sitem.Model = item.ID;
                            sitem.Ids = new Global.ID(Global.ID.IDS.World);
                            sitem.UniqueID = sitem.Ids.GetUniqueID;
                            sitem.amount = item.Amount;
                            sitem.PlusValue = item.PlusValue;
                            sitem.x = Character.Position.x;
                            sitem.z = Character.Position.z;
                            sitem.y = Character.Position.y;
                            Systems.aRound(ref sitem.x, ref sitem.y, 1);
                            sitem.xSec = Character.Position.xSec;
                            sitem.ySec = Character.Position.ySec;
                            //Todo sniff structure for ticket / jewelry box item drop
                            if (Data.ItemBase[sitem.Model].Etctype == Global.item_database.EtcType.EVENT)
                                sitem.Type = 4;
                            #region Amount definition
                            else if (Data.ItemBase[sitem.Model].Itemtype == Global.item_database.ItemType.BLADE ||
                                 Data.ItemBase[sitem.Model].Itemtype == Global.item_database.ItemType.CH_SHIELD ||
                                 Data.ItemBase[sitem.Model].Itemtype == Global.item_database.ItemType.EU_SHIELD ||
                                 Data.ItemBase[sitem.Model].Itemtype == Global.item_database.ItemType.BOW ||
                                 Data.ItemBase[sitem.Model].Itemtype == Global.item_database.ItemType.EU_AXE ||
                                 Data.ItemBase[sitem.Model].Itemtype == Global.item_database.ItemType.EU_CROSSBOW ||
                                 Data.ItemBase[sitem.Model].Itemtype == Global.item_database.ItemType.EU_DAGGER ||
                                 Data.ItemBase[sitem.Model].Itemtype == Global.item_database.ItemType.EU_DARKSTAFF ||
                                 Data.ItemBase[sitem.Model].Itemtype == Global.item_database.ItemType.EU_HARP ||
                                 Data.ItemBase[sitem.Model].Itemtype == Global.item_database.ItemType.EU_STAFF ||
                                 Data.ItemBase[sitem.Model].Itemtype == Global.item_database.ItemType.EU_SWORD ||
                                 Data.ItemBase[sitem.Model].Itemtype == Global.item_database.ItemType.EU_TSTAFF ||
                                 Data.ItemBase[sitem.Model].Itemtype == Global.item_database.ItemType.EU_TSWORD ||
                                 Data.ItemBase[sitem.Model].Itemtype == Global.item_database.ItemType.GLAVIE ||
                                 Data.ItemBase[sitem.Model].Itemtype == Global.item_database.ItemType.SPEAR ||
                                 Data.ItemBase[sitem.Model].Itemtype == Global.item_database.ItemType.SWORD ||
                                 Data.ItemBase[sitem.Model].Itemtype == Global.item_database.ItemType.EARRING ||
                                 Data.ItemBase[sitem.Model].Itemtype == Global.item_database.ItemType.RING ||
                                 Data.ItemBase[sitem.Model].Itemtype == Global.item_database.ItemType.NECKLACE ||
                                 Data.ItemBase[sitem.Model].Type == Global.item_database.ArmorType.ARMOR ||
                                 Data.ItemBase[sitem.Model].Type == Global.item_database.ArmorType.GARMENT ||
                                 Data.ItemBase[sitem.Model].Type == Global.item_database.ArmorType.GM ||
                                 Data.ItemBase[sitem.Model].Type == Global.item_database.ArmorType.HEAVY ||
                                 Data.ItemBase[sitem.Model].Type == Global.item_database.ArmorType.LIGHT ||
                                 Data.ItemBase[sitem.Model].Type == Global.item_database.ArmorType.PROTECTOR ||
                                 Data.ItemBase[sitem.Model].Itemtype == Global.item_database.ItemType.AVATAR ||
                                 Data.ItemBase[sitem.Model].Type == Global.item_database.ArmorType.ROBE)
                                sitem.Type = 2;
                            else
                                sitem.Type = 3;
                            #endregion

                            sitem.fromType = 6;
                            sitem.fromOwner = Character.Information.UniqueID;
                            sitem.downType = false;
                            sitem.Owner = 0;
                            sitem.Send(Packet.ObjectSpawn(sitem), true);
                            Systems.WorldItem.Add(sitem);
                            //Send visual packet for removing the item from inventory.
                            client.Send(Packet.DespawnFromInventory(sitem.UniqueID));
                            client.Send(Packet.MoveItem(7, slot, 0, 0, 0, "DELETE_ITEM"));
                            //Update database and remove the item
                            MsSQL.UpdateData("delete from char_items where itemnumber='item" + slot + "' AND owner='" + Character.Information.CharacterID + "'");
                            //Save player information
                            SavePlayerInfo();
                        }
                        else
                            return;
                    }
                    //If the player is not the owner of the item beeing dropped we ban the player.
                    else
                    {
                        Disconnect("ban");
                        Console.WriteLine("Autobanned user: " + Player.AccountName + " Due to hacking");
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("Player_DropItem Error {0}", ex);
                Systems.Debugger.Write(ex);
            }
            #endregion
        }
Systems