Пример #1
0
        public static Stats GetBaseStats(int level, CharacterClass characterClass, CharacterRace characterRace, DruidForm characterForm)
        {   // Health, Mana and some other things are same for every race.
            lock (syncLock)
            {
                #region Cache
                if (level == _lastLevel &&
                    characterClass == _lastClass &&
                    characterRace == _lastRace &&
                    characterForm == _lastForm)
                {
                    return(_lastStats.Clone());
                }
                _lastLevel = level;
                _lastClass = characterClass;
                _lastRace  = characterRace;
                _lastForm  = characterForm;
                #endregion

                Stats S = new Stats();
                #region Race, not class benefit
                // Most Level 85 Race and Class Stats come from:
                // http://code.google.com/p/simulationcraft/source/browse/branches/cataclysm/engine/sc_rating.cpp?r=6207
                // When they were still at 80 as of Jan 01st, 2011

                // From SimCraft
                Stats race = new Stats();
                switch (characterRace)
                {
                // Alliance
                case CharacterRace.Human:    race.Strength = 20; race.Agility = 20; race.Stamina = 20; race.Intellect = 20; race.Spirit = 20; break;

                case CharacterRace.Dwarf:    race.Strength = 25; race.Agility = 16; race.Stamina = 21; race.Intellect = 19; race.Spirit = 19; break;

                case CharacterRace.NightElf: race.Strength = 16; race.Agility = 24; race.Stamina = 20; race.Intellect = 20; race.Spirit = 20; break;

                case CharacterRace.Gnome:    race.Strength = 15; race.Agility = 22; race.Stamina = 20; race.Intellect = 24; race.Spirit = 20; break;

                case CharacterRace.Draenei:  race.Strength = 21; race.Agility = 17; race.Stamina = 20; race.Intellect = 20; race.Spirit = 22; break;

                case CharacterRace.Worgen:   race.Strength = 23; race.Agility = 22; race.Stamina = 20; race.Intellect = 16; race.Spirit = 19; break;

                // Horde
                case CharacterRace.Orc:      race.Strength = 23; race.Agility = 17; race.Stamina = 21; race.Intellect = 17; race.Spirit = 22; break;

                case CharacterRace.Undead:   race.Strength = 19; race.Agility = 18; race.Stamina = 20; race.Intellect = 18; race.Spirit = 25; break;

                case CharacterRace.Tauren:   race.Strength = 25; race.Agility = 16; race.Stamina = 21; race.Intellect = 16; race.Spirit = 22; break;

                case CharacterRace.Troll:    race.Strength = 21; race.Agility = 22; race.Stamina = 20; race.Intellect = 16; race.Spirit = 21; break;

                case CharacterRace.BloodElf: race.Strength = 17; race.Agility = 22; race.Stamina = 20; race.Intellect = 23; race.Spirit = 18; break;

                case CharacterRace.Goblin:   race.Strength = 17; race.Agility = 22; race.Stamina = 20; race.Intellect = 23; race.Spirit = 20; break;

                default: { break; }
                }
                ;
                // From Chardev (85)
                //Class           Str Agi Sta Int Spi
                //Druid            76  69  86 136 153
                //Shaman          111  60 128 119 136
                //Death Knight    171 101 154  16  44
                //Hunter           60 178 119  77  88
                //Mage             17  26  43 187 175
                //Paladin         144  77 136  86  97
                //Priest           26  34  51 188 183
                //Rogue           102 186  94  26  53
                //Warlock          43  51  76 161 166
                //Warrior         169 103 153  17  44
                #endregion

                #region Base Stats
                #region All Classes
                S.Miss  = 0.05f;
                S.Block = 0.00f;
                S.Parry = 0.00f;
                #endregion
                switch (characterClass)
                {
                    #region Death Knight
                case CharacterClass.DeathKnight:
                    Stats dk = new Stats()
                    {
                        Strength     = 171, Agility = 101, Stamina = 274, Intellect = 16, Spirit = 44,
                        Health       = 43025f,
                        Dodge        = 0.05f, Parry = 0.05f, Block = 0.00f,
                        PhysicalCrit = 0.0049f, AttackPower = 595f,
                    };
                    S.Accumulate(race);
                    S.Accumulate(dk);
                    break;

                    #endregion
                    #region Druid
                case CharacterClass.Druid:
                    Stats druid = new Stats()
                    {
                        Strength     = 76, Agility = 69, Stamina = 86, Intellect = 136, Spirit = 153,
                        Health       = 39533f, Mana = 18635f,
                        Dodge        = 0.03758f, Parry = 0.05f, Block = 0.05f,
                        PhysicalCrit = 0.03192f, AttackPower = 613f,
                        SpellCrit    = 0.0185f, Mp5 = 931f,
                    };
                    S.Accumulate(race);
                    S.Accumulate(druid);
                    switch (characterForm)
                    {
                    case DruidForm.Moonkin:
                    case DruidForm.Caster:
                        S.AttackPower  = -10;
                        S.PhysicalCrit = 0.0743f;
                        S.Dodge        = 0.0556970f;  //??
                        break;

                    case DruidForm.Bear:
                        S.AttackPower            = 255;
                        S.PhysicalCrit           = 0.074755f;
                        S.Dodge                  = 0.0556970f;
                        S.BonusStaminaMultiplier = 0.2f;
                        break;

                    case DruidForm.Cat:
                        S.AttackPower  = 235;
                        S.PhysicalCrit = 0.074755f;
                        S.Dodge        = 0.0556970f;
                        break;

                    default:
                        break;
                    }
                    break;

                    #endregion
                    #region Hunter
                case CharacterClass.Hunter:
                    Stats hun = new Stats()
                    {
                        // Stats updated 8/19/2011 4.2 w/ Troll Hunter: Tsevon @ US-Dragonmaw w/ no spec.
                        Strength  = 60,
                        Agility   = 178,
                        Stamina   = 119,
                        Intellect = 77,
                        Spirit    = 88,
                        Health    = 39037,
                        Dodge     = 0.03758f, Parry = 0.05f,
                        // This assumes ALL AP from full AP += AGI * 2
                        // So naked Hunter has 31 AP un accounted for.
                        // Naked troll, no gear, no spec, LW & Skinning.
                        PhysicalCrit = 0, AttackPower = 31f, RangedAttackPower = 31f,
                    };
                    S.Accumulate(race);
                    S.Accumulate(hun);
                    break;

                    #endregion
                    #region Mage
                case CharacterClass.Mage:
                    Stats mag = new Stats()
                    {
                        Strength = 17, Agility = 26, Stamina = 43, Intellect = 187, Spirit = 175,
                        Health   = 36853f, Mana = 17138f,
                        Dodge    = 0.03758f, Parry = 0.05f,
                    };
                    S.Accumulate(race);
                    S.Accumulate(mag);
                    break;

                    #endregion
                    #region Paladin
                case CharacterClass.Paladin:
                    Stats pal = new Stats()
                    {
                        Strength     = 144, Agility = 77, Stamina = 136, Intellect = 86, Spirit = 97,
                        Health       = 43285f, Mana = 23422,
                        Dodge        = 0.05f, Parry = 0.05f, Block = 0.05f,
                        PhysicalCrit = 0.00652f, AttackPower = 235f,
                        SpellCrit    = 0.033355f,
                    };
                    S.Accumulate(race);
                    S.Accumulate(pal);
                    break;

                    #endregion
                    #region Priest
                case CharacterClass.Priest:
                    // added adjustments to the base race here because the math using the previous stats
                    // just don't work for the in game calculations on priest tests.
                    // also unsure how these changes would effect other modules if moved up.
                    // adding or subracting from the priest stats don't work and throws all other class
                    // calculations off.
                    switch (characterRace)
                    {
                    case CharacterRace.Human: race.Spirit = 19; break;

                    case CharacterRace.Gnome: race.Intellect = 23; break;

                    case CharacterRace.Goblin: race.Spirit = 18; break;
                    }
                    Stats pri = new Stats()
                    {
                        Strength     = 26, Agility = 34, Stamina = 51, Intellect = 169, Spirit = 178,
                        Health       = 43285f, Mana = 20590f,
                        Dodge        = 0.0337780f,
                        Parry        = 0.05f,
                        PhysicalCrit = 0.027f, SpellCrit = 0.012375f,
                    };
                    pri.Mp5 = pri.Mana * 0.05f;         // Always 5% of base mana in regen.
                    S.Accumulate(race);
                    S.Accumulate(pri);
                    break;

                    #endregion
                    #region Rogue
                case CharacterClass.Rogue:
                    Stats rog = new Stats()
                    {
                        Strength     = 102, Agility = 186, Stamina = 94, Intellect = 26, Spirit = 53,
                        Health       = 40529f,
                        Dodge        = 0.03758f, Parry = 0.05f,
                        PhysicalCrit = 0.03192f, AttackPower = 613f,
                    };
                    S.Accumulate(race);
                    S.Accumulate(rog);
                    break;

                    #endregion
                    #region Shaman
                case CharacterClass.Shaman:
                    Stats sha = new Stats()
                    {
                        Strength     = 111, Agility = 60, Stamina = 128, Intellect = 119, Spirit = 136,
                        Health       = 37037f, Mana = 23430f,
                        Dodge        = 0.0193f, Parry = 0.05f, Block = 0.05f,
                        PhysicalCrit = 0.02910375f, AttackPower = 140f,
                        SpellCrit    = 0.022057f, SpellPower = -10,
                    };
                    S.Accumulate(race);
                    S.Accumulate(sha);
                    break;

                    #endregion
                    #region Warlock
                case CharacterClass.Warlock:
                    Stats warlock = new Stats()
                    {
                        Strength     = 43, Agility = 51, Stamina = 76, Intellect = 153, Spirit = 161,
                        Health       = 38184f, Mana = 20553f,
                        Dodge        = 0.0238110f, Parry = 0.05f, Block = 0.05f,
                        PhysicalCrit = 0.026219999417663f, SpellCrit = 0.017000000923872f,
                    };
                    S.Accumulate(race);
                    S.Accumulate(warlock);
                    break;

                    #endregion
                    #region Warrior
                case CharacterClass.Warrior:
                    Stats war = new Stats()
                    {
                        Strength     = 169, Agility = 103, Stamina = 153, Intellect = 17, Spirit = 44,
                        Health       = 43285f,
                        Dodge        = 0.05f, Parry = 0.05f, Block = 0.05f,
                        PhysicalCrit = 0.03192f, AttackPower = 613f,
                    };
                    S.Accumulate(race);
                    S.Accumulate(war);
                    break;

                    #endregion
                    #region No Class
                default:
                    break;
                    #endregion
                }
                #endregion

                #region Racials
                // Resistance do not stack with other buffs. Until then I'll commenting them out
                if (characterRace == CharacterRace.Gnome)  //CATA: changed from 5% int to 5% mana
                {
                    // S.ArcaneResistance += 85f;
                    S.BonusManaMultiplier = 0.05f;
                    //S.BonusIntellectMultiplier = 0.05f;
                }
                else if (characterRace == CharacterRace.Human)
                {
                    S.BonusSpiritMultiplier = 0.03f;
                    // Patch 4.0.6+ changed from a 3 minute cooldown to 2 minute cooldown
                    S.AddSpecialEffect(new SpecialEffect(Trigger.Use, new Stats()
                    {
                        PVPTrinket = 1
                    }, 0f, 120f));
                }
                else if (characterRace == CharacterRace.NightElf)
                {
                    // S.NatureResistance += 85f;
                    S.Miss += 0.02f;
                }
                else if (characterRace == CharacterRace.Dwarf)
                {
                    // S.FrostResistance += 85f;
                    // Armor +10% for 8 Sec.
                    S.AddSpecialEffect(new SpecialEffect(Trigger.Use, new Stats()
                    {
                        BaseArmorMultiplier = .1f
                    }, 8, 120));
                    // TODO: Add debuff removal.  Doesn't work on all bosses so not sure if we want to.
                }
                else if (characterRace == CharacterRace.Draenei)
                {
                    // S.ArcaneResistance += 85f;
                    S.SpellHit    += 0.01f;
                    S.PhysicalHit += 0.01f;
                    // Patch 4.0.6+ changed from a scaling Health restore to a flat 20% of max health
                    S.AddSpecialEffect(new SpecialEffect(Trigger.Use, new Stats()
                    {
                        HealthRestoreFromMaxHealth = 0.2f / 15f
                    }, 15f, 180f));
                }
                else if (characterRace == CharacterRace.Worgen)
                {
                    // S.NatureResistance = 64f;
                    // S.ShadowResistance = 64f;
                    // Patch 4.0.6+ Darkflight changed from a 3 minute CD to a 2 minute CD
                    S.AddSpecialEffect(new SpecialEffect(Trigger.Use, new Stats()
                    {
                        MovementSpeed = 0.40f
                    }, 10f, 120f));
                    S.PhysicalCrit += 0.01f;
                    S.SpellCrit    += 0.01f;
                }
                else if (characterRace == CharacterRace.Tauren)
                {
                    // S.NatureResistance = 85f;
                    S.Health = (float)Math.Floor(S.Health * 1.05f);
                }
                else if (characterRace == CharacterRace.Troll)
                {
                    S.SnareRootDurReduc = .15f;
                    if (characterClass == CharacterClass.DeathKnight || characterClass == CharacterClass.Warrior || characterClass == CharacterClass.Rogue)
                    {
                        S.AddSpecialEffect(new SpecialEffect(Trigger.Use, new Stats()
                        {
                            PhysicalHaste = 0.2f
                        }, 10f, 180f));
                    }
                    else
                    {
                        S.AddSpecialEffect(new SpecialEffect(Trigger.Use, new Stats()
                        {
                            SpellHaste = 0.2f, PhysicalHaste = 0.2f
                        }, 10f, 180f));
                    }
                }
                else if (characterRace == CharacterRace.Undead)
                {
                    S.AddSpecialEffect(new SpecialEffect(Trigger.Use, new Stats()
                    {
                        FearDurReduc = 1f
                    }, .1f, 120f));
                }
                else if (characterRace == CharacterRace.Orc)
                {
                    S.StunDurReduc = 0.15f;
                    if (characterClass == CharacterClass.Shaman)
                    {
                        S.AddSpecialEffect(new SpecialEffect(Trigger.Use, new Stats()
                        {
                            AttackPower = 65 + (level * 13), SpellPower = 75 + (level * 6)
                        }, 15f, 120f));
                    }
                    else if (characterClass == CharacterClass.Warlock || characterClass == CharacterClass.Mage)
                    {
                        S.AddSpecialEffect(new SpecialEffect(Trigger.Use, new Stats()
                        {
                            SpellPower = 75 + (level * 6)
                        }, 15f, 120f));
                    }
                    else
                    {
                        S.AddSpecialEffect(new SpecialEffect(Trigger.Use, new Stats()
                        {
                            AttackPower = 65 + (level * 13)
                        }, 15f, 120f));
                    }
                }
                else if (characterRace == CharacterRace.BloodElf)
                {
                    // S.ArcaneResistance += 85f;
                    if (characterClass == CharacterClass.DeathKnight || characterClass == CharacterClass.Rogue || characterClass == CharacterClass.Hunter)
                    {
                        S.AddSpecialEffect(new SpecialEffect(Trigger.Use, new Stats()
                        {
                            ManaorEquivRestore = .15f
                        }, 0f, 120f));
                    }
                    else if (characterClass == CharacterClass.Warrior)
                    {
                        S.AddSpecialEffect(new SpecialEffect(Trigger.Use, new Stats()
                        {
                            BonusRageGen = 15f
                        }, 0f, 120f));
                    }
                    else
                    {
                        S.AddSpecialEffect(new SpecialEffect(Trigger.Use, new Stats()
                        {
                            ManaorEquivRestore = .06f
                        }, 0f, 120f));
                    }
                }
                else if (characterRace == CharacterRace.Goblin)
                {
                    S.PhysicalHaste += 0.01f;
                    S.SpellHaste    += 0.01f;
                    // TODO: The damage of the rocket belt proc is dependent on the character's current AP and SP
                    S.AddSpecialEffect(new SpecialEffect(Trigger.Use, new Stats()
                    {
                        FireDamage = 1f + (level * 2)
                    }, 0f, 120f));
                }
                else if (characterRace == CharacterRace.PandarenAlliance || characterRace == CharacterRace.PandarenHorde)
                {
                }
                #endregion

                _lastStats = S.Clone();
                return(S);
            }
        }
