Exemple #1
0
        ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        // Drop System Base
        ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        public void SkillDrop(obj o, character c, string type)
        {
            try
            {
                world_item sitem = new world_item();
                switch (type)
                {
                case "mask":
                    sitem.Model     = 10364;
                    sitem.Ids       = new Global.ID(Global.ID.IDS.World);
                    sitem.UniqueID  = sitem.Ids.GetUniqueID;
                    sitem.PlusValue = 0;
                    sitem.x         = this.x + rnd.Next(0, 7);
                    sitem.z         = this.z;
                    sitem.y         = this.y + rnd.Next(0, 6);
                    sitem.xSec      = this.xSec;
                    sitem.ySec      = this.ySec;
                    sitem.Type      = 3;
                    sitem.fromType  = 5;
                    sitem.downType  = true;
                    sitem.fromOwner = this.UniqueID;
                    sitem.Owner     = ((Systems)this.GetTarget()).Character.Account.ID;

                    Systems.aRound(ref sitem.x, ref sitem.y, 0);
                    Systems.WorldItem.Add(sitem);
                    sitem.Send(Packet.ObjectSpawn(sitem), true);
                    break;
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("Skill drop error {0}", ex);
                Systems.Debugger.Write(ex);
            }
        }
Exemple #2
0
 public static double gamedistance(world_item p1, DarkEmu_GameServer.character._pos p2)
 {  // Nukei: for test with range checking on objects, maybe faster than only calculating distance
     if ((p1.xSec >= p2.xSec - 1) && (p1.xSec <= p2.xSec + 1) && (p1.ySec >= p2.ySec - 1) && (p1.ySec <= p2.ySec + 1))
     {
         return(gamedistance((float)p1.x, (float)p1.y, p2.x, p2.y));
     }
     else
     {
         return(99999999999999);
     }
 }
Exemple #3
0
        /////////////////////////////////////////////////////////////////////////////////
        // Movement checks before picking
        /////////////////////////////////////////////////////////////////////////////////
        void Player_PickUp()
        {
            try
            {
                if (Character.State.Sitting)
                {
                    return;
                }
                if (Character.State.Exchanging)
                {
                    return;
                }

                if (Character.Action.Target != 0)
                {
                    world_item item = GetWorldItem(Character.Action.Target);

                    if (item == null)
                    {
                        return;
                    }

                    double distance = Formule.gamedistance(Character.Position.x, Character.Position.y, (float)item.x, (float)item.y);

                    if (distance >= 1)
                    {
                        Character.Position.wX = (float)item.x - Character.Position.x;
                        Character.Position.wY = (float)item.y - Character.Position.y;

                        Send(Packet.Movement(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)));

                        Character.Position.Time         = (distance / (Character.Speed.RunSpeed * 0.0768)) * 1000.0;
                        Character.Position.RecordedTime = Character.Position.Time;

                        StartMovementTimer((int)(Character.Position.Time * 0.1));
                        return;
                    }

                    Player_PickUpItem();
                }
            }
            catch (Exception ex)
            {
                Systems.Debugger.Write(ex);
            }
        }
Exemple #4
0
 /////////////////////////////////////////////////////////////////////////////////
 // Pickup item
 /////////////////////////////////////////////////////////////////////////////////
 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);
     }
 }
Exemple #5
0
 public void Pet_PickupItem(world_item item)
 {
 }
