protected virtual bool CheckForDamageType(InventoryItem item, int damageType) { if (GlobalConstants.IsWeapon(item.Object_Type)) { if (damageType >= 1 && damageType <= 3) { return(damageType == item.Type_Damage); } else { log.Error("There has been an unexpected bonus passed to CheckForDamageType: " + damageType); ChatUtil.SendErrorMessage(m_searchPlayer, "Unhandled damage type (" + damageType + ") specified in search!"); m_searchHasError = true; return(false); } } return(false); }
public void SwitchItem(GamePlayer player, eInventorySlot ToSlot, eInventorySlot FromSlot) { if (player.Inventory.GetItem(FromSlot) != null) { InventoryItem item = player.Inventory.GetItem(FromSlot); if (!GlobalConstants.IsWeapon(item.Object_Type)) { DisplayMessage(player.Client, "That is not a weapon!"); DisplaySyntax(player.Client); return; } if (!player.Inventory.MoveItem(FromSlot, ToSlot, 1)) { DisplayMessage(player.Client, "There seems to have been a problem. Please try again."); DisplaySyntax(player.Client); return; } } }
/// <summary> /// Write item technical info /// </summary> /// <param name="output"></param> /// <param name="item"></param> public override void WriteTechnicalInfo(List <string> delve, GameClient client) { delve.Add(" "); delve.Add("--- Artifact/Item technical information ---"); delve.Add(" "); delve.Add("Item Template: " + Id_nb); delve.Add(" Name: " + Name); delve.Add(" Experience: " + Experience); delve.Add(" Object: " + GlobalConstants.ObjectTypeToName(Object_Type) + " (" + Object_Type + ")"); delve.Add(" Type: " + GlobalConstants.SlotToName(Item_Type) + " (" + Item_Type + ")"); delve.Add(" Extension: " + Extension); delve.Add(" Model: " + Model); delve.Add(" Color: " + Color); delve.Add(" Emblem: " + Emblem); delve.Add(" Effect: " + Effect); delve.Add(" Value/Price: " + Money.GetShortString(Price)); delve.Add(" Weight: " + (Weight / 10.0f) + "lbs"); delve.Add(" Quality: " + Quality + "%"); delve.Add(" Durability: " + Durability + "/" + MaxDurability + "(max)"); delve.Add(" Condition: " + Condition + "/" + MaxCondition + "(max)"); delve.Add(" Realm: " + Realm); delve.Add(" Is dropable: " + (IsDropable ? "yes" : "no")); delve.Add(" Is pickable: " + (IsPickable ? "yes" : "no")); delve.Add(" Is stackable: " + (IsStackable ? "yes" : "no")); delve.Add(" Is tradeable: " + (IsTradable ? "yes" : "no")); delve.Add(" ProcSpellID: " + ProcSpellID); delve.Add(" ProcSpellID1: " + ProcSpellID1); delve.Add(" SpellID: " + SpellID + " (" + Charges + "/" + MaxCharges + ")"); delve.Add(" SpellID1: " + SpellID1 + " (" + Charges1 + "/" + MaxCharges1 + ")"); delve.Add("PoisonSpellID: " + PoisonSpellID + " (" + PoisonCharges + "/" + PoisonMaxCharges + ") "); if (GlobalConstants.IsWeapon(Object_Type)) { delve.Add(" Hand: " + GlobalConstants.ItemHandToName(Hand) + " (" + Hand + ")"); delve.Add("Damage/Second: " + (DPS_AF / 10.0f)); delve.Add(" Speed: " + (SPD_ABS / 10.0f)); delve.Add(" Damage type: " + GlobalConstants.WeaponDamageTypeToName(Type_Damage) + " (" + Type_Damage + ")"); delve.Add(" Bonus: " + Bonus); } else if (GlobalConstants.IsArmor(Object_Type)) { delve.Add(" Armorfactor: " + DPS_AF); delve.Add(" Absorption: " + SPD_ABS); delve.Add(" Bonus: " + Bonus); } else if (Object_Type == (int)eObjectType.Shield) { delve.Add("Damage/Second: " + (DPS_AF / 10.0f)); delve.Add(" Speed: " + (SPD_ABS / 10.0f)); delve.Add(" Shield type: " + GlobalConstants.ShieldTypeToName(Type_Damage) + " (" + Type_Damage + ")"); delve.Add(" Bonus: " + Bonus); } else if (Object_Type == (int)eObjectType.Arrow || Object_Type == (int)eObjectType.Bolt) { delve.Add(" Ammunition #: " + DPS_AF); delve.Add(" Damage: " + GlobalConstants.AmmunitionTypeToDamageName(SPD_ABS)); delve.Add(" Range: " + GlobalConstants.AmmunitionTypeToRangeName(SPD_ABS)); delve.Add(" Accuracy: " + GlobalConstants.AmmunitionTypeToAccuracyName(SPD_ABS)); delve.Add(" Bonus: " + Bonus); } else if (Object_Type == (int)eObjectType.Instrument) { delve.Add(" Instrument: " + GlobalConstants.InstrumentTypeToName(DPS_AF)); } }
/// <summary> /// Artifact Magical Ability delve information (spells, procs). /// </summary> /// <param name="delve"></param> /// <param name="bonusID"></param> /// <param name="levelRequirement"></param> public virtual void DelveMagicalAbility(List <string> delve, ArtifactBonus.ID bonusID, int levelRequirement) { string levelTag = (levelRequirement > 0) ? string.Format("[L{0}]: ", levelRequirement) : string.Empty; bool isProc = false; bool isSecondary = false; int spellID = 0; switch (bonusID) { case ArtifactBonus.ID.Spell: spellID = SpellID; isProc = false; isSecondary = false; break; case ArtifactBonus.ID.Spell1: spellID = SpellID1; isProc = false; isSecondary = true; break; case ArtifactBonus.ID.ProcSpell: spellID = ProcSpellID; isProc = true; isSecondary = false; break; case ArtifactBonus.ID.ProcSpell1: spellID = ProcSpellID1; isProc = true; isSecondary = true; break; } if (spellID == 0) { return; } delve.Add(string.Empty); delve.Add(string.Format("{0}{1}Magical Ability:", levelTag, isSecondary ? "Secondary " : string.Empty)); SpellLine spellLine = SkillBase.GetSpellLine(GlobalSpellsLines.Item_Effects); if (spellLine != null) { List <Spell> spells = SkillBase.GetSpellList(spellLine.KeyName); foreach (Spell spell in spells) { if (spell.ID == spellID) { spell.Delve(delve); } } } if (isProc) { delve.Add(string.Format( "- Spell has a chance of casting when this {0} enemy.", GlobalConstants.IsWeapon(Object_Type) ? "weapon strikes an" : "armor is hit by")); } else { delve.Add("- This spell is cast when the item is used."); } }
/// <summary> /// Check if the player can enchant the item /// </summary> /// <param name="player"></param> /// <param name="item"></param> /// <returns></returns> public virtual bool IsAllowedToCombine(GamePlayer player, InventoryItem item) { if (item == null) { return(false); } if (player.TradeWindow.ItemsCount <= 0) { player.Out.SendMessage(LanguageMgr.GetTranslation(player.Client.Account.Language, "AdvancedCraftingSkill.IsAllowedToCombine.Imbue", item.Name), eChatType.CT_System, eChatLoc.CL_SystemWindow); return(false); } if (!item.IsCrafted) { player.Out.SendMessage(LanguageMgr.GetTranslation(player.Client.Account.Language, "AdvancedCraftingSkill.IsAllowedToCombine.CraftedItems"), eChatType.CT_System, eChatLoc.CL_SystemWindow); return(false); } InventoryItem itemToCombine = (InventoryItem)player.TradeWindow.TradeItems[0]; if (itemToCombine.Object_Type == (int)eObjectType.AlchemyTincture) { if (item.Object_Type != (int)eObjectType.Instrument) // Only check for non instruments { switch (itemToCombine.Type_Damage) { case 0: //Type damage 0 = armors if (!GlobalConstants.IsArmor(item.Object_Type)) { if (item.Object_Type == (int)eObjectType.Shield) // think shield can do armor and weapon ? not verified. { return(true); } player.Out.SendMessage(LanguageMgr.GetTranslation(player.Client.Account.Language, "AdvancedCraftingSkill.IsAllowedToCombine.NoGoodCombine"), eChatType.CT_System, eChatLoc.CL_SystemWindow); return(false); } break; case 1: //Type damage 1 = weapons if (!GlobalConstants.IsWeapon(item.Object_Type)) { player.Out.SendMessage(LanguageMgr.GetTranslation(player.Client.Account.Language, "AdvancedCraftingSkill.IsAllowedToCombine.NoGoodCombine"), eChatType.CT_System, eChatLoc.CL_SystemWindow); return(false); } break; default: player.Out.SendMessage(LanguageMgr.GetTranslation(player.Client.Account.Language, "AdvancedCraftingSkill.IsAllowedToCombine.ProblemCombine"), eChatType.CT_System, eChatLoc.CL_SystemWindow); return(false); } } else // Instrument { if (itemToCombine.Type_Damage != 0) //think instrument can do only armorproc ? not verified. { player.Out.SendMessage(LanguageMgr.GetTranslation(player.Client.Account.Language, "AdvancedCraftingSkill.IsAllowedToCombine.NoGoodCombine"), eChatType.CT_System, eChatLoc.CL_SystemWindow); return(false); } } } if (!GlobalConstants.IsArmor(item.Object_Type) && !GlobalConstants.IsWeapon(item.Object_Type) && item.Object_Type != (int)eObjectType.Instrument) { player.Out.SendMessage(LanguageMgr.GetTranslation(player.Client.Account.Language, "AdvancedCraftingSkill.IsAllowedToCombine.NoEnchanted"), eChatType.CT_System, eChatLoc.CL_SystemWindow); return(false); } return(true); }