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

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

public Player_PickUpItem ( ) : void
Результат void
        void Player_PickUpItem()
        {
            try
            {
                //First check if player allready is picking up an item
                if (Character.Action.PickUping)
                {
                    //Get item information that the player has selected.
                    world_item item = GetWorldItem(Character.Action.Target);
                    //Checks
                    if (item == null) { Character.Action.PickUping = false; return; }
                    //If the amount is lower then one
                    if (item.amount < 1) item.amount = 1;
                    //If not gold model
                    if (item.Model > 3)
                    {
                        //Get our free slots
                        byte slot = GetFreeSlot();
                        //If to low
                        if (slot <= 12)
                        {
                            Character.Action.PickUping = false;
                            client.Send(Packet.MoveItemError());
                            return;
                        }
                        //Else continue stop delete timer because its allready beeing removed.
                        item.StopDeleteTimer();
                        //Remove the world item spawn
                        Systems.WorldItem.Remove(item);
                        //Delete the global id
                        Global.ID.Delete(item.UniqueID);
                        //Move towards the item
                        Send(Packet.MovementOnPickup(new DarkEmu_GameServer.Global.vektor(Character.Information.UniqueID,
                                        (float)Formule.packetx((float)item.x, item.xSec),
                                        (float)Character.Position.z,
                                        (float)Formule.packety((float)(float)item.y, item.ySec),
                                        Character.Position.xSec,
                                        Character.Position.ySec)));
                        //Send animation packet pickup
                        Send(Packet.Pickup_Animation(Character.Information.UniqueID, 0));
                        //Check what item type we have (Etc, or armor / weapon).
                        int amount = 0;
                        //Set amount or plusvalue
                        #region Amount definition
                        if (Data.ItemBase[item.Model].Itemtype == Global.item_database.ItemType.BLADE ||
                             Data.ItemBase[item.Model].Itemtype == Global.item_database.ItemType.CH_SHIELD ||
                             Data.ItemBase[item.Model].Itemtype == Global.item_database.ItemType.EU_SHIELD ||
                             Data.ItemBase[item.Model].Itemtype == Global.item_database.ItemType.BOW ||
                             Data.ItemBase[item.Model].Itemtype == Global.item_database.ItemType.EU_AXE ||
                             Data.ItemBase[item.Model].Itemtype == Global.item_database.ItemType.EU_CROSSBOW ||
                             Data.ItemBase[item.Model].Itemtype == Global.item_database.ItemType.EU_DAGGER ||
                             Data.ItemBase[item.Model].Itemtype == Global.item_database.ItemType.EU_DARKSTAFF ||
                             Data.ItemBase[item.Model].Itemtype == Global.item_database.ItemType.EU_HARP ||
                             Data.ItemBase[item.Model].Itemtype == Global.item_database.ItemType.EU_STAFF ||
                             Data.ItemBase[item.Model].Itemtype == Global.item_database.ItemType.EU_SWORD ||
                             Data.ItemBase[item.Model].Itemtype == Global.item_database.ItemType.EU_TSTAFF ||
                             Data.ItemBase[item.Model].Itemtype == Global.item_database.ItemType.EU_TSWORD ||
                             Data.ItemBase[item.Model].Itemtype == Global.item_database.ItemType.GLAVIE ||
                             Data.ItemBase[item.Model].Itemtype == Global.item_database.ItemType.SPEAR ||
                             Data.ItemBase[item.Model].Itemtype == Global.item_database.ItemType.SWORD ||
                             Data.ItemBase[item.Model].Itemtype == Global.item_database.ItemType.EARRING ||
                             Data.ItemBase[item.Model].Itemtype == Global.item_database.ItemType.RING ||
                             Data.ItemBase[item.Model].Itemtype == Global.item_database.ItemType.NECKLACE ||
                             Data.ItemBase[item.Model].Type == Global.item_database.ArmorType.ARMOR ||
                             Data.ItemBase[item.Model].Type == Global.item_database.ArmorType.GARMENT ||
                             Data.ItemBase[item.Model].Type == Global.item_database.ArmorType.GM ||
                             Data.ItemBase[item.Model].Type == Global.item_database.ArmorType.HEAVY ||
                             Data.ItemBase[item.Model].Type == Global.item_database.ArmorType.LIGHT ||
                             Data.ItemBase[item.Model].Type == Global.item_database.ArmorType.PROTECTOR ||
                             Data.ItemBase[item.Model].Itemtype == Global.item_database.ItemType.AVATAR ||
                             Data.ItemBase[item.Model].Type == Global.item_database.ArmorType.ROBE)
                                amount = item.PlusValue;
                        else amount = item.amount;
                        #endregion
                        //Send item creation packet
                        client.Send(Packet.GM_MAKEITEM(0, slot, item.Model, (short)amount, (int)Data.ItemBase[item.Model].Defans.Durability, Data.ItemBase[item.Model].ID, item.UniqueID));
                        //Save to database
                        AddItem(item.Model, (short)amount, slot, Character.Information.CharacterID, item.Model);
                    }
                    //If the item is gold
                    else
                    {
                        //Remove the spawned item
                        Systems.WorldItem.Remove(item);
                        //Remove global id
                        Global.ID.Delete(item.UniqueID);
                        //Movement packet
                        Send(Packet.MovementOnPickup(new DarkEmu_GameServer.Global.vektor(Character.Information.UniqueID,
                                    (float)Formule.packetx((float)item.x, item.xSec),
                                    (float)Character.Position.z,
                                    (float)Formule.packety((float)(float)item.y, item.ySec),
                                    Character.Position.xSec,
                                    Character.Position.ySec)));
                        //Send animation packet
                        Send(Packet.Pickup_Animation(Character.Information.UniqueID, 0));
                        //Add gold to player information
                        Character.Information.Gold += item.amount;
                        //Send visual packet for gold
                        client.Send(Packet.UpdateGold(Character.Information.Gold));
                        //Send message packet gold gained
                        client.Send(Packet.GoldMessagePick(item.amount));
                        //Save player gold
                        SaveGold();
                    }
                    //Despawn item for us
                    item.DeSpawnMe();
                    //Dispose of the item
                    item.Dispose();
                    //Set picking to false
                    Character.Action.PickUping = false;
                    if (Timer.Pickup != null) Timer.Pickup.Dispose();
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("Pickup Error {0}", ex);
                Systems.Debugger.Write(ex);
            }
        }
Systems