/// <summary> /// Changes the commander's weapon to the specified weapon template /// </summary> public void MinionGetWeapon(CommanderPet.eWeaponType weaponType) { ItemTemplate itemTemp = CommanderPet.GetWeaponTemplate(weaponType); if (itemTemp == null) { return; } InventoryItem weapon; weapon = GameInventoryItem.Create(itemTemp); if (weapon != null) { if (Inventory == null) { Inventory = new GameNPCInventory(new GameNpcInventoryTemplate()); } else { Inventory.RemoveItem(Inventory.GetItem((eInventorySlot)weapon.Item_Type)); } Inventory.AddItem((eInventorySlot)weapon.Item_Type, weapon); SwitchWeapon((eActiveWeaponSlot)weapon.Hand); } }
/// <summary> /// Exchange special currency for merchant currency type /// </summary> /// <param name="source"></param> /// <param name="item"></param> /// <returns></returns> public override bool ReceiveItem(GameLiving source, InventoryItem item) { if (source is GamePlayer player && item != null && m_currencyValues != null && m_currencyValues.TryGetValue(item.Id_nb, out int receiveCost) && m_currencyValues.TryGetValue(MoneyKey, out int giveCost)) { int giveCount = item.Count * receiveCost / giveCost; if (giveCount > 0) { // Create and give new item to player InventoryItem newItem = GameInventoryItem.Create(m_itemTemplate); newItem.OwnerID = player.InternalID; newItem.Count = giveCount; if (!player.Inventory.AddTemplate(newItem, newItem.Count, eInventorySlot.FirstBackpack, eInventorySlot.LastBackpack)) { player.CreateItemOnTheGround(newItem); } // Remove received items InventoryItem playerItem = player.Inventory.GetItem((eInventorySlot)item.SlotPosition); playerItem.Count -= giveCount * giveCost; if (playerItem.Count < 1) { player.Inventory.RemoveItem(item); } return(true); } } return(base.ReceiveItem(source, item)); }
/// <summary> /// Creates a Guard Inventory from an Inventory Template /// </summary> /// <param name="template"></param> public GameNPCInventory(GameNpcInventoryTemplate template) { foreach (InventoryItem item in template.AllItems) { AddItem((eInventorySlot)item.SlotPosition, GameInventoryItem.Create <InventoryItem>(item)); } }
/// <summary> /// Load or reload all items into the market cache /// </summary> public static bool Initialize() { log.Info("Building Market Cache ...."); try { m_itemCache = new Dictionary <string, InventoryItem>(); var filterBySlot = DB.Column("SlotPosition").IsGreaterOrEqualTo((int)eInventorySlot.Consignment_First).And(DB.Column("SlotPosition").IsLessOrEqualTo((int)eInventorySlot.Consignment_Last)); var list = DOLDB <InventoryItem> .SelectObjects(filterBySlot.And(DB.Column("OwnerLot").IsGreatherThan(0))); foreach (InventoryItem item in list) { GameInventoryItem playerItem = GameInventoryItem.Create(item); m_itemCache.Add(item.ObjectId, playerItem); } log.Info("Market Cache initialized with " + m_itemCache.Count + " items."); } catch { return(false); } return(true); }
/// <summary> /// Load or reload all items into the market cache /// </summary> public static bool Initialize() { log.Info("Building Market Cache ...."); try { m_itemCache = new Dictionary <string, InventoryItem>(); string query = "(`SlotPosition` >= " + (int)eInventorySlot.Consignment_First + " AND `SlotPosition` <= " + (int)eInventorySlot.Consignment_Last + " AND OwnerLot > 0)"; IList <InventoryItem> list = GameServer.Database.SelectObjects <InventoryItem>(query); foreach (InventoryItem item in list) { GameInventoryItem playerItem = GameInventoryItem.Create(item); m_itemCache.Add(item.ObjectId, playerItem); } log.Info("Market Cache initialized with " + m_itemCache.Count + " items."); } catch { return(false); } return(true); }
public SummonWarcrystalSpellHandler(GameLiving caster, Spell spell, SpellLine line) : base(caster, spell, line) { string ammo = ""; switch (Util.Random(1, 2)) { case 1: ammo = "mystic_ammo_heat"; break; case 2: ammo = "mystic_ammo_cold"; break; } ItemTemplate template = GameServer.Database.FindObjectByKey <ItemTemplate>(ammo); if (template != null) { items.Add(GameInventoryItem.Create <ItemTemplate>(template)); foreach (InventoryItem item in items) { if (item.IsStackable) { item.Count = 1; item.Weight = item.Count * item.Weight; } } } }
public void GenerateROG(GamePlayer player, eObjectType objectType, eSlot slot) { player.RemoveBountyPoints(2000); GameNPC mob = new GameNPC(); mob.Name = "Unique Object"; mob.CurrentRegionID = 1; mob.Level = (byte)(player.Level); if (mob.Level > 50) { mob.Level = 51; } LootList lootlist = new LootList(); ItemUnique item = null; item = new ItemUnique(); item.Object_Type = (int)objectType; item.Item_Type = (int)slot; mob.Level = 60; mob.Name = "TOA Mob"; mob.CurrentRegionID = 30; mob.Z = 9999; lootlist.AddFixed(LootGeneratorUniqueObject.GenerateUniqueItem(mob, player, item), 1); foreach (ItemUnique unique in lootlist.GetLoot()) { unique.Price = 0; GameServer.Database.AddObject(unique); InventoryItem invitem = GameInventoryItem.Create <ItemUnique>(unique); player.Inventory.AddItem(eInventorySlot.FirstEmptyBackpack, invitem); player.Out.SendMessage("Generated: " + unique.Name, eChatType.CT_System, eChatLoc.CL_SystemWindow); } }
public override void Die(GameObject killer) { GamePlayer player = killer as GamePlayer; if (player != null) { if (Util.Chance(40)) { #region rog_stuff GameNPC mob = new GameNPC(); mob.Name = "Unique Object"; mob.CurrentRegionID = 1; mob.Level = (byte)(player.Level); if (mob.Level > 50) { mob.Level = 51; } mob.Level = 60; mob.Name = "TOA Mob"; mob.CurrentRegionID = 30; mob.Z = 9999; ItemUnique unique = LootGeneratorUniqueObject.GenerateUniqueItem(mob, player, null); GameServer.Database.AddObject(unique); InventoryItem item = GameInventoryItem.Create <ItemUnique>(unique); player.Inventory.AddItem(eInventorySlot.FirstEmptyBackpack, item); #endregion } } base.Die(killer); }
/// <summary> /// Create an InventoryItem of given Name and Level /// </summary> /// <param name="ItemName">Name for the object</param> /// <param name="ItemLevel">Level to give to the object</param> /// <param name="Model">Model for the object</param> /// <returns>InventoryItem of given Name and Level</returns> public static InventoryItem GenerateItem(string ItemName, int ItemLevel, int Model) { ItemUnique TaskItems = new ItemUnique(); TaskItems.Name = ItemName; TaskItems.Level = ItemLevel; TaskItems.DPS_AF = 0; TaskItems.SPD_ABS = 0; TaskItems.Hand = 0; //TaskItems.Type_Damage = 0; TaskItems.Object_Type = 0; TaskItems.Item_Type = 1; TaskItems.Weight = 1; TaskItems.Model = Model; TaskItems.Price = 0; TaskItems.Color = 0; TaskItems.IsDropable = true; TaskItems.IsPickable = true; //TaskItems.IsStackable = false; TaskItems.Quality = 80 + ItemLevel; TaskItems.MaxCondition = 90; TaskItems.MaxDurability = 1000; GameServer.Database.AddObject(TaskItems); InventoryItem InvTaskItems = GameInventoryItem.Create(TaskItems); return(InvTaskItems); }
public override void Execute(GameLiving living) { if (CheckPreconditions(living, DEAD | SITTING | MEZZED | STUNNED)) { return; } GamePlayer player = living as GamePlayer; ItemTemplate arrow_summoning_1 = GameServer.Database.FindObjectByKey <ItemTemplate>("arrow_summoning1"); ItemTemplate arrow_summoning_2 = GameServer.Database.FindObjectByKey <ItemTemplate>("arrow_summoning2"); ItemTemplate arrow_summoning_3 = GameServer.Database.FindObjectByKey <ItemTemplate>("arrow_summoning3"); // what are these used for? - tolakram WorldInventoryItem as1 = WorldInventoryItem.CreateFromTemplate(arrow_summoning_1); WorldInventoryItem as2 = WorldInventoryItem.CreateFromTemplate(arrow_summoning_2); WorldInventoryItem as3 = WorldInventoryItem.CreateFromTemplate(arrow_summoning_3); if (!player.Inventory.AddTemplate(GameInventoryItem.Create(arrow_summoning_1), 10, eInventorySlot.FirstBackpack, eInventorySlot.LastBackpack)) { player.Out.SendMessage("You do not have enough inventory space to place this item!", eChatType.CT_System, eChatLoc.CL_SystemWindow); } else if (!player.Inventory.AddTemplate(GameInventoryItem.Create(arrow_summoning_2), 10, eInventorySlot.FirstBackpack, eInventorySlot.LastBackpack)) { player.Out.SendMessage("You do not have enough inventory space to place this item!", eChatType.CT_System, eChatLoc.CL_SystemWindow); } else if (!player.Inventory.AddTemplate(GameInventoryItem.Create(arrow_summoning_3), 10, eInventorySlot.FirstBackpack, eInventorySlot.LastBackpack)) { player.Out.SendMessage("You do not have enough inventory space to place this item!", eChatType.CT_System, eChatLoc.CL_SystemWindow); } GameEventMgr.AddHandler(player, GamePlayerEvent.Quit, new DOLEventHandler(PlayerQuit)); DisableSkill(living); }
/// <summary> /// Creates a copy of the GameNpcInventoryTemplate. /// </summary> /// <returns>Open copy of this template</returns> public GameNpcInventoryTemplate CloneTemplate() { lock (m_items) { var clone = new GameNpcInventoryTemplate(); clone.m_changedSlots = new List <eInventorySlot>(m_changedSlots); clone.m_changesCounter = m_changesCounter; foreach (var de in m_items) { InventoryItem oldItem = de.Value; InventoryItem item = new GameInventoryItem(); item.Template = new ItemTemplate(); item.Template.Id_nb = oldItem.Id_nb; item.Model = oldItem.Model; item.Color = oldItem.Color; item.Effect = oldItem.Effect; item.Extension = oldItem.Extension; item.Emblem = oldItem.Emblem; item.SlotPosition = oldItem.SlotPosition; clone.m_items.Add(de.Key, item); } clone.m_isClosed = false; return(clone); } }
/// <summary> /// Load or reload all items into the market cache /// </summary> public static bool Initialize() { log.Info("Building Market Cache ...."); try { m_itemCache = new Dictionary <string, InventoryItem>(); IList <InventoryItem> list = GameServer.Database.SelectObjects <InventoryItem>("`SlotPosition` >= @SlotPositionFirst AND `SlotPosition` <= @SlotPositionLast AND `OwnerLot` > @OwnerLot", new[] { new QueryParameter("@SlotPositionFirst", (int)eInventorySlot.Consignment_First), new QueryParameter("@SlotPositionLast", (int)eInventorySlot.Consignment_Last), new QueryParameter("@OwnerLot", 0) }); foreach (InventoryItem item in list) { GameInventoryItem playerItem = GameInventoryItem.Create(item); m_itemCache.Add(item.ObjectId, playerItem); } log.Info("Market Cache initialized with " + m_itemCache.Count + " items."); } catch { return(false); } return(true); }
protected static bool GiveItem(GameLiving source, GamePlayer player, ItemTemplate itemTemplate, bool canDrop) { InventoryItem item = null; if (itemTemplate is ItemUnique) { GameServer.Database.AddObject(itemTemplate as ItemUnique); item = GameInventoryItem.Create <ItemUnique>(itemTemplate as ItemUnique); } else { item = GameInventoryItem.Create <ItemTemplate>(itemTemplate); } if (!player.ReceiveItem(source, item)) { if (canDrop) { player.CreateItemOnTheGround(item); player.Out.SendMessage(String.Format("Your backpack is full, {0} is dropped on the ground.", itemTemplate.Name), eChatType.CT_Important, eChatLoc.CL_PopupWindow); } else { player.Out.SendMessage("Your backpack is full!", eChatType.CT_Important, eChatLoc.CL_PopupWindow); return(false); } } return(true); }
public void SetModel(GamePlayer player, int number) { InventoryItem item = player.TempProperties.getProperty <InventoryItem>(TempProperty); player.TempProperties.removeProperty(TempProperty); if (item == null || item.OwnerID != player.InternalID || item.OwnerID == null) { return; } player.Inventory.RemoveItem(item); ItemUnique unique = new ItemUnique(item.Template); unique.Model = number; GameServer.Database.AddObject(unique); InventoryItem newInventoryItem = GameInventoryItem.Create <ItemUnique>(unique); player.Inventory.AddItem(eInventorySlot.FirstEmptyBackpack, newInventoryItem); player.Out.SendInventoryItemsUpdate(new InventoryItem[] { newInventoryItem }); player.RemoveBountyPoints(300); player.SaveIntoDatabase(); }
public void SetProc(GamePlayer player, int proc) { InventoryItem item = player.TempProperties.getProperty <InventoryItem>(TempProperty); player.TempProperties.removeProperty(TempProperty); if (item == null || item.OwnerID != player.InternalID || item.OwnerID == null) { return; } player.Inventory.RemoveItem(item); ItemUnique unique = new ItemUnique(item.Template); unique.ProcSpellID = proc; GameServer.Database.AddObject(unique); player.RemoveBountyPoints(300); InventoryItem newInventoryItem = GameInventoryItem.Create <ItemUnique>(unique); player.Inventory.AddItem(eInventorySlot.FirstEmptyBackpack, newInventoryItem); player.Out.SendInventoryItemsUpdate(new InventoryItem[] { newInventoryItem }); SendReply(player, "My work upon " + item.Name + " is complete.\n Farewell " + player.Name + "."); }
/// <summary> /// Player receives this item (added to players inventory) /// </summary> /// <param name="player"></param> public override void OnReceive(GamePlayer player) { // for guild banners we don't actually add it to inventory but instead register // if it is rescued by a friendly player or taken by the enemy player.Inventory.RemoveItem(this); int trophyModel = 0; eRealm realm = eRealm.None; switch (Model) { case 3223: trophyModel = 3359; realm = eRealm.Albion; break; case 3224: trophyModel = 3361; realm = eRealm.Midgard; break; case 3225: trophyModel = 3360; realm = eRealm.Hibernia; break; } // if picked up by an enemy then turn this into a trophy if (realm != player.Realm) { ItemUnique template = new ItemUnique(Template); template.ClassType = ""; template.Model = trophyModel; template.IsDropable = true; template.IsIndestructible = false; GameServer.Database.AddObject(template); GameInventoryItem trophy = new GameInventoryItem(template); player.Inventory.AddItem(eInventorySlot.FirstEmptyBackpack, trophy); OwnerGuild.SendMessageToGuildMembers(player.Name + " of " + GlobalConstants.RealmToName(player.Realm) + " has captured your guild banner!", eChatType.CT_Guild, eChatLoc.CL_SystemWindow); OwnerGuild.GuildBannerLostTime = DateTime.Now; } else { m_status = eStatus.Recovered; // A friendly player has picked up the banner. if (OwnerGuild != null) { OwnerGuild.SendMessageToGuildMembers(player.Name + " has recovered your guild banner!", eChatType.CT_Guild, eChatLoc.CL_SystemWindow); } if (SummonPlayer != null) { SummonPlayer.GuildBanner = null; } } }
public override void Perform(DOLEvent e, object sender, EventArgs args) { GamePlayer player = BehaviourUtils.GuessGamePlayerFromNotify(e, sender, args); InventoryItem inventoryItem = GameInventoryItem.Create(P as ItemTemplate); player.CreateItemOnTheGround(inventoryItem); player.Out.SendMessage(LanguageMgr.GetTranslation(player.Client.Account.Language, "Behaviour.DropItemAction.DropsFrontYou", inventoryItem.Name), eChatType.CT_Loot, eChatLoc.CL_SystemWindow); }
public bool CanEquipItem(GameInventoryItem item) { return(player.IsGameAdmin || player.Stats.Defense.Level >= item.Item.RequiredDefenseLevel && player.Stats.Attack.Level >= item.Item.RequiredAttackLevel && player.Stats.Ranged.Level >= item.Item.RequiredRangedLevel && player.Stats.Magic.Level >= item.Item.RequiredMagicLevel && player.Stats.Slayer.Level >= item.Item.RequiredSlayerLevel); }
public override void OnPlayerBuy(GamePlayer player, int item_slot, int number) { //Get the template int pagenumber = item_slot / MerchantTradeItems.MAX_ITEM_IN_TRADEWINDOWS; int slotnumber = item_slot % MerchantTradeItems.MAX_ITEM_IN_TRADEWINDOWS; ItemTemplate template = this.TradeItems.GetItem(pagenumber, (eMerchantWindowSlot)slotnumber); if (template == null) { return; } //Calculate the amout of items int amountToBuy = number; if (template.PackSize > 0) { amountToBuy *= template.PackSize; } if (amountToBuy <= 0) { return; } //Calculate the value of items long totalValue = number * template.Price; lock (player.Inventory) { if (player.BountyPoints < totalValue) { player.Out.SendMessage(LanguageMgr.GetTranslation(player.Client.Account.Language, "GameMerchant.OnPlayerBuy.YouNeedBP", totalValue), eChatType.CT_System, eChatLoc.CL_SystemWindow); return; } if (!player.Inventory.AddTemplate(GameInventoryItem.Create(template), amountToBuy, eInventorySlot.FirstBackpack, eInventorySlot.LastBackpack)) { player.Out.SendMessage(LanguageMgr.GetTranslation(player.Client.Account.Language, "GameMerchant.OnPlayerBuy.NotInventorySpace"), eChatType.CT_System, eChatLoc.CL_SystemWindow); return; } InventoryLogging.LogInventoryAction(this, player, eInventoryActionType.Merchant, template, amountToBuy); //Generate the buy message string message; if (number > 1) { message = LanguageMgr.GetTranslation(player.Client.Account.Language, "GameMerchant.OnPlayerBuy.BoughtPiecesBP", totalValue, template.GetName(1, false)); } else { message = LanguageMgr.GetTranslation(player.Client.Account.Language, "GameMerchant.OnPlayerBuy.BoughtBP", template.GetName(1, false), totalValue); } player.BountyPoints -= totalValue; player.Out.SendUpdatePoints(); player.Out.SendMessage(message, eChatType.CT_Merchant, eChatLoc.CL_SystemWindow); } }
/// <summary> /// Adds item to template reusing iventory item instances from other templates. /// </summary> /// <param name="slot">The equipment slot</param> /// <param name="model">The equipment model</param> /// <param name="color">The equipment color</param> /// <param name="effect">The equipment effect</param> /// <param name="extension">The equipment extension</param> /// <returns>true if added</returns> public bool AddNPCEquipment(eInventorySlot slot, int model, int color, int effect, int extension, int emblem = 0) { lock (m_items) { lock (m_usedInventoryItems.SyncRoot) { if (m_isClosed) { return(false); } slot = GetValidInventorySlot(slot); if (slot == eInventorySlot.Invalid) { return(false); } // Changed to support randomization of slots - if we try to load a weapon in the same spot with a different model, // let's make it random 50% chance to either overwrite the item or leave it be if (m_items.ContainsKey(slot)) { // 50% chance to keep the item we have if (Util.Chance(50)) { return(false); } // Let's remove the old item! m_items.Remove(slot); } string itemID = string.Format("{0}:{1},{2},{3}", slot, model, color, effect, extension); InventoryItem item = null; if (!m_usedInventoryItems.ContainsKey(itemID)) { item = new GameInventoryItem(); item.Template = new ItemTemplate(); item.Template.Id_nb = itemID; item.Model = model; item.Color = color; item.Effect = effect; item.Extension = (byte)extension; item.Emblem = emblem; item.SlotPosition = (int)slot; } else { return(false); } m_items.Add(slot, item); } } return(true); }
/// <summary> /// Apply effect on target or do spell action if non duration spell /// </summary> /// <param name="target">target that gets the effect</param> /// <param name="effectiveness">factor from 0..1 (0%-100%)</param> public override void ApplyEffectOnTarget(GameLiving target, double effectiveness) { if (Caster?.ControlledBrain == null) { return; } GameNPC temppet = Caster.ControlledBrain.Body; // Lets let NPC's able to cast minions. Here we make sure that the Caster is a GameNPC // and that m_controlledNpc is initialized (since we aren't thread safe). if (temppet == null) { if (Caster is GameNPC npc) { temppet = npc; // We'll give default NPCs 2 minions! if (temppet.ControlledNpcList == null) { temppet.InitControlledBrainArray(2); } } else { return; } } base.ApplyEffectOnTarget(target, effectiveness); if (m_pet.Brain is BDArcherBrain) { if (!(GameServer.Database.FindObjectByKey <ItemTemplate>("BD_Archer_Distance_bow") is ItemTemplate temp)) { log.Error("Unable to find Bonedancer Archer's Bow"); } else { if (m_pet.Inventory == null) { m_pet.Inventory = new GameNPCInventory(new GameNpcInventoryTemplate()); } else { m_pet.Inventory.RemoveItem(m_pet.Inventory.GetItem(eInventorySlot.DistanceWeapon)); } m_pet.Inventory.AddItem(eInventorySlot.DistanceWeapon, GameInventoryItem.Create(temp)); } m_pet.BroadcastLivingEquipmentUpdate(); }
public void SetBonus(string propertyName, InventoryItem item, GamePlayer player) { Console.WriteLine("1"); eProperty prop = strToProperty(propertyName); if (prop == eProperty.MaxSpeed) { return; } Console.WriteLine("2"); ItemUnique unique = new ItemUnique(item.Template); player.Inventory.RemoveItem(item); player.TempProperties.removeProperty(CRAFT_ITEM); int bonusVal = prop >= eProperty.Resist_First && prop <= eProperty.Resist_Last ? 5 : 20; if (unique.Bonus1Type == 0) { unique.Bonus1Type = (int)prop; unique.Bonus1 = 20; } else if (unique.Bonus2Type == 0) { unique.Bonus2Type = (int)prop; unique.Bonus2 = 20; } else if (unique.Bonus3Type == 0) { unique.Bonus3Type = (int)prop; unique.Bonus3 = 20; } else if (unique.Bonus4Type == 0) { unique.Bonus4Type = (int)prop; unique.Bonus4 = 20; } else if (unique.Bonus5Type == 0) { unique.Bonus5Type = (int)prop; unique.Bonus5 = 20; } Console.WriteLine("3"); GameServer.Database.AddObject(unique); InventoryItem newInventoryItem = GameInventoryItem.Create <ItemUnique>(unique); player.Inventory.AddItem(eInventorySlot.FirstEmptyBackpack, newInventoryItem); SendReply(player, "I have now imbued your " + unique.Name + " with the power of " + propertyName + "!"); player.Out.SendInventoryItemsUpdate(new InventoryItem[] { newInventoryItem }); }
/// <summary> /// Add a gift to the player /// </summary> /// <param name="template">the template ID of the item</param> /// <param name="player">the player to give it to</param> /// <returns>true if succesful</returns> public virtual bool addGift(String template, GamePlayer player) { ItemTemplate temp = GameServer.Database.FindObjectByKey <ItemTemplate>(template); if (temp != null) { if (!player.Inventory.AddTemplate(GameInventoryItem.Create(temp), 1, eInventorySlot.FirstBackpack, eInventorySlot.LastBackpack)) { player.Out.SendMessage(LanguageMgr.GetTranslation(player.Client.Account.Language, "GameTrainer.AddGift.NotEnoughSpace"), eChatType.CT_System, eChatLoc.CL_SystemWindow); return(false); } InventoryLogging.LogInventoryAction(this, player, eInventoryActionType.Other, temp); } return(true); }
/// <summary> /// Move an item from the inventory object to a player's backpack (uses client slots) /// </summary> public static IDictionary <int, InventoryItem> MoveItemFromObject(this IGameInventoryObject thisObject, GamePlayer player, eInventorySlot fromClientSlot, eInventorySlot toClientSlot) { // We will only allow moving to the backpack. if (toClientSlot < eInventorySlot.FirstBackpack || toClientSlot > eInventorySlot.LastBackpack) { return(null); } lock (thisObject.LockObject()) { Dictionary <int, InventoryItem> inventory = thisObject.GetClientInventory(player); if (inventory.ContainsKey((int)fromClientSlot) == false) { ChatUtil.SendErrorMessage(player, "Item not found in slot " + (int)fromClientSlot); return(null); } InventoryItem fromItem = inventory[(int)fromClientSlot]; InventoryItem toItem = player.Inventory.GetItem(toClientSlot); // if there is an item in the players target inventory slot then move it to the object if (toItem != null) { player.Inventory.RemoveTradeItem(toItem); toItem.SlotPosition = fromItem.SlotPosition; toItem.OwnerID = thisObject.GetOwner(player); thisObject.OnAddItem(player, toItem); GameServer.Database.SaveObject(toItem); } thisObject.OnRemoveItem(player, fromItem); // Create the GameInventoryItem from this InventoryItem. This simply wraps the InventoryItem, // which is still updated when this item is moved around InventoryItem objectItem = GameInventoryItem.Create <InventoryItem>(fromItem); player.Inventory.AddTradeItem(toClientSlot, objectItem); var updateItems = new Dictionary <int, InventoryItem>(1); updateItems.Add((int)fromClientSlot, toItem); return(updateItems); } }
/// <summary> /// Loads the GameRelic from Database /// </summary> /// <param name="obj">The DBRelic-object for this relic</param> public override void LoadFromDatabase(DataObject obj) { InternalID = obj.ObjectId; m_dbRelic = obj as DBRelic; CurrentRegionID = (ushort)m_dbRelic.Region; X = m_dbRelic.X; Y = m_dbRelic.Y; Z = m_dbRelic.Z; Heading = (ushort)m_dbRelic.Heading; m_relicType = (eRelicType)m_dbRelic.relicType; Realm = (eRealm)m_dbRelic.Realm; m_originalRealm = (eRealm)m_dbRelic.OriginalRealm; m_lastRealm = (eRealm)m_dbRelic.LastRealm; //get constant values MiniTemp template = GetRelicTemplate(m_originalRealm, m_relicType); m_name = template.Name; m_model = template.Model; template = null; //set still empty fields Emblem = 0; Level = 99; //generate itemtemplate for inventoryitem ItemTemplate m_itemTemp; m_itemTemp = new ItemTemplate(); m_itemTemp.Name = Name; m_itemTemp.Object_Type = (int)eObjectType.Magical; m_itemTemp.Model = Model; m_itemTemp.IsDropable = true; m_itemTemp.IsPickable = false; m_itemTemp.Level = 99; m_itemTemp.Quality = 100; m_itemTemp.Price = 0; m_itemTemp.PackSize = 1; m_itemTemp.AllowAdd = false; m_itemTemp.Weight = 1000; m_itemTemp.Id_nb = "GameRelic"; m_itemTemp.IsTradable = false; m_itemTemp.ClassType = "DOL.GS.GameInventoryRelic"; m_item = GameInventoryItem.Create <ItemTemplate>(m_itemTemp); }
public void OnCommand(GameClient client, string[] args) { try { for (int x = 0; x < 8; x++) { GeneratedUniqueItem item = null; if (args.Length > 1) { if (Convert.ToString(args[1]).ToUpper() == "TOA") { item = new GeneratedUniqueItem(true, client.Player.Realm, 51); item.GenerateItemQuality(GameObject.GetConLevel(client.Player.Level, 60)); } else if (Convert.ToString(args[1]).ToUpper() == "L51") { item = new GeneratedUniqueItem(client.Player.Realm, 51); item.GenerateItemQuality(GameObject.GetConLevel(client.Player.Level, 50)); } else { if (args.Length > 2) { item = new GeneratedUniqueItem(client.Player.Realm, client.Player.Level, (eObjectType)Convert.ToInt32(args[1]), (eInventorySlot)Convert.ToInt32(args[2])); } else { item = new GeneratedUniqueItem(client.Player.Realm, client.Player.Level, (eObjectType)Convert.ToInt32(args[1])); } } } item.AllowAdd = true; GameServer.Database.AddObject(item); InventoryItem invitem = GameInventoryItem.Create <ItemUnique>(item); client.Player.Inventory.AddItem(eInventorySlot.FirstEmptyBackpack, invitem); client.Player.Out.SendMessage("Generated: " + item.Name, eChatType.CT_System, eChatLoc.CL_SystemWindow); } } catch (Exception) { DisplaySyntax(client); } }
public override void Perform(DOLEvent e, object sender, EventArgs args) { GamePlayer player = BehaviourUtils.GuessGamePlayerFromNotify(e, sender, args); ItemTemplate oldItem = P; ItemTemplate newItem = Q; // TODO: what about stacked items??? if (player.Inventory.RemoveTemplate(oldItem.Id_nb, 1, eInventorySlot.FirstBackpack, eInventorySlot.LastBackpack)) { InventoryLogging.LogInventoryAction(player, NPC, eInventoryActionType.Quest, oldItem, 1); InventoryItem inventoryItem = GameInventoryItem.Create(newItem); if (player.Inventory.AddItem(eInventorySlot.FirstEmptyBackpack, inventoryItem)) { InventoryLogging.LogInventoryAction(NPC, player, eInventoryActionType.Quest, newItem, 1); } } }
public EssenceFlareSpellHandler(GameLiving caster, Spell spell, SpellLine line) : base(caster, spell, line) { ItemTemplate template = GameServer.Database.FindObjectByKey <ItemTemplate>("Meschgift"); if (template != null) { items.Add(GameInventoryItem.Create(template)); foreach (InventoryItem item in items) { if (item.IsStackable) { item.Count = 1; item.Weight = item.Count * item.Weight; } } } }
public SummonWoodSpellHandler(GameLiving caster, Spell spell, SpellLine line) : base(caster, spell, line) { ItemTemplate template = GameServer.Database.FindObjectByKey <ItemTemplate>("mysticwood_wooden_boards"); if (template != null) { items.Add(GameInventoryItem.Create <ItemTemplate>(template)); foreach (InventoryItem item in items) { if (item.IsStackable) { item.Count = 1; item.Weight = item.Count * item.Weight; } } } }
public void InventoryFromIT() { InventoryTestCreation(); Console.WriteLine("Creation of Ghost Inventory entry based on ItemTemplate"); InventoryItem ii = GameInventoryItem.Create(itemt); player.Inventory.AddItem(eInventorySlot.FirstBackpack, ii); Assert.IsNotNull(ii, "ii-t #1 : " + ii.Template.Id_nb + " created & added to " + ii.OwnerID); var iicheck = GameServer.Database.FindObjectByKey <InventoryItem>(ii.ObjectId); Assert.IsNotNull(iicheck, "ii-t #2 : saved in db " + ii.Template.Id_nb + " to " + ii.OwnerID); GameServer.Database.DeleteObject(ii); iicheck = GameServer.Database.FindObjectByKey <InventoryItem>(ii.ObjectId); Assert.IsNull(iicheck, "ii-t #3 : deleted from db " + ii.Template.Id_nb + " to " + ii.OwnerID); var itcheck = GameServer.Database.FindObjectByKey <ItemTemplate>(itemt.Id_nb); Assert.IsNotNull(itcheck, "ii-t #4 : not deleted from db " + itemt.Id_nb); }
/// <summary> /// Loads the inventory from the DataBase /// </summary> /// <param name="inventoryID">The inventory ID</param> /// <returns>success</returns> public override bool LoadFromDatabase(string inventoryID) { lock (m_items) { try { m_items.Clear(); // We only want to cache items in the players personal inventory and personal vault. // If we cache ALL items them all vault code must make sure to update cache, which is not ideal // in addition, a player with a housing vault may still have an item in cache that may have been // removed by another player with the appropriate house permission. - Tolakram var items = GameServer.Database.SelectObjects<InventoryItem>("OwnerID = '" + GameServer.Database.Escape(inventoryID) + "' AND (SlotPosition <= " + (int)eInventorySlot.LastVault + " OR (SlotPosition >= 500 AND SlotPosition < 600))"); foreach (InventoryItem item in items) { try { var itemSlot = (eInventorySlot)item.SlotPosition; if (item.CanUseEvery > 0) { item.SetCooldown(); } if (GetValidInventorySlot((eInventorySlot)item.SlotPosition) == eInventorySlot.Invalid) { if (Log.IsErrorEnabled) Log.Error("Tried to load an item in invalid slot, ignored. Item id=" + item.ObjectId); continue; } if (m_items.ContainsKey(itemSlot)) { if (Log.IsErrorEnabled) { Log.ErrorFormat("Error loading {0}'s ({1}) inventory!\nDuplicate item {2} found in slot {3}; Skipping!", m_player.Name, inventoryID, item.Name, itemSlot); } continue; } // Depending on whether or not the item is an artifact we will // create different types of inventory items. That way we can speed // up item type checks and implement item delve information in // a natural way, i.e. through inheritance. // Tolakram - Leaving this functionality as is for now. InventoryArtifact now inherits from // GameInventoryItem and utilizes the new Delve system. No need to set ClassType for all artifacts when // this code works fine as is. if (ArtifactMgr.IsArtifact(item)) { m_items.Add(itemSlot, new InventoryArtifact(item)); } else { GameInventoryItem playerItem = GameInventoryItem.Create<InventoryItem>(item); if (playerItem.CheckValid(m_player)) { m_items.Add(itemSlot, playerItem as InventoryItem); } else { Log.ErrorFormat("Item '{0}', ClassType '{1}' failed valid test for player '{2}'!", item.Name, item.ClassType, m_player.Name); GameInventoryItem invalidItem = new GameInventoryItem(); invalidItem.Name = "Invalid Item"; invalidItem.OwnerID = item.OwnerID; invalidItem.SlotPosition = item.SlotPosition; invalidItem.AllowAdd = false; m_items.Add(itemSlot, invalidItem); } } if (Log.IsWarnEnabled) { // bows don't use damage type - no warning needed if (GlobalConstants.IsWeapon(item.Object_Type) && item.Type_Damage == 0 && item.Object_Type != (int)eObjectType.CompositeBow && item.Object_Type != (int)eObjectType.Crossbow && item.Object_Type != (int)eObjectType.Longbow && item.Object_Type != (int)eObjectType.Fired && item.Object_Type != (int)eObjectType.RecurvedBow) { Log.Warn(m_player.Name + ": weapon with damage type 0 is loaded \"" + item.Name + "\" (" + item.ObjectId + ")"); } } } catch (Exception ex) { Log.Error("Error loading player inventory (" + inventoryID + "), Inventory_ID: " + item.ObjectId + " (" + (item.ITemplate_Id == null ? "" : item.ITemplate_Id) + ", " + (item.UTemplate_Id == null ? "" : item.UTemplate_Id) + "), slot: " + item.SlotPosition, ex); } } // notify handlers that the item was just equipped foreach (eInventorySlot slot in EQUIP_SLOTS) { // skip weapons. only active weapons should fire equip event, done in player.SwitchWeapon if (slot >= eInventorySlot.RightHandWeapon && slot <= eInventorySlot.DistanceWeapon) continue; InventoryItem item; if (m_items.TryGetValue(slot, out item)) { m_player.Notify(PlayerInventoryEvent.ItemEquipped, this, new ItemEquippedArgs(item, slot)); } } return true; } catch (Exception e) { if (Log.IsErrorEnabled) Log.Error("Error loading player inventory (" + inventoryID + "). Load aborted!", e); return false; } } }
// WHRIA public bool AddNPCEquipment_ex(eInventorySlot slot, int model, int color, int effect, int extension, string id_nb, int emblem = 0) { lock (m_items) { lock (m_usedInventoryItems.SyncRoot) { if (m_isClosed) return false; slot = GetValidInventorySlot(slot); if (slot == eInventorySlot.Invalid) return false; //Changed to support randomization of slots - if we try to load a weapon in the same spot with a different model, //let's make it random 50% chance to either overwrite the item or leave it be if (m_items.ContainsKey(slot)) { //50% chance to keep the item we have if (Util.Chance(50)) return false; //Let's remove the old item! m_items.Remove(slot); } string itemID = string.Format("{0}:{1},{2},{3},{4},{5}", slot, model, color, effect, extension, id_nb); InventoryItem item = null; if (!m_usedInventoryItems.ContainsKey(itemID)) { item = new GameInventoryItem(); if (id_nb != "" && id_nb != null) { item.Template = GameServer.Database.FindObjectByKey<ItemTemplate>(id_nb); if (item.Template == null) item.Template = GameServer.Database.FindObjectByKey<ItemUnique>(id_nb); if (item.Template == null) { log.Error("cannot find itemtemplate/npcequipment" + id_nb); return false; } item = GameInventoryItem.Create<ItemTemplate>(item.Template); item.SlotPosition = (int)slot; // item.Id_nb = ""; // item.Template.Id_nb = itemID; // item.ITemplate_Id = ""; // item.UTemplate_Id = ""; } else { item.Template = new ItemTemplate(); item.Template.Id_nb = itemID; item.Model = model; item.Color = color; item.Effect = effect; item.Extension = (byte)extension; item.Emblem = emblem; item.SlotPosition = (int)slot; } } else return false; m_items.Add(slot, item); } } return true; }
public void OnCommand(GameClient client, string[] args) { if (args.Length < 2) { DisplaySyntax(client); return; } try { switch (args[1].ToLower()) { #region Blank case "blank": { ItemTemplate newTemplate = new ItemTemplate(); newTemplate.Name = "(blank item)"; newTemplate.Id_nb = InventoryItem.BLANK_ITEM; GameInventoryItem item = new GameInventoryItem(newTemplate); if (client.Player.Inventory.AddItem(eInventorySlot.FirstEmptyBackpack, item)) { client.Out.SendMessage(LanguageMgr.GetTranslation(client, "GMCommands.Item.Blank.ItemCreated"), eChatType.CT_System, eChatLoc.CL_SystemWindow); InventoryLogging.LogInventoryAction(client.Player, client.Player, eInventoryActionType.Other, item.Template, item.Count); } else { client.Out.SendMessage(LanguageMgr.GetTranslation(client, "GMCommands.Item.Blank.CreationError"), eChatType.CT_System, eChatLoc.CL_SystemWindow); } break; } #endregion Blank #region Scroll case "scroll": { WorldInventoryItem scroll = ArtifactMgr.CreateScroll(args[2], Convert.ToInt16(args[3])); if (scroll == null) { client.Out.SendMessage(LanguageMgr.GetTranslation(client, "GMCommands.Item.Scroll.NotFound", args[3], args[2]), eChatType.CT_SpellResisted, eChatLoc.CL_SystemWindow); return; } if (client.Player.Inventory.AddItem(eInventorySlot.FirstEmptyBackpack, scroll.Item)) { client.Out.SendMessage(LanguageMgr.GetTranslation(client, "GMCommands.Item.Scroll.Created", scroll.Item.Name), eChatType.CT_System, eChatLoc.CL_SystemWindow); InventoryLogging.LogInventoryAction(client.Player, client.Player, eInventoryActionType.Other, scroll.Item.Template, scroll.Item.Count); } break; } #endregion Scroll #region Create case "create": { ItemTemplate template = GameServer.Database.FindObjectByKey<ItemTemplate>(args[2]); if (template == null) { client.Out.SendMessage(LanguageMgr.GetTranslation(client, "GMCommands.Item.Create.NotFound", args[2]), eChatType.CT_System, eChatLoc.CL_SystemWindow); return; } else { int count = 1; if (args.Length >= 4) { try { count = Convert.ToInt32(args[3]); if (count < 1) count = 1; } catch (Exception) { } } InventoryItem item = GameInventoryItem.Create<ItemTemplate>(template); if (item.IsStackable) { item.Count = count; } if (client.Player.Inventory.AddItem(eInventorySlot.FirstEmptyBackpack, item)) { client.Out.SendMessage(LanguageMgr.GetTranslation(client, "GMCommands.Item.Create.Created", item.Level, item.GetName(0, false), count), eChatType.CT_System, eChatLoc.CL_SystemWindow); InventoryLogging.LogInventoryAction(client.Player, client.Player, eInventoryActionType.Other, item.Template, item.Count); } } break; } #endregion Create #region Count case "count": { int slot = (int)eInventorySlot.LastBackpack; if (args.Length >= 4) { slot = Convert.ToInt32(args[3]); } InventoryItem item = client.Player.Inventory.GetItem((eInventorySlot)slot); if (item == null) { client.Out.SendMessage(LanguageMgr.GetTranslation(client, "GMCommands.Item.Count.NoItemInSlot", slot), eChatType.CT_System, eChatLoc.CL_SystemWindow); return; } if (!item.IsStackable) { client.Out.SendMessage(LanguageMgr.GetTranslation(client, "GMCommands.Item.Count.NotStackable", item.GetName(0, true)), eChatType.CT_System, eChatLoc.CL_SystemWindow); return; } if (Convert.ToInt32(args[2]) < 1) { item.Count = 1; } else { item.Count = Convert.ToInt32(args[2]); } client.Out.SendInventoryItemsUpdate(new InventoryItem[] { item }); client.Player.UpdateEncumberance(); break; } #endregion Count #region MaxCount case "maxcount": { int slot = (int)eInventorySlot.LastBackpack; if (args.Length >= 4) { slot = Convert.ToInt32(args[3]); } InventoryItem item = client.Player.Inventory.GetItem((eInventorySlot)slot); if (item == null) { client.Out.SendMessage(LanguageMgr.GetTranslation(client, "GMCommands.Item.Count.NoItemInSlot", slot), eChatType.CT_System, eChatLoc.CL_SystemWindow); return; } item.MaxCount = Convert.ToInt32(args[2]); if (item.MaxCount < 1) item.MaxCount = 1; break; } #endregion MaxCount #region PackSize case "packsize": { int slot = (int)eInventorySlot.LastBackpack; if (args.Length >= 4) { slot = Convert.ToInt32(args[3]); } InventoryItem item = client.Player.Inventory.GetItem((eInventorySlot)slot); if (item == null) { client.Out.SendMessage(LanguageMgr.GetTranslation(client, "GMCommands.Item.Count.NoItemInSlot", slot), eChatType.CT_System, eChatLoc.CL_SystemWindow); return; } item.PackSize = Convert.ToInt32(args[2]); if (item.PackSize < 1) item.PackSize = 1; break; } #endregion PackSize #region Info case "info": { ItemTemplate obj = GameServer.Database.FindObjectByKey<ItemTemplate>(args[2]); if (obj == null) { client.Out.SendMessage(LanguageMgr.GetTranslation(client, "GMCommands.Item.Info.ItemTemplateUnknown", args[2]), eChatType.CT_System, eChatLoc.CL_SystemWindow); return; } GameInventoryItem invItem = GameInventoryItem.Create<ItemTemplate>(obj); var objectInfo = new List<string>(); invItem.WriteTechnicalInfo(objectInfo); client.Out.SendCustomTextWindow(LanguageMgr.GetTranslation(client, "GMCommands.Item.Info.Informations", obj.Id_nb), objectInfo); break; } #endregion Info #region Model case "model": { int slot = (int)eInventorySlot.LastBackpack; if (args.Length >= 4) { try { slot = Convert.ToInt32(args[3]); } catch { slot = (int)eInventorySlot.LastBackpack; } } InventoryItem item = client.Player.Inventory.GetItem((eInventorySlot)slot); if (item == null) { client.Out.SendMessage(LanguageMgr.GetTranslation(client, "GMCommands.Item.Count.NoItemInSlot", slot), eChatType.CT_System, eChatLoc.CL_SystemWindow); return; } item.Model = Convert.ToUInt16(args[2]); client.Out.SendInventoryItemsUpdate(new InventoryItem[] { item }); if (item.SlotPosition < (int)eInventorySlot.FirstBackpack) client.Player.UpdateEquipmentAppearance(); break; } #endregion Model #region Extension case "extension": { int slot = (int)eInventorySlot.LastBackpack; if (args.Length >= 4) { try { slot = Convert.ToInt32(args[3]); } catch { slot = (int)eInventorySlot.LastBackpack; } } InventoryItem item = client.Player.Inventory.GetItem((eInventorySlot)slot); if (item == null) { client.Out.SendMessage(LanguageMgr.GetTranslation(client, "GMCommands.Item.Count.NoItemInSlot", slot), eChatType.CT_System, eChatLoc.CL_SystemWindow); return; } item.Extension = Convert.ToByte(args[2]); if (item.Template is ItemUnique || (item.Template is ItemTemplate && (item.Template as ItemTemplate).AllowUpdate)) { item.Template.Extension = item.Extension; } client.Out.SendInventoryItemsUpdate(new InventoryItem[] { item }); if (item.SlotPosition < (int)eInventorySlot.FirstBackpack) client.Player.UpdateEquipmentAppearance(); break; } #endregion Extension #region Color case "color": { int slot = (int)eInventorySlot.LastBackpack; if (args.Length >= 4) { try { slot = Convert.ToInt32(args[3]); } catch { slot = (int)eInventorySlot.LastBackpack; } } InventoryItem item = client.Player.Inventory.GetItem((eInventorySlot)slot); if (item == null) { client.Out.SendMessage(LanguageMgr.GetTranslation(client, "GMCommands.Item.Count.NoItemInSlot", slot), eChatType.CT_System, eChatLoc.CL_SystemWindow); return; } item.Color = Convert.ToUInt16(args[2]); if (item.Template is ItemUnique || (item.Template is ItemTemplate && (item.Template as ItemTemplate).AllowUpdate)) { item.Template.Color = item.Color; } client.Out.SendInventoryItemsUpdate(new InventoryItem[] { item }); if (item.SlotPosition < (int)eInventorySlot.FirstBackpack) client.Player.UpdateEquipmentAppearance(); break; } #endregion Color #region Effect case "effect": { int slot = (int)eInventorySlot.LastBackpack; if (args.Length >= 4) { try { slot = Convert.ToInt32(args[3]); } catch { slot = (int)eInventorySlot.LastBackpack; } } InventoryItem item = client.Player.Inventory.GetItem((eInventorySlot)slot); if (item == null) { client.Out.SendMessage(LanguageMgr.GetTranslation(client, "GMCommands.Item.Count.NoItemInSlot", slot), eChatType.CT_System, eChatLoc.CL_SystemWindow); return; } item.Effect = Convert.ToUInt16(args[2]); client.Out.SendInventoryItemsUpdate(new InventoryItem[] { item }); if (item.SlotPosition < (int)eInventorySlot.FirstBackpack) client.Player.UpdateEquipmentAppearance(); break; } #endregion Effect #region Type case "type": { int slot = (int)eInventorySlot.LastBackpack; if (args.Length >= 4) { try { slot = Convert.ToInt32(args[3]); } catch { slot = (int)eInventorySlot.LastBackpack; } } InventoryItem item = client.Player.Inventory.GetItem((eInventorySlot)slot); if (item == null) { client.Out.SendMessage(LanguageMgr.GetTranslation(client, "GMCommands.Item.Count.NoItemInSlot", slot), eChatType.CT_System, eChatLoc.CL_SystemWindow); return; } item.Item_Type = Convert.ToInt32(args[2]); client.Out.SendInventoryItemsUpdate(new InventoryItem[] { item }); break; } #endregion Type #region Object case "object": { int slot = (int)eInventorySlot.LastBackpack; if (args.Length >= 4) { try { slot = Convert.ToInt32(args[3]); } catch { slot = (int)eInventorySlot.LastBackpack; } } InventoryItem item = client.Player.Inventory.GetItem((eInventorySlot)slot); if (item == null) { client.Out.SendMessage(LanguageMgr.GetTranslation(client, "GMCommands.Item.Count.NoItemInSlot", slot), eChatType.CT_System, eChatLoc.CL_SystemWindow); return; } item.Object_Type = Convert.ToInt32(args[2]); client.Out.SendInventoryItemsUpdate(new InventoryItem[] { item }); break; } #endregion Object #region Hand case "hand": { int slot = (int)eInventorySlot.LastBackpack; if (args.Length >= 4) { try { slot = Convert.ToInt32(args[3]); } catch { slot = (int)eInventorySlot.LastBackpack; } } InventoryItem item = client.Player.Inventory.GetItem((eInventorySlot)slot); if (item == null) { client.Out.SendMessage(LanguageMgr.GetTranslation(client, "GMCommands.Item.Count.NoItemInSlot", slot), eChatType.CT_System, eChatLoc.CL_SystemWindow); return; } item.Hand = Convert.ToInt32(args[2]); client.Out.SendInventoryItemsUpdate(new InventoryItem[] { item }); break; } #endregion Hand #region DamageType case "damagetype": { int slot = (int)eInventorySlot.LastBackpack; if (args.Length >= 4) { try { slot = Convert.ToInt32(args[3]); } catch { slot = (int)eInventorySlot.LastBackpack; } } InventoryItem item = client.Player.Inventory.GetItem((eInventorySlot)slot); if (item == null) { client.Out.SendMessage(LanguageMgr.GetTranslation(client, "GMCommands.Item.Count.NoItemInSlot", slot), eChatType.CT_System, eChatLoc.CL_SystemWindow); return; } item.Type_Damage = Convert.ToInt32(args[2]); client.Out.SendInventoryItemsUpdate(new InventoryItem[] { item }); break; } #endregion DamageType #region Name case "name": { string name = args[2]; int slot = (int)eInventorySlot.LastBackpack; if (int.TryParse(args[args.Length - 1], out slot)) { name = string.Join(" ", args, 2, args.Length - 3); } else { name = string.Join(" ", args, 2, args.Length - 2); slot = (int)eInventorySlot.LastBackpack; } InventoryItem item = client.Player.Inventory.GetItem((eInventorySlot)slot); if (item == null) { client.Out.SendMessage(LanguageMgr.GetTranslation(client, "GMCommands.Item.Count.NoItemInSlot", slot), eChatType.CT_System, eChatLoc.CL_SystemWindow); return; } item.Name = name; client.Out.SendInventoryItemsUpdate(new InventoryItem[] { item }); break; } #endregion Name #region Description case "description": { string desc = args[2]; int slot = (int)eInventorySlot.LastBackpack; if (int.TryParse(args[args.Length - 1], out slot)) { desc = string.Join(" ", args, 2, args.Length - 3); } else { desc = string.Join(" ", args, 2, args.Length - 2); slot = (int)eInventorySlot.LastBackpack; } InventoryItem item = client.Player.Inventory.GetItem((eInventorySlot)slot); if (item == null) { client.Out.SendMessage(LanguageMgr.GetTranslation(client, "GMCommands.Item.Count.NoItemInSlot", slot), eChatType.CT_System, eChatLoc.CL_SystemWindow); return; } item.Description = desc; client.Out.SendInventoryItemsUpdate(new InventoryItem[] { item }); break; } #endregion Name #region CrafterName case "craftername": { int slot = (int)eInventorySlot.LastBackpack; if (args.Length >= 4) { try { slot = Convert.ToInt32(args[3]); } catch { slot = (int)eInventorySlot.LastBackpack; } } InventoryItem item = client.Player.Inventory.GetItem((eInventorySlot)slot); if (item == null) { client.Out.SendMessage(LanguageMgr.GetTranslation(client, "GMCommands.Item.Count.NoItemInSlot", slot), eChatType.CT_System, eChatLoc.CL_SystemWindow); return; } item.IsCrafted = true; item.Creator = args[2]; client.Out.SendInventoryItemsUpdate(new InventoryItem[] { item }); break; } #endregion CrafterName #region Emblem case "emblem": { int slot = (int)eInventorySlot.LastBackpack; if (args.Length >= 4) { try { slot = Convert.ToInt32(args[3]); } catch { slot = (int)eInventorySlot.LastBackpack; } } InventoryItem item = client.Player.Inventory.GetItem((eInventorySlot)slot); if (item == null) { client.Out.SendMessage(LanguageMgr.GetTranslation(client, "GMCommands.Item.Count.NoItemInSlot", slot), eChatType.CT_System, eChatLoc.CL_SystemWindow); return; } item.Emblem = Convert.ToInt32(args[2]); if (item.Template is ItemUnique || (item.Template is ItemTemplate && (item.Template as ItemTemplate).AllowUpdate)) { item.Template.Emblem = item.Emblem; } client.Out.SendInventoryItemsUpdate(new InventoryItem[] { item }); if (item.SlotPosition < (int)eInventorySlot.FirstBackpack) client.Player.UpdateEquipmentAppearance(); break; } #endregion Emblem #region Level case "level": { int slot = (int)eInventorySlot.LastBackpack; if (args.Length >= 4) { try { slot = Convert.ToInt32(args[3]); } catch { slot = (int)eInventorySlot.LastBackpack; } } InventoryItem item = client.Player.Inventory.GetItem((eInventorySlot)slot); if (item == null) { client.Out.SendMessage(LanguageMgr.GetTranslation(client, "GMCommands.Item.Count.NoItemInSlot", slot), eChatType.CT_System, eChatLoc.CL_SystemWindow); return; } item.Level = Convert.ToUInt16(args[2]); client.Out.SendInventoryItemsUpdate(new InventoryItem[] { item }); break; } #endregion Level #region Price case "price": { int slot = (int)eInventorySlot.LastBackpack; if (args.Length >= 7) { try { slot = Convert.ToInt32(args[6]); } catch { slot = (int)eInventorySlot.LastBackpack; } } InventoryItem item = client.Player.Inventory.GetItem((eInventorySlot)slot); if (item == null) { client.Out.SendMessage(LanguageMgr.GetTranslation(client, "GMCommands.Item.Count.NoItemInSlot", slot), eChatType.CT_System, eChatLoc.CL_SystemWindow); return; } item.Price = Money.GetMoney(0, (int)(Convert.ToInt16(args[2]) % 1000), (int)(Convert.ToInt16(args[3]) % 1000), (int)(Convert.ToByte(args[4]) % 100), (int)(Convert.ToByte(args[5]) % 100)); client.Out.SendInventoryItemsUpdate(new InventoryItem[] { item }); break; } #endregion Price #region Condition case "condition": { int slot = (int)eInventorySlot.LastBackpack; if (args.Length >= 5) { try { slot = Convert.ToInt32(args[4]); } catch { slot = (int)eInventorySlot.LastBackpack; } } InventoryItem item = client.Player.Inventory.GetItem((eInventorySlot)slot); if (item == null) { client.Out.SendMessage(LanguageMgr.GetTranslation(client, "GMCommands.Item.Count.NoItemInSlot", slot), eChatType.CT_System, eChatLoc.CL_SystemWindow); return; } int con = Convert.ToInt32(args[2]); int maxcon = Convert.ToInt32(args[3]); item.Condition = con; item.MaxCondition = maxcon; if (item.Template is ItemUnique || (item.Template is ItemTemplate && (item.Template as ItemTemplate).AllowUpdate)) { item.Template.Condition = item.Condition; } client.Out.SendInventoryItemsUpdate(new InventoryItem[] { item }); break; } #endregion Condition #region Durability case "durability": { int slot = (int)eInventorySlot.LastBackpack; if (args.Length >= 5) { try { slot = Convert.ToInt32(args[4]); } catch { slot = (int)eInventorySlot.LastBackpack; } } InventoryItem item = client.Player.Inventory.GetItem((eInventorySlot)slot); if (item == null) { client.Out.SendMessage(LanguageMgr.GetTranslation(client, "GMCommands.Item.Count.NoItemInSlot", slot), eChatType.CT_System, eChatLoc.CL_SystemWindow); return; } int Dur = Convert.ToInt32(args[2]); int MaxDur = Convert.ToInt32(args[3]); item.Durability = Dur; if (item.Template is ItemUnique || (item.Template is ItemTemplate && (item.Template as ItemTemplate).AllowUpdate)) { item.Template.Durability = item.Durability; } item.MaxDurability = MaxDur; client.Out.SendInventoryItemsUpdate(new InventoryItem[] { item }); break; } #endregion Durability #region Quality case "quality": { int slot = (int)eInventorySlot.LastBackpack; if (args.Length >= 4) { try { slot = Convert.ToInt32(args[3]); } catch { slot = (int)eInventorySlot.LastBackpack; } } InventoryItem item = client.Player.Inventory.GetItem((eInventorySlot)slot); if (item == null) { client.Out.SendMessage(LanguageMgr.GetTranslation(client, "GMCommands.Item.Count.NoItemInSlot", slot), eChatType.CT_System, eChatLoc.CL_SystemWindow); return; } int Qua = Convert.ToInt32(args[2]); item.Quality = Qua; client.Out.SendInventoryItemsUpdate(new InventoryItem[] { item }); break; } #endregion Quality #region Bonus case "bonus": { int slot = (int)eInventorySlot.LastBackpack; if (args.Length >= 4) { try { slot = Convert.ToInt32(args[3]); } catch { slot = (int)eInventorySlot.LastBackpack; } } InventoryItem item = client.Player.Inventory.GetItem((eInventorySlot)slot); if (item == null) { client.Out.SendMessage(LanguageMgr.GetTranslation(client, "GMCommands.Item.Count.NoItemInSlot", slot), eChatType.CT_System, eChatLoc.CL_SystemWindow); return; } int Bonus = Convert.ToInt32(args[2]); item.Bonus = Bonus; client.Out.SendInventoryItemsUpdate(new InventoryItem[] { item }); break; } #endregion Bonus #region mBonus case "mbonus": { int slot = (int)eInventorySlot.LastBackpack; int num = 0; int bonusType = 0; int bonusValue = 0; if (args.Length >= 6) { try { slot = Convert.ToInt32(args[5]); } catch { slot = (int)eInventorySlot.LastBackpack; } } InventoryItem item = client.Player.Inventory.GetItem((eInventorySlot)slot); if (item == null) { client.Out.SendMessage(LanguageMgr.GetTranslation(client, "GMCommands.Item.Count.NoItemInSlot", slot), eChatType.CT_System, eChatLoc.CL_SystemWindow); return; } try { num = Convert.ToInt32(args[2]); } catch { client.Out.SendMessage(LanguageMgr.GetTranslation(client, "GMCommands.Item.mBonus.NonSetBonusNumber"), eChatType.CT_System, eChatLoc.CL_SystemWindow); } try { bonusType = Convert.ToInt32(args[3]); if (bonusType < 0 || bonusType >= (int)eProperty.MaxProperty) { client.Out.SendMessage(LanguageMgr.GetTranslation(client, "GMCommands.Item.mBonus.TypeShouldBeInRange", (int)(eProperty.MaxProperty - 1)), eChatType.CT_System, eChatLoc.CL_SystemWindow); break; } } catch { client.Out.SendMessage(LanguageMgr.GetTranslation(client, "GMCommands.Item.mBonus.NonSetBonusType"), eChatType.CT_System, eChatLoc.CL_SystemWindow); } try { bonusValue = Convert.ToInt32(args[4]); switch (num) { case 0: { item.ExtraBonus = bonusValue; item.ExtraBonusType = bonusType; break; } case 1: { item.Bonus1 = bonusValue; item.Bonus1Type = bonusType; break; } case 2: { item.Bonus2 = bonusValue; item.Bonus2Type = bonusType; break; } case 3: { item.Bonus3 = bonusValue; item.Bonus3Type = bonusType; break; } case 4: { item.Bonus4 = bonusValue; item.Bonus4Type = bonusType; break; } case 5: { item.Bonus5 = bonusValue; item.Bonus5Type = bonusType; break; } case 6: { item.Bonus6 = bonusValue; item.Bonus6Type = bonusType; break; } case 7: { item.Bonus7 = bonusValue; item.Bonus7Type = bonusType; break; } case 8: { item.Bonus8 = bonusValue; item.Bonus8Type = bonusType; break; } case 9: { item.Bonus9 = bonusValue; item.Bonus9Type = bonusType; break; } case 10: { item.Bonus10 = bonusValue; item.Bonus10Type = bonusType; break; } default: client.Out.SendMessage(LanguageMgr.GetTranslation(client, "GMCommands.Item.mBonus.UnknownBonusNumber", num), eChatType.CT_System, eChatLoc.CL_SystemWindow); return; } if (item.SlotPosition < (int)eInventorySlot.FirstBackpack) { client.Out.SendCharStatsUpdate(); client.Out.SendCharResistsUpdate(); } } catch { client.Out.SendMessage(LanguageMgr.GetTranslation(client, "GMCommands.Item.mBonus.NotSetBonusValue"), eChatType.CT_System, eChatLoc.CL_SystemWindow); } break; } #endregion mBonus #region Weight case "weight": { int slot = (int)eInventorySlot.LastBackpack; if (args.Length >= 4) { try { slot = Convert.ToInt32(args[3]); } catch { slot = (int)eInventorySlot.LastBackpack; } } InventoryItem item = client.Player.Inventory.GetItem((eInventorySlot)slot); if (item == null) { client.Out.SendMessage(LanguageMgr.GetTranslation(client, "GMCommands.Item.Count.NoItemInSlot", slot), eChatType.CT_System, eChatLoc.CL_SystemWindow); return; } item.Weight = Convert.ToInt32(args[2]); client.Out.SendInventoryItemsUpdate(new InventoryItem[] { item }); break; } #endregion Weight #region DPS_AF - DPS - AF case "dps_af": case "dps": case "af": { int slot = (int)eInventorySlot.LastBackpack; if (args.Length >= 4) { try { slot = Convert.ToInt32(args[3]); } catch { slot = (int)eInventorySlot.LastBackpack; } } InventoryItem item = client.Player.Inventory.GetItem((eInventorySlot)slot); if (item == null) { client.Out.SendMessage(LanguageMgr.GetTranslation(client, "GMCommands.Item.Count.NoItemInSlot", slot), eChatType.CT_System, eChatLoc.CL_SystemWindow); return; } item.DPS_AF = Convert.ToByte(args[2]); client.Out.SendInventoryItemsUpdate(new InventoryItem[] { item }); break; } #endregion DPS_AF - DPS - AF #region SPD_ABS - SPD - ABS case "spd_abs": case "spd": case "abs": { int slot = (int)eInventorySlot.LastBackpack; if (args.Length >= 4) { try { slot = Convert.ToInt32(args[3]); } catch { slot = (int)eInventorySlot.LastBackpack; } } InventoryItem item = client.Player.Inventory.GetItem((eInventorySlot)slot); if (item == null) { client.Out.SendMessage(LanguageMgr.GetTranslation(client, "GMCommands.Item.Count.NoItemInSlot", slot), eChatType.CT_System, eChatLoc.CL_SystemWindow); return; } item.SPD_ABS = Convert.ToByte(args[2]); client.Out.SendInventoryItemsUpdate(new InventoryItem[] { item }); break; } #endregion SPD_ABS - SPD - ABS #region IsDropable case "isdropable": { int slot = (int)eInventorySlot.LastBackpack; if (args.Length >= 4) { try { slot = Convert.ToInt32(args[3]); } catch { slot = (int)eInventorySlot.LastBackpack; } } InventoryItem item = client.Player.Inventory.GetItem((eInventorySlot)slot); if (item == null) { client.Out.SendMessage(LanguageMgr.GetTranslation(client, "GMCommands.Item.Count.NoItemInSlot", slot), eChatType.CT_System, eChatLoc.CL_SystemWindow); return; } item.IsDropable = Convert.ToBoolean(args[2]); break; } #endregion IsDropable #region IsPickable case "ispickable": { int slot = (int)eInventorySlot.LastBackpack; if (args.Length >= 4) { try { slot = Convert.ToInt32(args[3]); } catch { slot = (int)eInventorySlot.LastBackpack; } } InventoryItem item = client.Player.Inventory.GetItem((eInventorySlot)slot); if (item == null) { client.Out.SendMessage(LanguageMgr.GetTranslation(client, "GMCommands.Item.Count.NoItemInSlot", slot), eChatType.CT_System, eChatLoc.CL_SystemWindow); return; } item.IsPickable = Convert.ToBoolean(args[2]); break; } #endregion IsPickable #region IsNotLosingDur case "isnotlosingdur": { int slot = (int)eInventorySlot.LastBackpack; if (args.Length >= 4) { try { slot = Convert.ToInt32(args[3]); } catch { slot = (int)eInventorySlot.LastBackpack; } } InventoryItem item = client.Player.Inventory.GetItem((eInventorySlot)slot); if (item == null) { client.Out.SendMessage(LanguageMgr.GetTranslation(client, "GMCommands.Item.Count.NoItemInSlot", slot), eChatType.CT_System, eChatLoc.CL_SystemWindow); return; } item.IsNotLosingDur = Convert.ToBoolean(args[2]); break; } #endregion IsNotLosingDur #region IsIndestructible case "isindestructible": { int slot = (int)eInventorySlot.LastBackpack; if (args.Length >= 4) { try { slot = Convert.ToInt32(args[3]); } catch { slot = (int)eInventorySlot.LastBackpack; } } InventoryItem item = client.Player.Inventory.GetItem((eInventorySlot)slot); if (item == null) { client.Out.SendMessage(LanguageMgr.GetTranslation(client, "GMCommands.Item.Count.NoItemInSlot", slot), eChatType.CT_System, eChatLoc.CL_SystemWindow); return; } item.IsIndestructible = Convert.ToBoolean(args[2]); break; } #endregion IsIndestructible #region IsTradable case "istradable": { int slot = (int)eInventorySlot.LastBackpack; if (args.Length >= 4) { try { slot = Convert.ToInt32(args[3]); } catch { slot = (int)eInventorySlot.LastBackpack; } } InventoryItem item = client.Player.Inventory.GetItem((eInventorySlot)slot); if (item == null) { client.Out.SendMessage(LanguageMgr.GetTranslation(client, "GMCommands.Item.Count.NoItemInSlot", slot), eChatType.CT_System, eChatLoc.CL_SystemWindow); return; } item.IsTradable = Convert.ToBoolean(args[2]); break; } #endregion IsTradable #region CanDropAsLoot case "candropasloot": { int slot = (int)eInventorySlot.LastBackpack; if (args.Length >= 4) { try { slot = Convert.ToInt32(args[3]); } catch { slot = (int)eInventorySlot.LastBackpack; } } InventoryItem item = client.Player.Inventory.GetItem((eInventorySlot)slot); if (item == null) { client.Out.SendMessage(LanguageMgr.GetTranslation(client, "GMCommands.Item.Count.NoItemInSlot", slot), eChatType.CT_System, eChatLoc.CL_SystemWindow); return; } item.CanDropAsLoot = Convert.ToBoolean(args[2]); break; } #endregion CanDropAsLoot #region Spell case "spell": { int slot = (int)eInventorySlot.LastBackpack; if (args.Length >= 6) { try { slot = Convert.ToInt32(args[5]); } catch { slot = (int)eInventorySlot.LastBackpack; } } InventoryItem item = client.Player.Inventory.GetItem((eInventorySlot)slot); if (item == null) { client.Out.SendMessage(LanguageMgr.GetTranslation(client, "GMCommands.Item.Count.NoItemInSlot", slot), eChatType.CT_System, eChatLoc.CL_SystemWindow); return; } int Charges = Convert.ToInt32(args[2]); int MaxCharges = Convert.ToInt32(args[3]); int SpellID = Convert.ToInt32(args[4]); item.Charges = Charges; item.MaxCharges = MaxCharges; if (item.Template is ItemUnique || (item.Template is ItemTemplate && (item.Template as ItemTemplate).AllowUpdate)) { item.Template.Charges = item.Charges; item.Template.MaxCharges = item.MaxCharges; } item.SpellID = SpellID; client.Out.SendInventoryItemsUpdate(new InventoryItem[] { item }); break; } #endregion Spell #region Spell1 case "spell1": { int slot = (int)eInventorySlot.LastBackpack; if (args.Length >= 6) { try { slot = Convert.ToInt32(args[5]); } catch { slot = (int)eInventorySlot.LastBackpack; } } InventoryItem item = client.Player.Inventory.GetItem((eInventorySlot)slot); if (item == null) { client.Out.SendMessage(LanguageMgr.GetTranslation(client, "GMCommands.Item.Count.NoItemInSlot", slot), eChatType.CT_System, eChatLoc.CL_SystemWindow); return; } int Charges = Convert.ToInt32(args[2]); int MaxCharges = Convert.ToInt32(args[3]); int SpellID1 = Convert.ToInt32(args[4]); item.Charges1 = Charges; item.MaxCharges1 = MaxCharges; if (item.Template is ItemUnique || (item.Template is ItemTemplate && (item.Template as ItemTemplate).AllowUpdate)) { item.Template.Charges1 = item.Charges1; item.Template.MaxCharges1 = item.MaxCharges1; } item.SpellID1 = SpellID1; client.Out.SendInventoryItemsUpdate(new InventoryItem[] { item }); break; } #endregion Spell1 #region Proc case "proc": { int slot = (int)eInventorySlot.LastBackpack; if (args.Length >= 4) { try { slot = Convert.ToInt32(args[3]); } catch { slot = (int)eInventorySlot.LastBackpack; } } InventoryItem item = client.Player.Inventory.GetItem((eInventorySlot)slot); if (item == null) { client.Out.SendMessage(LanguageMgr.GetTranslation(client, "GMCommands.Item.Count.NoItemInSlot", slot), eChatType.CT_System, eChatLoc.CL_SystemWindow); return; } item.ProcSpellID = Convert.ToInt32(args[2]); client.Out.SendInventoryItemsUpdate(new InventoryItem[] { item }); break; } #endregion Proc #region Proc1 case "proc1": { int slot = (int)eInventorySlot.LastBackpack; if (args.Length >= 4) { try { slot = Convert.ToInt32(args[3]); } catch { slot = (int)eInventorySlot.LastBackpack; } } InventoryItem item = client.Player.Inventory.GetItem((eInventorySlot)slot); if (item == null) { client.Out.SendMessage(LanguageMgr.GetTranslation(client, "GMCommands.Item.Count.NoItemInSlot", slot), eChatType.CT_System, eChatLoc.CL_SystemWindow); return; } item.ProcSpellID1 = Convert.ToInt32(args[2]); client.Out.SendInventoryItemsUpdate(new InventoryItem[] { item }); break; } #endregion Proc1 #region ProcChance case "procchance": { int slot = (int)eInventorySlot.LastBackpack; if (args.Length >= 4) { try { slot = Convert.ToInt32(args[3]); } catch { slot = (int)eInventorySlot.LastBackpack; } } InventoryItem item = client.Player.Inventory.GetItem((eInventorySlot)slot); if (item == null) { client.Out.SendMessage(LanguageMgr.GetTranslation(client, "GMCommands.Item.Count.NoItemInSlot", slot), eChatType.CT_System, eChatLoc.CL_SystemWindow); return; } item.ProcChance = Convert.ToByte(args[2]); client.Out.SendInventoryItemsUpdate(new InventoryItem[] { item }); break; } #endregion ProcChance #region Poison case "poison": { int slot = (int)eInventorySlot.LastBackpack; if (args.Length >= 6) { try { slot = Convert.ToInt32(args[5]); } catch { slot = (int)eInventorySlot.LastBackpack; } } InventoryItem item = client.Player.Inventory.GetItem((eInventorySlot)slot); if (item == null) { client.Out.SendMessage(LanguageMgr.GetTranslation(client, "GMCommands.Item.Count.NoItemInSlot", slot), eChatType.CT_System, eChatLoc.CL_SystemWindow); return; } int Charges = Convert.ToInt32(args[2]); int MaxCharges = Convert.ToInt32(args[3]); int SpellID = Convert.ToInt32(args[4]); item.PoisonCharges = Charges; item.PoisonMaxCharges = MaxCharges; if (item.Template is ItemUnique || (item.Template is ItemTemplate && (item.Template as ItemTemplate).AllowUpdate)) { item.Template.PoisonCharges = item.PoisonCharges; item.Template.PoisonMaxCharges = item.PoisonMaxCharges; } item.PoisonSpellID = SpellID; client.Out.SendInventoryItemsUpdate(new InventoryItem[] { item }); break; } #endregion Poison #region Realm case "realm": { int slot = (int)eInventorySlot.LastBackpack; if (args.Length >= 4) { try { slot = Convert.ToInt32(args[3]); } catch { slot = (int)eInventorySlot.LastBackpack; } } InventoryItem item = client.Player.Inventory.GetItem((eInventorySlot)slot); if (item == null) { client.Out.SendMessage(LanguageMgr.GetTranslation(client, "GMCommands.Item.Count.NoItemInSlot", slot), eChatType.CT_System, eChatLoc.CL_SystemWindow); return; } item.Realm = int.Parse(args[2]); break; } #endregion Realm #region Level Required case "levelrequired": { int slot = (int)eInventorySlot.LastBackpack; if (args.Length >= 4) { try { slot = Convert.ToInt32(args[3]); } catch { slot = (int)eInventorySlot.LastBackpack; } } InventoryItem item = client.Player.Inventory.GetItem((eInventorySlot)slot); if (item == null) { client.Out.SendMessage(LanguageMgr.GetTranslation(client, "GMCommands.Item.Count.NoItemInSlot", slot), eChatType.CT_System, eChatLoc.CL_SystemWindow); return; } int setting = Convert.ToInt32(args[2]); item.LevelRequirement = setting; client.Out.SendInventoryItemsUpdate(new InventoryItem[] { item }); break; } #endregion Level Required #region Bonus Level case "bonuslevel": { int slot = (int)eInventorySlot.LastBackpack; if (args.Length >= 4) { try { slot = Convert.ToInt32(args[3]); } catch { slot = (int)eInventorySlot.LastBackpack; } } InventoryItem item = client.Player.Inventory.GetItem((eInventorySlot)slot); if (item == null) { client.Out.SendMessage(LanguageMgr.GetTranslation(client, "GMCommands.Item.Count.NoItemInSlot", slot), eChatType.CT_System, eChatLoc.CL_SystemWindow); return; } int setting = Convert.ToInt32(args[2]); item.BonusLevel = setting; client.Out.SendInventoryItemsUpdate(new InventoryItem[] { item }); break; } #endregion Bonus Level #region ClassType case "classtype": { string classType = args[2]; int slot = (int)eInventorySlot.LastBackpack; if (int.TryParse(args[args.Length - 1], out slot) == false) { slot = (int)eInventorySlot.LastBackpack; } InventoryItem item = client.Player.Inventory.GetItem((eInventorySlot)slot); if (item == null) { client.Out.SendMessage(LanguageMgr.GetTranslation(client, "GMCommands.Item.Count.NoItemInSlot", slot), eChatType.CT_System, eChatLoc.CL_SystemWindow); return; } item.ClassType = classType; client.Out.SendInventoryItemsUpdate(new InventoryItem[] { item }); break; } #endregion ClassType #region PackageID case "packageid": { string packageID = args[2]; int slot = (int)eInventorySlot.LastBackpack; if (int.TryParse(args[args.Length - 1], out slot) == false) { slot = (int)eInventorySlot.LastBackpack; } InventoryItem item = client.Player.Inventory.GetItem((eInventorySlot)slot); if (item == null) { client.Out.SendMessage(LanguageMgr.GetTranslation(client, "GMCommands.Item.Count.NoItemInSlot", slot), eChatType.CT_System, eChatLoc.CL_SystemWindow); return; } item.PackageID = packageID; client.Out.SendInventoryItemsUpdate(new InventoryItem[] { item }); break; } #endregion PackageID #region Flags case "flags": { int flags = Convert.ToInt32(args[2]); int slot = (int)eInventorySlot.LastBackpack; if (args.Length == 4) { slot = Convert.ToInt32(args[3]); } InventoryItem item = client.Player.Inventory.GetItem((eInventorySlot)slot); if (item == null) { client.Out.SendMessage(LanguageMgr.GetTranslation(client, "GMCommands.Item.Count.NoItemInSlot", slot), eChatType.CT_System, eChatLoc.CL_SystemWindow); return; } item.Flags = flags; client.Out.SendInventoryItemsUpdate(new InventoryItem[] { item }); break; } #endregion Flags #region Salvage case "salvageid": { int salvageID = Convert.ToInt32(args[2]); int slot = (int)eInventorySlot.LastBackpack; if (args.Length == 4) { slot = Convert.ToInt32(args[3]); } InventoryItem item = client.Player.Inventory.GetItem((eInventorySlot)slot); if (item == null) { client.Out.SendMessage(LanguageMgr.GetTranslation(client, "GMCommands.Item.Count.NoItemInSlot", slot), eChatType.CT_System, eChatLoc.CL_SystemWindow); return; } item.SalvageYieldID = salvageID; client.Out.SendInventoryItemsUpdate(new InventoryItem[] { item }); break; } case "salvageinfo": { int slot = (int)eInventorySlot.LastBackpack; if (args.Length == 3) { slot = Convert.ToInt32(args[2]); } InventoryItem item = client.Player.Inventory.GetItem((eInventorySlot)slot); if (item == null) { client.Out.SendMessage(LanguageMgr.GetTranslation(client, "GMCommands.Item.Count.NoItemInSlot", slot), eChatType.CT_System, eChatLoc.CL_SystemWindow); return; } List<string> list = new List<string>(); SalvageYield salvageYield = null; bool calculated = true; string sql = ""; int salvageLevel = CraftingMgr.GetItemCraftLevel(item) / 100; if (salvageLevel > 9) salvageLevel = 9; // max 9 if (item.SalvageYieldID == 0) { sql = "ObjectType=" + item.Object_Type + " AND SalvageLevel=" + salvageLevel; } else { sql = "ID=" + item.SalvageYieldID; calculated = false; } if (ServerProperties.Properties.USE_SALVAGE_PER_REALM) { // Some items use realm, some do not, so allow a find of either a set realm, or 0 sql += " AND (Realm=" + item.Realm + " OR Realm=0)"; } salvageYield = GameServer.Database.SelectObject<SalvageYield>(sql); SalvageYield yield = null; if (salvageYield != null) { yield = salvageYield.Clone() as SalvageYield; } if (yield == null || yield.PackageID == SalvageYield.LEGACY_SALVAGE_ID) { if (calculated == false) { list.Add("SalvageYield ID " + item.SalvageYieldID + " specified but not found!"); } else if (ServerProperties.Properties.USE_NEW_SALVAGE) { list.Add("Calculated Values (USE_NEW_SALVAGE = True)"); } else { list.Add("Calculated Values (USE_NEW_SALVAGE = False)"); } } else { list.Add("Using SalvageYield ID: " + yield.ID); } list.Add(" "); ItemTemplate material = GameServer.Database.FindObjectByKey<ItemTemplate>(yield.MaterialId_nb); string materialName = yield.MaterialId_nb; if (material != null) { materialName = material.Name + " (" + materialName + ")"; } else { materialName = "Not Found! (" + materialName + ")"; } if (calculated == false) { if (yield != null) { list.Add("SalvageYield ID: " + yield.ID); list.Add(" Material: " + materialName); list.Add(" Count: " + yield.Count); list.Add(" Realm: " + (yield.Realm == 0 ? "Any" : GlobalConstants.RealmToName((eRealm)yield.Realm))); list.Add(" PackageID: " + yield.PackageID); } } else { list.Add("SalvageYield ID: " + yield.ID); list.Add(" ObjectType: " + yield.ObjectType); list.Add(" SalvageLevel: " + yield.SalvageLevel); list.Add(" Material: " + materialName); list.Add(" Count: " + Salvage.GetMaterialYield(client.Player, item, yield, material)); list.Add(" Realm: " + (yield.Realm == 0 ? "Any" : GlobalConstants.RealmToName((eRealm)yield.Realm))); list.Add(" PackageID: " + yield.PackageID); } client.Out.SendCustomTextWindow("Salvage info for " + item.Name, list); break; } #endregion Flags #region Update case "update": case "updatetemplate": { int slot = (int)eInventorySlot.LastBackpack; if (args.Length == 3) { slot = Convert.ToInt32(args[2]); } InventoryItem item = client.Player.Inventory.GetItem((eInventorySlot)slot); if (item == null) { client.Out.SendMessage(LanguageMgr.GetTranslation(client, "GMCommands.Item.Count.NoItemInSlot", slot), eChatType.CT_System, eChatLoc.CL_SystemWindow); return; } if (item.Template is ItemUnique) { DisplayMessage(client, "This command is only applicable for items based on an ItemTemplate"); } else { (item.Template as ItemTemplate).AllowUpdate = true; client.Out.SendMessage("** When this item is saved all changes will also be made to the source ItemTemplate: " + item.Template.Id_nb, eChatType.CT_Staff, eChatLoc.CL_SystemWindow); DisplayMessage(client, "** When this item is saved all changes will also be made to the source ItemTemplate: " + item.Template.Id_nb); } break; } #endregion Update #region SaveUnique case "saveunique": { int slot = (int)eInventorySlot.LastBackpack; string idnb = string.Empty; if (args.Length >= 4) { try { slot = Convert.ToInt32(args[3]); } catch { slot = (int)eInventorySlot.LastBackpack; } if (slot > (int)eInventorySlot.LastBackpack) { slot = (int)eInventorySlot.LastBackpack; } if (slot < 0) { slot = 0; } idnb = args[2]; } else if (args.Length >= 3) { idnb = args[2]; } else if (args.Length < 2) { DisplaySyntax(client); return; } InventoryItem item = client.Player.Inventory.GetItem((eInventorySlot)slot); if (item == null) { client.Out.SendMessage(LanguageMgr.GetTranslation(client, "GMCommands.Item.Count.NoItemInSlot", slot), eChatType.CT_System, eChatLoc.CL_SystemWindow); return; } if (item.Template is ItemUnique) { ItemUnique itemUnique = item.Template as ItemUnique; Log.Debug("update ItemUnique " + item.Template.Id_nb); GameServer.Database.SaveObject(itemUnique); client.Out.SendMessage(string.Format("ItemUnique {0} updated!", itemUnique.Id_nb), eChatType.CT_System, eChatLoc.CL_SystemWindow); } else { DisplayMessage(client, "This is not an ItemUnique. To create a new ItemUnique use addunique"); return; } } break; #endregion SaveUnique #region Save / AddUnique case "save": case "addunique": { int slot = (int)eInventorySlot.LastBackpack; string idnb = string.Empty; if (args.Length >= 4) { try { slot = Convert.ToInt32(args[3]); } catch { slot = (int)eInventorySlot.LastBackpack; } if (slot > (int)eInventorySlot.LastBackpack) { slot = (int)eInventorySlot.LastBackpack; } if (slot < 0) { slot = 0; } idnb = args[2]; } else if (args.Length >= 3) { idnb = args[2]; } else if (args.Length < 2) { DisplaySyntax(client); return; } InventoryItem item = client.Player.Inventory.GetItem((eInventorySlot)slot); if (item == null) { client.Out.SendMessage(LanguageMgr.GetTranslation(client, "GMCommands.Item.Count.NoItemInSlot", slot), eChatType.CT_System, eChatLoc.CL_SystemWindow); return; } // if a blank item was created then AllowAdd will be false here if (idnb == string.Empty && (item.AllowAdd == false || item.Id_nb == InventoryItem.BLANK_ITEM || args[1].ToLower() == "addunique")) { DisplayMessage(client, "You need to provide a new id_nb for this item."); return; } else if (idnb == string.Empty) { if (args[1].ToLower() == "save" && item.Template is ItemUnique) { DisplayMessage(client, "You need to provide a new id_nb to save this ItemUnique as an ItemTemplate. Use saveunique to save this ItemUnique."); return; } idnb = item.Id_nb; } ItemTemplate temp = null; if (args[1].ToLower() == "save") { // if the item is allready in the database temp = GameServer.Database.FindObjectByKey<ItemTemplate>(idnb); } // save the new item if (temp == null) { if (args[1].ToLower() == "save") { try { client.Player.Inventory.RemoveItem(item); ItemTemplate itemTemplate = new ItemTemplate(item.Template); itemTemplate.Id_nb = idnb; GameServer.Database.AddObject(itemTemplate); Log.Debug("Added New Item Template: " + itemTemplate.Id_nb); DisplayMessage(client, "Added New Item Template: " + itemTemplate.Id_nb); GameInventoryItem newItem = GameInventoryItem.Create<ItemTemplate>(itemTemplate); if (client.Player.Inventory.AddItem((eInventorySlot)slot, newItem)) InventoryLogging.LogInventoryAction(client.Player, client.Player, eInventoryActionType.Other, newItem.Template, newItem.Count); } catch (Exception ex) { DisplayMessage(client, "Error adding template: " + ex.Message); return; } } else //addunique { try { client.Player.Inventory.RemoveItem(item); ItemUnique unique = new ItemUnique(item.Template); unique.Id_nb = idnb; GameServer.Database.AddObject(unique); Log.Debug("Added New ItemUnique: " + unique.Id_nb + " (" + unique.ObjectId + ")"); DisplayMessage(client, "Added New ItemUnique: " + unique.Id_nb + " (" + unique.ObjectId + ")"); GameInventoryItem newItem = GameInventoryItem.Create<ItemUnique>(unique); if (client.Player.Inventory.AddItem((eInventorySlot)slot, newItem)) InventoryLogging.LogInventoryAction(client.Player, client.Player, eInventoryActionType.Other, newItem.Template, newItem.Count); } catch (Exception ex) { DisplayMessage(client, "Error adding unique: " + ex.Message); return; } } } else // update the item { item.Template.Dirty = true; GameServer.Database.SaveObject(item.Template); GameServer.Database.UpdateInCache<ItemTemplate>(item.Template.Id_nb); DisplayMessage(client, "Updated Inventory Item: " + item.Id_nb); if (item.Template is ItemTemplate && (item.Template as ItemTemplate).AllowUpdate) { Log.Debug("Updated ItemTemplate: " + item.Template.Id_nb); DisplayMessage(client, "++ Source ItemTemplate Updated!"); } } } break; #endregion Save / AddUnique #region FindID case "findid": { string name = string.Join(" ", args, 2, args.Length - 2); if (name != "") { var items = GameServer.Database.SelectObjects<ItemTemplate>("id_nb like '%" + GameServer.Database.Escape(name) + "%'"); DisplayMessage(client, LanguageMgr.GetTranslation(client, "GMCommands.Item.FindID.MatchingIDsForX", name, items.Count), new object[] { }); foreach (ItemTemplate item in items) { DisplayMessage(client, item.Id_nb + " (" + item.Name + ")", new object[] { }); } } break; } #endregion FindID #region FindName case "findname": { string name = string.Join(" ", args, 2, args.Length - 2); if (name != "") { var items = GameServer.Database.SelectObjects<ItemTemplate>("name like '%" + GameServer.Database.Escape(name) + "%'"); DisplayMessage(client, LanguageMgr.GetTranslation(client, "GMCommands.Item.FindName.MatchingNamesForX", name, items.Count), new object[] { }); foreach (ItemTemplate item in items) { DisplayMessage(client, item.Name + " (" + item.Id_nb + ")", new object[] { }); } } break; } #endregion FindName #region Load case "load": { if (GameServer.Database.UpdateInCache<ItemTemplate>(args[2])) { Log.DebugFormat("Item {0} updated or added to ItemTemplate cache.", args[2]); DisplayMessage(client, "Item {0} updated or added to ItemTemplate cache.", args[2]); } else { Log.DebugFormat("Item {0} not found.", args[2]); DisplayMessage(client, "Item {0} not found.", args[2]); } break; } #endregion Load #region LoadPackage case "loadpackage": { if (args[2] != "") { if (args[2] == "**all**") args[2] = String.Empty; var packageItems = GameServer.Database.SelectObjects<ItemTemplate>("PackageID = '" + args[2] + "'") as ItemTemplate[]; if (packageItems != null) { int count = 0; foreach (ItemTemplate item in packageItems) { if (GameServer.Database.UpdateInCache<ItemTemplate>(item.Id_nb)) { count++; } } Log.DebugFormat("{0} items updated or added to the ItemTemplate cache.", count); DisplayMessage(client, "{0} items updated or added to the ItemTemplate cache.", count); } else { DisplayMessage(client, "No items found for package {0}.", args[2]); } } break; } #endregion LoadPackage #region LoadArtifacts case "loadartifacts": { DisplayMessage(client, "{0} Artifacts re-loaded.", DOL.GS.ArtifactMgr.LoadArtifacts()); } break; #endregion LoadArtifacts #region LoadSpells case "loadspells": { int slot = (int)eInventorySlot.LastBackpack; if (args.Length >= 4) { try { slot = Convert.ToInt32(args[3]); } catch { slot = (int)eInventorySlot.LastBackpack; } } InventoryItem item = client.Player.Inventory.GetItem((eInventorySlot)slot); if (item == null) { client.Out.SendMessage(LanguageMgr.GetTranslation(client, "GMCommands.Item.Count.NoItemInSlot", slot), eChatType.CT_System, eChatLoc.CL_SystemWindow); return; } LoadSpell(client, item.SpellID); LoadSpell(client, item.SpellID1); LoadSpell(client, item.ProcSpellID); LoadSpell(client, item.ProcSpellID1); break; } #endregion LoadSpells } } catch { DisplaySyntax(client); } }
/// <summary> /// Creates a copy of the GameNpcInventoryTemplate. /// </summary> /// <returns>Open copy of this template</returns> public GameNpcInventoryTemplate CloneTemplate() { lock (m_items) { var clone = new GameNpcInventoryTemplate(); clone.m_changedSlots = new List<eInventorySlot>(m_changedSlots); clone.m_changesCounter = m_changesCounter; foreach (var de in m_items) { InventoryItem oldItem = de.Value; InventoryItem item = new GameInventoryItem(); item.Template = new ItemTemplate(); item.Template.Id_nb = oldItem.Id_nb; item.Model = oldItem.Model; item.Color = oldItem.Color; item.Effect = oldItem.Effect; item.Extension = oldItem.Extension; item.SlotPosition = oldItem.SlotPosition; clone.m_items.Add(de.Key, item); } clone.m_isClosed = false; return clone; } }
/// <summary> /// Adds item to template reusing iventory item instances from other templates. /// </summary> /// <param name="slot">The equipment slot</param> /// <param name="model">The equipment model</param> /// <param name="color">The equipment color</param> /// <param name="effect">The equipment effect</param> /// <param name="extension">The equipment extension</param> /// <returns>true if added</returns> public bool AddNPCEquipment(eInventorySlot slot, int model, int color, int effect, int extension) { lock (m_items) { lock (m_usedInventoryItems.SyncRoot) { if (m_isClosed) return false; slot = GetValidInventorySlot(slot); if (slot == eInventorySlot.Invalid) return false; //Changed to support randomization of slots - if we try to load a weapon in the same spot with a different model, //let's make it random 50% chance to either overwrite the item or leave it be if (m_items.ContainsKey(slot)) { //50% chance to keep the item we have if (Util.Chance(50)) return false; //Let's remove the old item! m_items.Remove(slot); } string itemID = string.Format("{0}:{1},{2},{3}", slot, model, color, effect, extension); InventoryItem item = null; if (!m_usedInventoryItems.ContainsKey(itemID)) { item = new GameInventoryItem(); item.Template = new ItemTemplate(); item.Template.Id_nb = itemID; item.Model = model; item.Color = color; item.Effect = effect; item.Extension = (byte)extension; item.SlotPosition = (int)slot; } else return false; m_items.Add(slot, item); } } return true; }