Пример #2
0
        public static Stats GetBaseStats(int level, CharacterClass characterClass, CharacterRace characterRace, DruidForm characterForm)
        {   // Health, Mana and some other things are same for every race.
            lock (syncLock)
            {
                #region Cache
                if (level == _lastLevel &&
                    characterClass == _lastClass &&
                    characterRace == _lastRace &&
                    characterForm == _lastForm)
                {
                    return(_lastStats.Clone());
                }
                _lastLevel = level;
                _lastClass = characterClass;
                _lastRace  = characterRace;
                _lastForm  = characterForm;
                #endregion

                Stats S = new Stats();

                #region Base Stats
                #region All Classes
                S.Miss  = 0.05f;
                S.Block = 0.0f;
                S.Parry = 0.0f;
                #endregion
                switch (characterClass)
                {
                    #region Death Knight
                case CharacterClass.DeathKnight:
                    // Blood Elf, Draenei, Dwarf, Gnome, Human, Night Elf, Orc, Tauren, Troll, Undead
                    S.Mana         = 0;
                    S.Health       = 8121;
                    S.Armor        = 0;
                    S.AttackPower  = 220;
                    S.PhysicalCrit = 0.0319f;
                    S.Dodge        = 0.0362500f;
                    S.Parry        = 0.05f;
                    S.SpellPower   = 0;
                    S.SpellCrit    = 0.0f;
                    switch (characterRace)
                    {
                    case CharacterRace.BloodElf:
                        S.Strength  = 172;
                        S.Agility   = 114;
                        S.Stamina   = 158;
                        S.Intellect = 39;
                        S.Spirit    = 58;
                        break;

                    case CharacterRace.Draenei:
                        S.Strength  = 176;
                        S.Agility   = 109;
                        S.Stamina   = 162;
                        S.Intellect = 36;
                        S.Spirit    = 61;
                        break;

                    case CharacterRace.Dwarf:
                        S.Strength  = 177;
                        S.Agility   = 108;
                        S.Stamina   = 163;
                        S.Intellect = 34;
                        S.Spirit    = 58;
                        break;

                    case CharacterRace.Gnome:
                        S.Strength  = 170;
                        S.Agility   = 115;
                        S.Stamina   = 159;
                        S.Intellect = 37;           // 39/1.05 = 37.14 ~37
                        S.Spirit    = 59;
                        break;

                    case CharacterRace.Human:
                        S.Strength  = 175;
                        S.Agility   = 112;
                        S.Stamina   = 160;
                        S.Intellect = 35;
                        S.Spirit    = 58;       // 60/1.03 = 58.25 ~58.
                        break;

                    case CharacterRace.NightElf:
                        S.Strength  = 172;
                        S.Agility   = 117;
                        S.Stamina   = 159;
                        S.Intellect = 35;
                        S.Spirit    = 59;
                        break;

                    case CharacterRace.Orc:
                        S.Strength  = 178;
                        S.Agility   = 109;
                        S.Stamina   = 162;
                        S.Intellect = 32;
                        S.Spirit    = 62;
                        break;

                    case CharacterRace.Tauren:
                        S.Strength  = 180;
                        S.Agility   = 107;
                        S.Stamina   = 162;
                        S.Intellect = 30;
                        S.Spirit    = 61;
                        break;

                    case CharacterRace.Troll:
                        S.Strength  = 176;
                        S.Agility   = 114;
                        S.Stamina   = 165;
                        S.Intellect = 31;
                        S.Spirit    = 60;
                        break;

                    case CharacterRace.Undead:
                        S.Strength  = 174;
                        S.Agility   = 110;
                        S.Stamina   = 161;
                        S.Intellect = 33;
                        S.Spirit    = 64;
                        break;

                    default:
                        break;
                    }
                    break;

                    #endregion
                    #region Druid
                case CharacterClass.Druid:
                    // NightElf, Tauren
                    S.Mana       = 3496;
                    S.Health     = 7417;
                    S.Armor      = 0;
                    S.SpellPower = 0;
                    S.SpellCrit  = 0.0185f;
                    switch (characterForm)
                    {
                    case DruidForm.Moonkin:
                    case DruidForm.Caster:
                        S.AttackPower  = -10;
                        S.PhysicalCrit = 0.0743f;
                        S.Dodge        = 0.0556970f;  //??
                        break;

                    case DruidForm.Bear:
                        S.AttackPower            = 220;
                        S.PhysicalCrit           = 0.05f;
                        S.Dodge                  = 0.0556970f;
                        S.BonusStaminaMultiplier = 0.25f;
                        break;

                    case DruidForm.Cat:
                        S.AttackPower  = 140;
                        S.PhysicalCrit = 0.07476f;
                        S.Dodge        = 0.0556970f;
                        break;

                    default:
                        break;
                    }
                    if (characterRace == CharacterRace.NightElf)
                    {
                        S.Strength  = 85;
                        S.Agility   = 86;
                        S.Stamina   = 97;
                        S.Intellect = 143;
                        S.Spirit    = 159;
                    }
                    else if (characterRace == CharacterRace.Tauren)
                    {
                        S.Strength  = 94;
                        S.Agility   = 77;
                        S.Stamina   = 100;
                        S.Intellect = 140;
                        S.Spirit    = 185;
                    }
                    break;

                    #endregion
                    #region Hunter
                case CharacterClass.Hunter:
                    // Blood Elf, Draenei, Dwarf, Night Elf, Orc, Tauren, Troll

                    S.Mana              = 5046;
                    S.Armor             = 0;
                    S.AttackPower       = 140;
                    S.RangedAttackPower = 150;
                    S.PhysicalCrit      = -0.0153f;
                    S.Dodge             = -0.0412730f;
                    S.Parry             = 0.05f;
                    S.SpellPower        = 0;
                    S.SpellCrit         = 0.0360f;
                    switch (characterRace)
                    {
                    case CharacterRace.BloodElf:
                        S.Strength  = 71;
                        S.Agility   = 183;
                        S.Stamina   = 126;
                        S.Intellect = 94;
                        S.Spirit    = 96;
                        S.Health    = 7324;
                        break;

                    case CharacterRace.Draenei:
                        S.Strength  = 75;
                        S.Agility   = 178;
                        S.Stamina   = 129;
                        S.Intellect = 91;
                        S.Spirit    = 99;
                        S.Health    = 7400;
                        break;

                    case CharacterRace.Dwarf:
                        S.Strength  = 76;
                        S.Agility   = 177;
                        S.Stamina   = 131;
                        S.Intellect = 89;
                        S.Spirit    = 96;
                        S.Health    = 7412;
                        break;

                    case CharacterRace.NightElf:
                        S.Strength  = 71;
                        S.Agility   = 184;
                        S.Stamina   = 127;
                        S.Intellect = 90;
                        S.Spirit    = 97;
                        S.Health    = 7324;
                        break;

                    case CharacterRace.Orc:
                        S.Strength  = 77;
                        S.Agility   = 178;
                        S.Stamina   = 130;
                        S.Intellect = 87;
                        S.Spirit    = 100;
                        S.Health    = 7324;
                        break;

                    case CharacterRace.Tauren:
                        S.Strength  = 79;
                        S.Agility   = 176;
                        S.Stamina   = 130;
                        S.Intellect = 85;
                        S.Spirit    = 99;
                        S.Health    = 7400;
                        break;

                    case CharacterRace.Troll:
                        S.Strength  = 75;
                        S.Agility   = 183;
                        S.Stamina   = 129;
                        S.Intellect = 86;
                        S.Spirit    = 98;
                        S.Health    = 7324;
                        break;

                    default:
                        break;
                    }
                    break;

                    #endregion
                    #region Mage
                case CharacterClass.Mage:
                    // Blood Elf, Draenei, Gnome, Human, Troll, Undead
                    S.Mana         = 3268;
                    S.Health       = 6963;
                    S.Armor        = 0;
                    S.AttackPower  = -10;
                    S.PhysicalCrit = 0.03f;
                    S.Dodge        = 0.0361870f;
                    S.SpellPower   = 0;
                    S.SpellCrit    = 0.0091f;
                    switch (characterRace)
                    {
                    case CharacterRace.BloodElf:
                        S.Strength  = 33;
                        S.Agility   = 45;
                        S.Stamina   = 57;
                        S.Intellect = 185;
                        S.Spirit    = 173;
                        break;

                    case CharacterRace.Draenei:
                        S.Strength  = 37;
                        S.Agility   = 40;
                        S.Stamina   = 58;
                        S.Intellect = 182;
                        S.Spirit    = 176;
                        break;

                    case CharacterRace.Gnome:
                        S.Strength  = 31;
                        S.Agility   = 46;
                        S.Stamina   = 58;
                        S.Intellect = 184;         // 193/1.05 = 183.8 ~184.
                        S.Spirit    = 174;
                        break;

                    case CharacterRace.Human:
                        S.Strength  = 36;
                        S.Agility   = 43;
                        S.Stamina   = 59;
                        S.Intellect = 181;
                        S.Spirit    = 174;      // 179/1.03 = 173.8 ~174
                        break;

                    case CharacterRace.Troll:
                        S.Strength  = 37;
                        S.Agility   = 45;
                        S.Stamina   = 60;
                        S.Intellect = 177;
                        S.Spirit    = 175;
                        break;

                    case CharacterRace.Undead:
                        S.Strength  = 35;
                        S.Agility   = 41;
                        S.Stamina   = 60;
                        S.Intellect = 179;
                        S.Spirit    = 179;
                        break;

                    default:
                        break;
                    }
                    break;

                    #endregion
                    #region Paladin
                case CharacterClass.Paladin:
                    // Blood Elf, Draenei, Dwarf, Human
                    S.Mana         = 4394;
                    S.Health       = 6934;
                    S.Armor        = 0;
                    S.AttackPower  = 240;
                    S.PhysicalCrit = 0.0327f;
                    S.SpellPower   = 0;
                    S.SpellCrit    = 0.03336f;
                    S.Dodge        = 0.0349430f;
                    S.Parry        = 0.05f;
                    S.Block        = 0.05f;
                    S.Defense      = 400.0f;
                    switch (characterRace)
                    {
                    case CharacterRace.BloodElf:
                        S.Strength  = 148;
                        S.Agility   = 92;
                        S.Stamina   = 143;
                        S.Intellect = 101;
                        S.Spirit    = 103;
                        break;

                    case CharacterRace.Draenei:
                        S.Strength  = 152;
                        S.Agility   = 87;
                        S.Stamina   = 143;
                        S.Intellect = 98;
                        S.Spirit    = 107;
                        break;

                    case CharacterRace.Dwarf:
                        S.Strength  = 153;
                        S.Agility   = 86;
                        S.Stamina   = 146;
                        S.Intellect = 97;
                        S.Spirit    = 104;
                        break;

                    case CharacterRace.Human:
                        S.Strength  = 151;
                        S.Agility   = 90;
                        S.Stamina   = 143;
                        S.Intellect = 98;
                        S.Spirit    = 108;
                        break;

                    default:
                        break;
                    }
                    break;

                    #endregion
                    #region Priest
                case CharacterClass.Priest:
                    // Blood Elf, Draenei, Dwarf, Human, Night Elf, Troll, Undead
                    S.Mana         = 3863;
                    S.Health       = 6960;
                    S.Armor        = 0;
                    S.AttackPower  = -10;
                    S.PhysicalCrit = 0.027f;
                    S.Dodge        = 0.0337780f;
                    S.SpellPower   = 0;
                    S.SpellCrit    = 0.0124f;
                    switch (characterRace)
                    {
                    case CharacterRace.BloodElf:
                        S.Strength  = 40;
                        S.Agility   = 53;
                        S.Stamina   = 65;
                        S.Intellect = 178;
                        S.Spirit    = 180;
                        break;

                    case CharacterRace.Draenei:
                        S.Strength  = 44;
                        S.Agility   = 48;
                        S.Stamina   = 66;
                        S.Intellect = 175;
                        S.Spirit    = 183;
                        break;

                    case CharacterRace.Dwarf:
                        S.Strength  = 45;
                        S.Agility   = 47;
                        S.Stamina   = 70;
                        S.Intellect = 176;
                        S.Spirit    = 180;
                        break;

                    case CharacterRace.Human:
                        S.Strength  = 43;
                        S.Agility   = 51;
                        S.Stamina   = 67;
                        S.Intellect = 174;
                        S.Spirit    = 181;          // 186/1.03 = 180.5->181
                        break;

                    case CharacterRace.NightElf:
                        S.Strength  = 40;
                        S.Agility   = 56;
                        S.Stamina   = 66;
                        S.Intellect = 174;
                        S.Spirit    = 181;
                        break;

                    case CharacterRace.Troll:
                        S.Strength  = 44;
                        S.Agility   = 53;
                        S.Stamina   = 68;
                        S.Intellect = 170;
                        S.Spirit    = 182;
                        break;

                    case CharacterRace.Undead:
                        S.Strength  = 42;
                        S.Agility   = 49;
                        S.Stamina   = 68;
                        S.Intellect = 172;
                        S.Spirit    = 186;
                        break;

                    default:
                        break;
                    }
                    break;

                    #endregion
                    #region Rogue
                case CharacterClass.Rogue:
                    // Blood Elf, Dwarf, Gnome, Human, Night Elf, Orc, Troll, Undead
                    S.Mana         = 0;
                    S.Health       = 7604;
                    S.Armor        = 0;
                    S.AttackPower  = 140;
                    S.PhysicalCrit = -0.00295f;
                    S.Dodge        = 0.0205570f;
                    S.Parry        = 0.05f;
                    S.SpellPower   = 0;
                    S.SpellCrit    = 0f;
                    switch (characterRace)
                    {
                    case CharacterRace.BloodElf:
                        S.Strength  = 110;
                        S.Agility   = 191;
                        S.Stamina   = 103;
                        S.Intellect = 47;
                        S.Spirit    = 66;
                        break;

                    case CharacterRace.Dwarf:
                        S.Strength  = 115;
                        S.Agility   = 185;
                        S.Stamina   = 108;
                        S.Intellect = 42;
                        S.Spirit    = 66;
                        break;

                    case CharacterRace.Gnome:
                        S.Strength  = 108;
                        S.Agility   = 192;
                        S.Stamina   = 104;
                        S.Intellect = 46;           // 48/1.05 = 45.71 ~46
                        S.Spirit    = 67;
                        break;

                    case CharacterRace.Human:
                        S.Strength  = 113;
                        S.Agility   = 189;
                        S.Stamina   = 105;
                        S.Intellect = 43;
                        S.Spirit    = 67;       // 69/1.03 = 66.99 ~67
                        break;

                    case CharacterRace.NightElf:
                        S.Strength  = 110;
                        S.Agility   = 194;
                        S.Stamina   = 104;
                        S.Intellect = 43;
                        S.Spirit    = 67;
                        break;

                    case CharacterRace.Orc:
                        S.Strength  = 116;
                        S.Agility   = 186;
                        S.Stamina   = 107;
                        S.Intellect = 40;
                        S.Spirit    = 70;
                        break;

                    case CharacterRace.Troll:
                        S.Strength  = 114;
                        S.Agility   = 191;
                        S.Stamina   = 108;
                        S.Intellect = 39;
                        S.Spirit    = 68;
                        break;

                    case CharacterRace.Undead:
                        S.Strength  = 112;
                        S.Agility   = 187;
                        S.Stamina   = 105;
                        S.Intellect = 41;
                        S.Spirit    = 72;
                        break;

                    default:
                        break;
                    }
                    break;

                    #endregion
                    #region Shaman
                case CharacterClass.Shaman:
                    // Draenei, Orc, Tauren, Troll
                    S.Mana         = 4396;
                    S.Health       = 6960;
                    S.Armor        = 0;
                    S.AttackPower  = 140;
                    S.PhysicalCrit = 0.0292f;
                    S.Dodge        = 0.0206800f;
                    S.Block        = 0.05f;
                    S.SpellPower   = 0;
                    S.SpellCrit    = 0.022f;
                    switch (characterRace)
                    {
                    case CharacterRace.Draenei:
                        S.Strength  = 121;
                        S.Agility   = 71;
                        S.Stamina   = 136;
                        S.Intellect = 128;
                        S.Spirit    = 145;
                        break;

                    case CharacterRace.Orc:
                        S.Strength  = 123;
                        S.Agility   = 71;
                        S.Stamina   = 137;
                        S.Intellect = 125;
                        S.Spirit    = 145;
                        break;

                    case CharacterRace.Tauren:
                        S.Strength  = 125;
                        S.Agility   = 70;
                        S.Stamina   = 137;
                        S.Intellect = 124;
                        S.Spirit    = 145;
                        break;

                    case CharacterRace.Troll:
                        S.Strength  = 121;
                        S.Agility   = 76;
                        S.Stamina   = 137;
                        S.Intellect = 124;
                        S.Spirit    = 144;
                        break;

                    default:
                        break;
                    }
                    break;

                    #endregion
                    #region Warlock
                case CharacterClass.Warlock:
                    // Blood Elf, Gnome, Human, Orc, Undead
                    S.Mana         = 3856;
                    S.Health       = 7164;
                    S.Armor        = 0;
                    S.AttackPower  = -10;
                    S.PhysicalCrit = 0.028f;
                    S.Dodge        = 0.0238110f;
                    S.SpellPower   = 0;
                    S.SpellCrit    = 0.01701f;
                    switch (characterRace)
                    {
                    case CharacterRace.BloodElf:
                        S.Strength  = 56;
                        S.Agility   = 69;
                        S.Stamina   = 87;
                        S.Intellect = 163;
                        S.Spirit    = 165;
                        break;

                    case CharacterRace.Gnome:
                        S.Strength  = 54;
                        S.Agility   = 70;
                        S.Stamina   = 88;
                        S.Intellect = 162;          // 170/1.05 = 161.9 ~162
                        S.Spirit    = 166;
                        break;

                    case CharacterRace.Human:
                        S.Strength  = 59;
                        S.Agility   = 67;
                        S.Stamina   = 89;
                        S.Intellect = 159;
                        S.Spirit    = 165;      // 170/1.03 = 165.05 ~165
                        break;

                    case CharacterRace.Orc:
                        S.Strength  = 62;
                        S.Agility   = 64;
                        S.Stamina   = 91;
                        S.Intellect = 156;
                        S.Spirit    = 169;
                        break;

                    case CharacterRace.Undead:
                        S.Strength  = 58;
                        S.Agility   = 65;
                        S.Stamina   = 90;
                        S.Intellect = 157;
                        S.Spirit    = 171;
                        break;

                    default:
                        break;
                    }
                    break;

                    #endregion
                    #region Warrior
                case CharacterClass.Warrior:
                    // Draenei, Dwarf, Gnome, Human, Night Elf, Orc, Tauren, Troll, Undead
                    S.Mana         = 0f;
                    S.Health       = 8121f;
                    S.Armor        = 0f;
                    S.AttackPower  = 220f;
                    S.PhysicalCrit = 0.03192f;     // This + the base agi makes 4.88%
                    S.Dodge        = 0.03664f;
                    S.Parry        = 0.05f;
                    S.Block        = 0.05f;
                    S.SpellPower   = 0f;
                    S.SpellCrit    = 0.0f;
                    S.Defense      = 400.0f;
                    switch (characterRace)
                    {
                    case CharacterRace.Draenei:
                        S.Strength  = 182;
                        S.Agility   = 110;
                        S.Stamina   = 166;
                        S.Intellect = 37;
                        S.Spirit    = 61;
                        break;

                    case CharacterRace.Dwarf:
                        S.Strength  = 176;
                        S.Agility   = 109;
                        S.Stamina   = 162;
                        S.Intellect = 35;
                        S.Spirit    = 58;
                        break;

                    case CharacterRace.Gnome:
                        S.Strength  = 169;
                        S.Agility   = 116;
                        S.Stamina   = 158;
                        S.Intellect = 38;           // 40/1.05 = 38.095 ~38.
                        S.Spirit    = 59;
                        break;

                    case CharacterRace.Human:
                        S.Strength  = 174f;
                        S.Agility   = 113f;
                        S.Stamina   = 159f;
                        S.Intellect = 36f;
                        S.Spirit    = 58f;       // 60/1.03 = 58.25 ~58
                        break;

                    case CharacterRace.NightElf:
                        S.Strength  = 171;
                        S.Agility   = 118;
                        S.Stamina   = 158;
                        S.Intellect = 36;
                        S.Spirit    = 59;
                        break;

                    case CharacterRace.Orc:
                        S.Strength  = 177;
                        S.Agility   = 110;
                        S.Stamina   = 161;
                        S.Intellect = 33;
                        S.Spirit    = 62;
                        break;

                    case CharacterRace.Tauren:
                        S.Strength  = 179;
                        S.Agility   = 109;
                        S.Stamina   = 161;
                        S.Intellect = 31;
                        S.Spirit    = 61;
                        break;

                    case CharacterRace.Troll:
                        S.Strength  = 185;
                        S.Agility   = 115;
                        S.Stamina   = 162;
                        S.Intellect = 32;
                        S.Spirit    = 60;
                        break;

                    case CharacterRace.Undead:
                        S.Strength  = 183;
                        S.Agility   = 111;
                        S.Stamina   = 169;
                        S.Intellect = 34;
                        S.Spirit    = 64;
                        break;

                    default:
                        break;
                    }
                    break;

                    #endregion
                    #region No Class
                default:
                    break;
                    #endregion
                }
                #endregion

                #region Racials
                if (characterRace == CharacterRace.Gnome)
                {
                    S.BonusIntellectMultiplier = 0.05f;
                }
                else if (characterRace == CharacterRace.Human)
                {
                    S.BonusSpiritMultiplier = 0.03f;
                }
                else if (characterRace == CharacterRace.NightElf)
                {
                    S.Miss += 0.02f;
                }
                else if (characterRace == CharacterRace.Tauren)
                {
                    S.Health = S.Health * 1.05f;
                }
                else if (characterRace == CharacterRace.Troll)
                {
                    if (characterClass == CharacterClass.DeathKnight || characterClass == CharacterClass.Warrior || characterClass == CharacterClass.Rogue)
                    {
                        S.AddSpecialEffect(new SpecialEffect(Trigger.Use, new Stats()
                        {
                            PhysicalHaste = 0.2f
                        }, 10f, 180f));
                    }
                    else
                    {
                        S.AddSpecialEffect(new SpecialEffect(Trigger.Use, new Stats()
                        {
                            SpellHaste = 0.2f, PhysicalHaste = 0.2f
                        }, 10f, 180f));
                    }
                }
                else if (characterRace == CharacterRace.Orc)
                {
                    if (characterClass == CharacterClass.Shaman)
                    {
                        S.AddSpecialEffect(new SpecialEffect(Trigger.Use, new Stats()
                        {
                            AttackPower = 2 + (level * 4), SpellPower = 3 + (level * 2)
                        }, 15f, 120f));
                    }
                    else if (characterClass == CharacterClass.Warlock)
                    {
                        S.AddSpecialEffect(new SpecialEffect(Trigger.Use, new Stats()
                        {
                            SpellPower = 3 + (level * 2)
                        }, 15f, 120f));
                    }
                    else
                    {
                        S.AddSpecialEffect(new SpecialEffect(Trigger.Use, new Stats()
                        {
                            AttackPower = 2 + (level * 4)
                        }, 15f, 120f));
                    }
                }
                #endregion

                _lastStats = S.Clone();
                return(S);
            }
        }
