Beispiel #1
0
        /// <summary>
        /// Get modified bonuses for the pet; some bonuses come from the shade,
        /// some come from the pet.
        /// </summary>
        /// <param name="property"></param>
        /// <returns></returns>
        public override int GetModified(eProperty property)
        {
            if (Brain == null || (Brain as IControlledBrain) == null)
            {
                return(base.GetModified(property));
            }

            GameLiving owner = (Brain as IControlledBrain).GetLivingOwner();

            switch (property)
            {
            case eProperty.Strength:
            case eProperty.Dexterity:
            case eProperty.Quickness:
            case eProperty.Resist_Crush:
            case eProperty.Resist_Body:
            case eProperty.Resist_Cold:
            case eProperty.Resist_Energy:
            case eProperty.Resist_Heat:
            case eProperty.Resist_Matter:
            case eProperty.Resist_Slash:
            case eProperty.Resist_Spirit:
            case eProperty.Resist_Thrust:
            {
                // Get item bonuses from the shade, but buff bonuses from the pet.

                int itemBonus = owner.GetModifiedFromItems(property);
                int buffBonus = GetModifiedFromBuffs(property);
                int debuff    = DebuffCategory[(int)property];

                // Base stats from the pet; add this to item bonus
                // afterwards, as it is treated the same way for
                // debuffing purposes.

                int baseBonus = 0;
                switch (property)
                {
                case eProperty.Strength:
                    baseBonus = Strength;
                    break;

                case eProperty.Dexterity:
                    baseBonus = Dexterity;
                    break;

                case eProperty.Quickness:
                    baseBonus = Quickness;
                    break;
                }

                itemBonus += baseBonus;

                // Apply debuffs. 100% Effectiveness for player buffs, but only 50%
                // effectiveness for item bonuses.

                buffBonus -= Math.Abs(debuff);

                if (buffBonus < 0)
                {
                    itemBonus += buffBonus / 2;
                    buffBonus  = 0;
                    if (itemBonus < 0)
                    {
                        itemBonus = 0;
                    }
                }

                return(itemBonus + buffBonus);
            }

            case eProperty.Constitution:
            {
                int baseBonus = Constitution;
                int buffBonus = GetModifiedFromBuffs(eProperty.Constitution);
                int debuff    = DebuffCategory[(int)property];

                // Apply debuffs. 100% Effectiveness for player buffs, but only 50%
                // effectiveness for base bonuses.

                buffBonus -= Math.Abs(debuff);

                if (buffBonus < 0)
                {
                    baseBonus += buffBonus / 2;
                    buffBonus  = 0;
                    if (baseBonus < 0)
                    {
                        baseBonus = 0;
                    }
                }

                return(baseBonus + buffBonus);
            }

            case eProperty.MaxHealth:
            {
                int conBonus  = (int)(3.1 * Constitution);
                int hitsBonus = (int)(32.5 * Level + m_summonHitsBonus);
                int debuff    = DebuffCategory[(int)property];

                // Apply debuffs. As only base constitution affects pet
                // health, effectiveness is a flat 50%.

                conBonus -= Math.Abs(debuff) / 2;

                if (conBonus < 0)
                {
                    conBonus = 0;
                }

                return(conBonus + hitsBonus);
            }
            }

            return(base.GetModified(property));
        }