Example #1
0
        /// <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);
        }
Example #2
0
        /// <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);
        }
Example #3
0
        /// <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);
        }
Example #4
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;
            }
        }
Example #5
0
        /// <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);
                }
            }
        }
Example #6
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);
                }
            }
        }
Example #7
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);
        }
Example #8
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.");
            }
        }
Example #9
0
        /// <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);
            }
        }
Example #10
0
        /// <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;
            }
        }