Пример #3
0
        public static Stats GetBaseStats(int level, CharacterClass characterClass, CharacterRace characterRace, DruidForm characterForm)
        {   // Health, Mana and some other things are same for every race.
            lock (syncLock)
            {
                #region Cache
                if (level == _lastLevel
                    && characterClass == _lastClass
                    && characterRace == _lastRace
                    && characterForm == _lastForm)
                    return _lastStats.Clone();
                _lastLevel = level;
                _lastClass = characterClass;
                _lastRace = characterRace;
                _lastForm = characterForm;
                #endregion

                Stats S = new Stats();
                #region Race, not class benefit
                // Most Level 85 Race and Class Stats come from:
                // http://code.google.com/p/simulationcraft/source/browse/branches/cataclysm/engine/sc_rating.cpp?r=6207
                // When they were still at 80 as of Jan 01st, 2011

                // From SimCraft
                Stats race = new Stats();
                switch (characterRace)
                {
                    // Alliance
                    case CharacterRace.Human:    race.Strength = 20; race.Agility = 20; race.Stamina = 20; race.Intellect = 20; race.Spirit = 20; break;
                    case CharacterRace.Dwarf:    race.Strength = 25; race.Agility = 16; race.Stamina = 21; race.Intellect = 19; race.Spirit = 19; break;
                    case CharacterRace.NightElf: race.Strength = 16; race.Agility = 24; race.Stamina = 20; race.Intellect = 20; race.Spirit = 20; break;
                    case CharacterRace.Gnome:    race.Strength = 15; race.Agility = 22; race.Stamina = 20; race.Intellect = 24; race.Spirit = 20; break;
                    case CharacterRace.Draenei:  race.Strength = 21; race.Agility = 17; race.Stamina = 20; race.Intellect = 20; race.Spirit = 22; break;
                    case CharacterRace.Worgen:   race.Strength = 23; race.Agility = 22; race.Stamina = 20; race.Intellect = 16; race.Spirit = 19; break;
                    // Horde
                    case CharacterRace.Orc:      race.Strength = 23; race.Agility = 17; race.Stamina = 21; race.Intellect = 17; race.Spirit = 22; break;
                    case CharacterRace.Undead:   race.Strength = 19; race.Agility = 18; race.Stamina = 20; race.Intellect = 18; race.Spirit = 25; break;
                    case CharacterRace.Tauren:   race.Strength = 25; race.Agility = 16; race.Stamina = 21; race.Intellect = 16; race.Spirit = 22; break;
                    case CharacterRace.Troll:    race.Strength = 21; race.Agility = 22; race.Stamina = 20; race.Intellect = 16; race.Spirit = 21; break;
                    case CharacterRace.BloodElf: race.Strength = 17; race.Agility = 22; race.Stamina = 20; race.Intellect = 23; race.Spirit = 18; break;
                    case CharacterRace.Goblin:   race.Strength = 17; race.Agility = 22; race.Stamina = 20; race.Intellect = 23; race.Spirit = 20; break;
                    default: { break; }
                };
                // From Chardev (85)
                //Class           Str Agi Sta Int Spi
                //Druid            76  69  86 136 153
                //Shaman          111  60 128 119 136
                //Death Knight    171 101 154  16  44
                //Hunter           60 178 119  77  88
                //Mage             17  26  43 187 175
                //Paladin         144  77 136  86  97
                //Priest           26  34  51 188 183
                //Rogue           102 186  94  26  53
                //Warlock          43  51  76 161 166
                //Warrior         169 103 153  17  44
                #endregion

                #region Base Stats
                #region All Classes
                S.Miss  = 0.05f;
                S.Block = 0.00f;
                S.Parry = 0.00f;
                #endregion
                switch (characterClass)
                {
                    #region Death Knight
                    case CharacterClass.DeathKnight:
                        Stats dk = new Stats() {
                            Strength = 171, Agility = 101, Stamina = 274, Intellect = 16, Spirit = 44,
                            Health = 43025f,
                            Dodge = 0.05f, Parry = 0.05f, Block = 0.00f,
                            PhysicalCrit = 0.0049f, AttackPower = 595f,
                        };
                        S.Accumulate(race);
                        S.Accumulate(dk);
                        break;
                    #endregion
                    #region Druid
                    case CharacterClass.Druid:
                        Stats druid = new Stats() {
                            Strength = 76, Agility = 69, Stamina = 86, Intellect = 136, Spirit = 153,
                            Health = 39533f, Mana = 18635f,
                            Dodge = 0.03758f, Parry = 0.05f, Block = 0.05f,
                            PhysicalCrit = 0.03192f, AttackPower = 613f,
                            SpellCrit = 0.0185f, Mp5 = 931f,
                        };
                        S.Accumulate(race);
                        S.Accumulate(druid);
                        switch (characterForm)
                        {
                            case DruidForm.Moonkin:
                            case DruidForm.Caster:
                                S.AttackPower = -10;
                                S.PhysicalCrit = 0.0743f;
                                S.Dodge = 0.0556970f; //??
                                break;
                            case DruidForm.Bear:
                                S.AttackPower = 255;
                                S.PhysicalCrit = 0.074755f;
                                S.Dodge = 0.0556970f;
                                S.BonusStaminaMultiplier = 0.2f;
                                break;
                            case DruidForm.Cat:
                                S.AttackPower = 235;
                                S.PhysicalCrit = 0.074755f;
                                S.Dodge = 0.0556970f;
                                break;
                            default:
                                break;
                        }
                        break;
                    #endregion
                    #region Hunter
                    case CharacterClass.Hunter:
                        Stats hun = new Stats() {
                            // Stats updated 8/19/2011 4.2 w/ Troll Hunter: Tsevon @ US-Dragonmaw w/ no spec.
                            Strength = 60,
                            Agility = 178,
                            Stamina = 119,
                            Intellect = 77,
                            Spirit = 88,
                            Health = 39037,
                            Dodge = 0.03758f, Parry = 0.05f, 
                            // This assumes ALL AP from full AP += AGI * 2
                            // So naked Hunter has 31 AP un accounted for.
                            // Naked troll, no gear, no spec, LW & Skinning.
                            PhysicalCrit = 0, AttackPower = 31f, RangedAttackPower = 31f,
                        };
                        S.Accumulate(race);
                        S.Accumulate(hun);
                        break;
                    #endregion
                    #region Mage
                    case CharacterClass.Mage:
                        Stats mag = new Stats() {
                            Strength = 17, Agility = 26, Stamina = 43, Intellect = 187, Spirit = 175,
                            Health = 36853f, Mana = 17138f,
                            Dodge = 0.03758f, Parry = 0.05f,
                        };
                        S.Accumulate(race);
                        S.Accumulate(mag);
                        break;
                    #endregion
                    #region Paladin
                    case CharacterClass.Paladin:
                        Stats pal = new Stats() {
                            Strength = 144, Agility = 77, Stamina = 136, Intellect = 86, Spirit = 97,
                            Health = 43285f, Mana = 23422,
                            Dodge = 0.05f, Parry = 0.05f, Block = 0.05f,
                            PhysicalCrit = 0.00652f, AttackPower = 235f,
                            SpellCrit = 0.033355f,
                        };
                        S.Accumulate(race);
                        S.Accumulate(pal);
                        break;
                    #endregion
                    #region Priest
                    case CharacterClass.Priest:
                        // added adjustments to the base race here because the math using the previous stats
                        // just don't work for the in game calculations on priest tests. 
                        // also unsure how these changes would effect other modules if moved up.
                        // adding or subracting from the priest stats don't work and throws all other class
                        // calculations off. 
                        switch (characterRace)
                        {
                            case CharacterRace.Human: race.Spirit = 19; break;
                            case CharacterRace.Gnome: race.Intellect = 23; break;
                            case CharacterRace.Goblin: race.Spirit = 18; break;
                        }
                        Stats pri = new Stats() {
                            Strength = 26, Agility = 34, Stamina = 51, Intellect = 169, Spirit = 178,
                            Health = 43285f, Mana = 20590f,
                            Dodge = 0.0337780f,
                            Parry = 0.05f,
                            PhysicalCrit = 0.027f, SpellCrit = 0.012375f,
                        };
                        pri.Mp5 = pri.Mana * 0.05f;     // Always 5% of base mana in regen.
                        S.Accumulate(race);
                        S.Accumulate(pri);
                        break;
                    #endregion
                    #region Rogue
                    case CharacterClass.Rogue:
                        Stats rog = new Stats() {
                            Strength = 102, Agility = 186, Stamina = 94, Intellect = 26, Spirit = 53,
                            Health = 40529f,
                            Dodge = 0.03758f, Parry = 0.05f,
                            PhysicalCrit = 0.03192f, AttackPower = 613f,
                        };
                        S.Accumulate(race);
                        S.Accumulate(rog);
                        break;
                    #endregion
                    #region Shaman
                    case CharacterClass.Shaman:
                        Stats sha = new Stats() {
                            Strength = 111, Agility = 60, Stamina = 128, Intellect = 119, Spirit = 136,
                            Health = 37037f, Mana = 23430f,
                            Dodge = 0.0193f, Parry = 0.05f, Block = 0.05f,
                            PhysicalCrit = 0.02910375f, AttackPower = 140f,
                            SpellCrit = 0.022057f, SpellPower = -10,
                        };
                        S.Accumulate(race);
                        S.Accumulate(sha);
                        break;
                    #endregion
                    #region Warlock
                    case CharacterClass.Warlock:
                        Stats warlock = new Stats() { Strength = 43, Agility = 51, Stamina = 76, Intellect = 153, Spirit = 161,
                            Health = 38184f, Mana = 20553f,
                            Dodge = 0.0238110f, Parry = 0.05f, Block = 0.05f,
                            PhysicalCrit = 0.026219999417663f, SpellCrit = 0.017000000923872f,
                        };
                        S.Accumulate(race);
                        S.Accumulate(warlock);
                        break;
                    #endregion
                    #region Warrior
                    case CharacterClass.Warrior:
                        Stats war = new Stats() {
                            Strength = 169, Agility = 103, Stamina = 153, Intellect = 17, Spirit = 44,
                            Health = 43285f,
                            Dodge = 0.05f, Parry = 0.05f, Block = 0.05f,
                            PhysicalCrit = 0.03192f, AttackPower = 613f,
                        };
                        S.Accumulate(race);
                        S.Accumulate(war);
                        break;
                    #endregion
                    #region No Class
                    default:
                        break;
                    #endregion
                }
                #endregion

                #region Racials
                // Resistance do not stack with other buffs. Until then I'll commenting them out
                if (characterRace == CharacterRace.Gnome)  //CATA: changed from 5% int to 5% mana
                {
                    // S.ArcaneResistance += 85f;
                    S.BonusManaMultiplier = 0.05f;
                    //S.BonusIntellectMultiplier = 0.05f;
                }
                else if (characterRace == CharacterRace.Human)
                {
                    S.BonusSpiritMultiplier = 0.03f;
                    // Patch 4.0.6+ changed from a 3 minute cooldown to 2 minute cooldown
                    S.AddSpecialEffect(new SpecialEffect(Trigger.Use, new Stats() { PVPTrinket = 1 }, 0f, 120f));
                }
                else if (characterRace == CharacterRace.NightElf)
                {
                    // S.NatureResistance += 85f;
                    S.Miss += 0.02f;
                }
                else if (characterRace == CharacterRace.Dwarf)
                {
                    // S.FrostResistance += 85f;
                    // Armor +10% for 8 Sec.
                    S.AddSpecialEffect(new SpecialEffect(Trigger.Use, new Stats() { BaseArmorMultiplier = .1f }, 8, 120));
                    // TODO: Add debuff removal.  Doesn't work on all bosses so not sure if we want to.

                }
                else if (characterRace == CharacterRace.Draenei)
                {
                    // S.ArcaneResistance += 85f;
                    S.SpellHit += 0.01f;
                    S.PhysicalHit += 0.01f;
                    // Patch 4.0.6+ changed from a scaling Health restore to a flat 20% of max health
                    S.AddSpecialEffect(new SpecialEffect(Trigger.Use, new Stats() { HealthRestoreFromMaxHealth = 0.2f / 15f }, 15f, 180f));
                }
                else if (characterRace == CharacterRace.Worgen)
                {
                    // S.NatureResistance = 64f;
                    // S.ShadowResistance = 64f;
                    // Patch 4.0.6+ Darkflight changed from a 3 minute CD to a 2 minute CD
                    S.AddSpecialEffect(new SpecialEffect(Trigger.Use, new Stats() { MovementSpeed = 0.40f }, 10f, 120f));
                    S.PhysicalCrit += 0.01f;
                    S.SpellCrit += 0.01f;
                }
                else if (characterRace == CharacterRace.Tauren)
                {
                    // S.NatureResistance = 85f;
                    S.Health = (float)Math.Floor(S.Health * 1.05f);
                }
                else if (characterRace == CharacterRace.Troll)
                {
                    S.SnareRootDurReduc = .15f;
                    if (characterClass == CharacterClass.DeathKnight || characterClass == CharacterClass.Warrior || characterClass == CharacterClass.Rogue)
                        S.AddSpecialEffect(new SpecialEffect(Trigger.Use, new Stats() { PhysicalHaste = 0.2f }, 10f, 180f));
                    else
                        S.AddSpecialEffect(new SpecialEffect(Trigger.Use, new Stats() { SpellHaste = 0.2f, PhysicalHaste = 0.2f }, 10f, 180f));
                }
                else if (characterRace == CharacterRace.Undead)
                {
                    S.AddSpecialEffect(new SpecialEffect(Trigger.Use, new Stats() { FearDurReduc = 1f }, .1f, 120f));
                }
                else if (characterRace == CharacterRace.Orc)
                {
                    S.StunDurReduc = 0.15f;
                    if (characterClass == CharacterClass.Shaman)
                        S.AddSpecialEffect(new SpecialEffect(Trigger.Use, new Stats() { AttackPower = 65 + (level * 13), SpellPower = 75 + (level * 6) }, 15f, 120f));
                    else if (characterClass == CharacterClass.Warlock || characterClass == CharacterClass.Mage)
                        S.AddSpecialEffect(new SpecialEffect(Trigger.Use, new Stats() { SpellPower = 75 + (level * 6) }, 15f, 120f));
                    else
                        S.AddSpecialEffect(new SpecialEffect(Trigger.Use, new Stats() { AttackPower = 65 + (level * 13) }, 15f, 120f));
                }
                else if (characterRace == CharacterRace.BloodElf)
                {
                    // S.ArcaneResistance += 85f;
                    if (characterClass == CharacterClass.DeathKnight || characterClass == CharacterClass.Rogue || characterClass == CharacterClass.Hunter)
                        S.AddSpecialEffect(new SpecialEffect(Trigger.Use, new Stats() { ManaorEquivRestore = .15f }, 0f, 120f));
                    else if (characterClass == CharacterClass.Warrior)
                        S.AddSpecialEffect(new SpecialEffect(Trigger.Use, new Stats() { BonusRageGen = 15f }, 0f, 120f));
                    else
                        S.AddSpecialEffect(new SpecialEffect(Trigger.Use, new Stats() { ManaorEquivRestore = .06f }, 0f, 120f));
                }
                else if (characterRace == CharacterRace.Goblin)
                {
                    S.PhysicalHaste += 0.01f;
                    S.SpellHaste += 0.01f;
                    // TODO: The damage of the rocket belt proc is dependent on the character's current AP and SP
                    S.AddSpecialEffect(new SpecialEffect(Trigger.Use, new Stats() { FireDamage = 1f + (level * 2) }, 0f, 120f));
                }
                else if (characterRace == CharacterRace.PandarenAlliance || characterRace == CharacterRace.PandarenHorde)
                {

                }
                #endregion

                _lastStats = S.Clone();
                return S;
            }
        }