Exemple #6
0
        public void MonsterDrop()
        {
            try
            {
                if (this.GetDie || this.Die)
                {
                    if (this.Type != 16)
                    {
                        ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
                        // Set Target Information
                        ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
                        Systems sys = (Systems)this.GetTarget();
                        ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
                        // If There's no target return
                        ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
                        if (sys == null)
                        {
                            return;
                        }

                        sbyte Leveldiff  = (sbyte)(sys.Character.Information.Level - Data.ObjectBase[ID].Level);
                        int   Amountinfo = 0;

                        if (Math.Abs(Leveldiff) < 10 || Math.Abs(Leveldiff) == 0)
                        {
                            ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
                            // Gold Drop
                            ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
                            #region Gold
                            int Golddrop = rnd.Next(Data.LevelGold[Data.ObjectBase[ID].Level].min, Data.LevelGold[Data.ObjectBase[ID].Level].max);
                            Amountinfo = 0;
                            if (this.Type == 4 && (rnd.Next(0, 200) < 200 * Systems.Rate.Gold))
                            {
                                Amountinfo = Convert.ToByte(rnd.Next(1, 3));
                            }
                            if (this.Type == 3 && (rnd.Next(0, 200) < 200 * Systems.Rate.Gold))
                            {
                                Amountinfo = Convert.ToByte(rnd.Next(4, 6));
                            }
                            if (this.Type == 1 && (rnd.Next(0, 200) < 200 * Systems.Rate.Gold))
                            {
                                Amountinfo = Convert.ToByte(rnd.Next(1, 3));
                            }
                            if (this.Type == 0 && (rnd.Next(0, 200) < 100 * Systems.Rate.Gold))
                            {
                                Amountinfo = 1;
                            }

                            for (byte a = 1; a <= Amountinfo;)
                            {
                                world_item Gold_Drop = new world_item();

                                Gold_Drop.amount = Golddrop * Systems.Rate.Gold;
                                Gold_Drop.Model  = 1;

                                if (Gold_Drop.amount < 1000)
                                {
                                    Gold_Drop.Model = 1;
                                }
                                else if (Gold_Drop.amount > 1000 && Gold_Drop.amount < 10000)
                                {
                                    Gold_Drop.Model = 2;
                                }
                                else if (Gold_Drop.amount > 10000)
                                {
                                    Gold_Drop.Model = 3;
                                }

                                Gold_Drop.Ids      = new Global.ID(Global.ID.IDS.World);
                                Gold_Drop.UniqueID = Gold_Drop.Ids.GetUniqueID;
                                Gold_Drop.x        = this.x + rnd.Next(0, 7);
                                Gold_Drop.z        = this.z;
                                Gold_Drop.y        = this.y + rnd.Next(0, 7);
                                Gold_Drop.xSec     = this.xSec;
                                Gold_Drop.ySec     = this.ySec;
                                Gold_Drop.Type     = 1;
                                Gold_Drop.downType = true;
                                Gold_Drop.fromType = 5;

                                Systems.aRound(ref Gold_Drop.x, ref Gold_Drop.y, 0);
                                Systems.WorldItem.Add(Gold_Drop);
                                Gold_Drop.Send(Packet.ObjectSpawn(Gold_Drop), true);
                                a++;

                                ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
                                // Send Info To Grabpet
                                ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
                                if (((Systems)this.GetTarget()).Character.Grabpet.Active)
                                {
                                    ((Systems)this.GetTarget()).Pet_PickupItem(Gold_Drop);
                                }
                            }
                            #endregion
                            ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
                            // Drop Database
                            ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
                            #region Drop Databases
                            foreach (KeyValuePair <string, DarkEmu_GameServer.Global.drop_database> p in Data.DropBase)
                            {
                                Amountinfo = p.Value.GetAmount(Data.ObjectBase[ID].Type, p.Key);
                                if (Amountinfo > 0)
                                {
                                    for (byte c = 1; c <= Amountinfo; c++)
                                    {
                                        world_item Dropped_Item = new world_item();
                                        Dropped_Item.Model = p.Value.GetDrop(Data.ObjectBase[this.ID].Level, this.ID, p.Key, sys.Character.Information.Race);
                                        if (Dropped_Item.Model == -1)
                                        {
                                            continue;
                                        }
                                        Dropped_Item.Ids       = new Global.ID(Global.ID.IDS.World);
                                        Dropped_Item.UniqueID  = Dropped_Item.Ids.GetUniqueID;
                                        Dropped_Item.PlusValue = Function.Items.RandomPlusValue();
                                        Dropped_Item.MagAtt    = Function.Items.RandomStatValue();
                                        Dropped_Item.x         = this.x + rnd.Next(0, 11);
                                        Dropped_Item.z         = this.z;
                                        Dropped_Item.y         = this.y + rnd.Next(0, 11);
                                        Dropped_Item.xSec      = this.xSec;
                                        Dropped_Item.ySec      = this.ySec;
                                        Dropped_Item.Type      = p.Value.GetSpawnType(p.Key);
                                        Dropped_Item.fromType  = 5;
                                        Dropped_Item.downType  = true;
                                        Dropped_Item.fromOwner = this.UniqueID;
                                        Dropped_Item.amount    = p.Value.GetQuantity(this.Type, p.Key);
                                        Dropped_Item.Owner     = ((Systems)this.GetTarget()).Character.Account.ID;
                                        Systems.WorldItem.Add(Dropped_Item);
                                        Dropped_Item.Send(Packet.ObjectSpawn(Dropped_Item), true);
                                    }
                                }
                            }
                        }
                        #endregion
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("Drop system error: {0}", ex);
            }
        }