/// <summary> /// Add all abilities for this level. /// </summary> /// <param name="artifactLevel">The level to add abilities for.</param> /// <param name="player"></param> /// <returns>True, if artifact gained 1 or more abilities, else false.</returns> private bool AddAbilities(GamePlayer player, int artifactLevel) { ItemTemplate template = GameServer.Database.FindObjectByKey <ItemTemplate>(Id_nb); if (template == null) { log.Warn(string.Format("Item template missing for artifact '{0}'", Name)); return(false); } bool abilityGained = false; for (ArtifactBonus.ID bonusID = ArtifactBonus.ID.Min; bonusID <= ArtifactBonus.ID.Max; ++bonusID) { if (m_levelRequirements[(int)bonusID] == artifactLevel) { Template.SetBonusType(bonusID, template.GetBonusType(bonusID)); Template.SetBonusAmount(bonusID, template.GetBonusAmount(bonusID)); if (bonusID <= ArtifactBonus.ID.MaxStat) { player.Notify(PlayerInventoryEvent.ItemBonusChanged, this, new ItemBonusChangedEventArgs(Template.GetBonusType(bonusID), Template.GetBonusAmount(bonusID))); } abilityGained = true; } } return(abilityGained); }
/// <summary> /// Returns the level when this artifact will gain a new /// ability. /// </summary> /// <returns></returns> private int GainsNewAbilityAtLevel() { for (ArtifactBonus.ID bonusID = ArtifactBonus.ID.Min; bonusID <= ArtifactBonus.ID.Max; ++bonusID) { if (m_levelRequirements[(int)bonusID] > ArtifactLevel) { return(m_levelRequirements[(int)bonusID]); } } return(10); }
/// <summary> /// Get the bonus type. /// </summary> /// <param name="bonusID"></param> /// <returns></returns> public int GetBonusType(ArtifactBonus.ID bonusID) { switch ((int)bonusID) { case 0: return(Bonus1Type); case 1: return(Bonus2Type); case 2: return(Bonus3Type); case 3: return(Bonus4Type); case 4: return(Bonus5Type); case 5: return(Bonus6Type); case 6: return(Bonus7Type); case 7: return(Bonus8Type); case 8: return(Bonus9Type); case 9: return(Bonus10Type); case 10: return(SpellID); case 11: return(SpellID1); case 12: return(ProcSpellID); case 13: return(ProcSpellID1); } return(0); }
/// <summary> /// Set the bonus amount. /// </summary> /// <param name="bonusID"></param> /// <returns></returns> public void SetBonusAmount(ArtifactBonus.ID bonusID, int bonusAmount) { switch ((int)bonusID) { case 0: Bonus1 = bonusAmount; break; case 1: Bonus2 = bonusAmount; break; case 2: Bonus3 = bonusAmount; break; case 3: Bonus4 = bonusAmount; break; case 4: Bonus5 = bonusAmount; break; case 5: Bonus6 = bonusAmount; break; case 6: Bonus7 = bonusAmount; break; case 7: Bonus8 = bonusAmount; break; case 8: Bonus9 = bonusAmount; break; case 9: Bonus10 = bonusAmount; break; } }
/// <summary> /// Create a new inventory artifact from an item template. /// </summary> /// <param name="template"></param> public InventoryArtifact(ItemTemplate template) : base(template) { ArtifactID = ArtifactMgr.GetArtifactIDFromItemID(template.Id_nb); ArtifactLevel = 0; m_levelRequirements = ArtifactMgr.GetLevelRequirements(ArtifactID); for (ArtifactBonus.ID bonusID = ArtifactBonus.ID.Min; bonusID <= ArtifactBonus.ID.Max; ++bonusID) { // Clear all bonuses except the base (L0) bonuses. if (m_levelRequirements[(int)bonusID] > 0) { Template.SetBonusType(bonusID, 0); Template.SetBonusAmount(bonusID, 0); } } }
/// <summary> /// Verify that this artifact has all the correct abilities /// </summary> public void UpdateAbilities(ItemTemplate template) { if (template == null) { return; } for (ArtifactBonus.ID bonusID = ArtifactBonus.ID.Min; bonusID <= ArtifactBonus.ID.Max; ++bonusID) { if (m_levelRequirements[(int)bonusID] <= ArtifactLevel) { Template.SetBonusType(bonusID, template.GetBonusType(bonusID)); Template.SetBonusAmount(bonusID, template.GetBonusAmount(bonusID)); } else { Template.SetBonusType(bonusID, 0); Template.SetBonusAmount(bonusID, 0); } } }
/// <summary> /// Get the bonus amount. /// </summary> /// <param name="bonusID"></param> /// <returns></returns> public int GetBonusAmount(ArtifactBonus.ID bonusID) { switch ((int)bonusID) { case 0: return(Bonus1); case 1: return(Bonus2); case 2: return(Bonus3); case 3: return(Bonus4); case 4: return(Bonus5); case 5: return(Bonus6); case 6: return(Bonus7); case 7: return(Bonus8); case 8: return(Bonus9); case 9: return(Bonus10); } return(0); }
/// <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> /// Artifact delve information. /// </summary> public override void Delve(List <string> delve, GamePlayer player) { if (player == null) { return; } // Artifact specific information. if (ArtifactLevel < 10) { delve.Add(string.Format("Artifact (Current level: {0})", ArtifactLevel)); delve.Add(string.Format( "- {0}% exp earned towards level {1}", ArtifactMgr.GetXPGainedForLevel(this), ArtifactLevel + 1)); delve.Add(string.Format( "- Artifact will gain new abilities at level {0}", GainsNewAbilityAtLevel())); delve.Add(string.Format( "(Earns exp: {0})", ArtifactMgr.GetEarnsXP(this))); } else { delve.Add("Artifact:"); delve.Add("Current level: 10"); } // Item bonuses. delve.Add(string.Empty); delve.Add("Magical Bonuses:"); for (ArtifactBonus.ID bonusID = ArtifactBonus.ID.MinStat; bonusID <= ArtifactBonus.ID.MaxStat; ++bonusID) { DelveMagicalBonus(delve, Template.GetBonusAmount(bonusID), Template.GetBonusType(bonusID), m_levelRequirements[(int)bonusID]); } for (ArtifactBonus.ID bonusID = ArtifactBonus.ID.MinStat; bonusID <= ArtifactBonus.ID.MaxStat; ++bonusID) { DelveFocusBonus(delve, Template.GetBonusAmount(bonusID), Template.GetBonusType(bonusID), m_levelRequirements[(int)bonusID]); } delve.Add(string.Empty); for (ArtifactBonus.ID bonusID = ArtifactBonus.ID.MinStat; bonusID <= ArtifactBonus.ID.MaxStat; ++bonusID) { DelveBonus(delve, Template.GetBonusAmount(bonusID), Template.GetBonusType(bonusID), m_levelRequirements[(int)bonusID]); } // Spells & Procs DelveMagicalAbility(delve, ArtifactBonus.ID.Spell, m_levelRequirements[(int)ArtifactBonus.ID.Spell]); DelveMagicalAbility(delve, ArtifactBonus.ID.ProcSpell, m_levelRequirements[(int)ArtifactBonus.ID.ProcSpell]); DelveMagicalAbility(delve, ArtifactBonus.ID.Spell1, m_levelRequirements[(int)ArtifactBonus.ID.Spell1]); DelveMagicalAbility(delve, ArtifactBonus.ID.ProcSpell1, m_levelRequirements[(int)ArtifactBonus.ID.ProcSpell1]); delve.Add(string.Empty); // Weapon & Armor Stats. if ((Object_Type >= (int)eObjectType.GenericWeapon) && (Object_Type <= (int)eObjectType.MaulerStaff) || (Object_Type == (int)eObjectType.Instrument)) { DelveWeaponStats(delve, player); } else if (Object_Type >= (int)eObjectType.Cloth && Object_Type <= (int)eObjectType.Scale) { DelveArmorStats(delve, player); } // Reuse Timer int reuseTimer = ArtifactMgr.GetReuseTimer(this); if (reuseTimer > 0) { TimeSpan reuseTimeSpan = new TimeSpan(0, 0, reuseTimer); delve.Add(string.Empty); delve.Add(string.Format( "Can use item every {0} min", reuseTimeSpan.ToString().Substring(3))); } if (player.Client.Account.PrivLevel > 1) { WriteTechnicalInfo(delve, player.Client); } }
/// <summary> /// Set the bonus type. /// </summary> /// <param name="bonusID"></param> /// <returns></returns> public void SetBonusType(ArtifactBonus.ID bonusID, int bonusType) { switch ((int)bonusID) { case 0: Bonus1Type = bonusType; break; case 1: Bonus2Type = bonusType; break; case 2: Bonus3Type = bonusType; break; case 3: Bonus4Type = bonusType; break; case 4: Bonus5Type = bonusType; break; case 5: Bonus6Type = bonusType; break; case 6: Bonus7Type = bonusType; break; case 7: Bonus8Type = bonusType; break; case 8: Bonus9Type = bonusType; break; case 9: Bonus10Type = bonusType; break; case 10: SpellID = bonusType; break; case 11: SpellID1 = bonusType; break; case 12: ProcSpellID = bonusType; break; case 13: ProcSpellID1 = bonusType; break; } }