public static int GetDifficultyFor(BaseCreature bc) { if (bc == null) return 0; if (bc.Fame > 0) { if (bc.Fame > 12000) return Math.Min(800, bc.Fame / 35); else return Math.Min(343, bc.Fame / 25); } double val = (bc.HitsMax * 1.6) + bc.StamMax + bc.ManaMax; val += bc.SkillsTotal / 10; if (val > 600) val = 600 + (int)((val - 600) * (3.0 / 11)); int skillLevel = 0; bool spellcasting = false; if (spellcasting = IsSpellCastingCreature(bc, out skillLevel)) { val += Math.Min(100, skillLevel); val += Math.Min(200, ComputeDamage(bc)); } else val += Math.Min(200, ComputeDamage(bc) * 2.2); if (bc.HasBreath) val += 100; if (bc.PoisonImmune != null) val += bc.PoisonImmune.RealLevel * 25; val += BaseInstrument.GetPoisonLevel(bc) * 20; if (bc.GetWeaponAbility() != null) val += bc.WeaponAbilityChance * 200; if (bc.TaintedLifeAura) val += 35; if (bc.BardImmune) val += 50; else { if (bc.Unprovokable) val += 15; if (bc.Uncalmable) val += 15; if (bc.AreaPeaceImmune) val += 15; } if (bc.BonusPetDamageScalar > 1.0) val += 25 * bc.BonusPetDamageScalar; if (bc.IsParagon) val *= 1.25; val /= spellcasting ? 5 : 6; return (int)val; }