/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // 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); } }
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); } }
///////////////////////////////////////////////////////////////////////////////// // 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); } }
///////////////////////////////////////////////////////////////////////////////// // 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); } }
public void Pet_PickupItem(world_item item) { }
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); } }