/// <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)); }