Пример #1
0
        public CombatTable2(Character c, Stats stats, CharacterCalculationsTankDK calcs, CalculationOptionsTankDK calcOpts)
        {
            if (calcOpts.bExperimental)
            {
                this.m_CState = new CombatState();
                if (c != null)
                {
                    if (c.DeathKnightTalents == null)
                    {
                        c.DeathKnightTalents = new DeathKnightTalents();
                    }
                    this.m_CState.m_Talents = (DeathKnightTalents)c.DeathKnightTalents.Clone();
                }
                this.m_CState.m_Stats = stats.Clone();
                m_Calcs = calcs;
                m_Opts  = calcOpts;
                this.m_CState.m_NumberOfTargets = (float)m_Opts.uNumberTargets;
                m_Rotation = calcOpts.m_Rotation;

                //TODO: Handle Expertise
                if (c.MainHand != null && c.MainHand.Item.Type != ItemType.None)
                {
                    m_CState.MH = new Weapon(c.MainHand.Item, m_CState.m_Stats, m_Opts, 0);
                    m_CState.OH = null;
                    if (c.MainHand.Slot != ItemSlot.TwoHand)
                    {
                        if (c.OffHand != null && c.OffHand.Item.Type != ItemType.None)
                        {
                            m_CState.OH = new Weapon(c.OffHand.Item, this.m_CState.m_Stats, m_Opts, 0);
                        }
                    }
                }
                else
                {
                    m_CState.MH = null;
                    m_CState.OH = null;
                }

                // Checking the rotation:
                if (m_Rotation.IcyTouch == 0 &&
                    m_Rotation.PlagueStrike == 0 &&
                    m_Rotation.BloodStrike == 0)
                {
                    // Then this is probably a null rotation, and
                    // so let's build one?
                    m_Rotation = new Rotation(this.m_CState.m_Talents);
                }

                BuildRotation();

                // TODO: move this out of the constructor
                CompileRotation(m_Rotation);
            }
        }
Пример #2
0
 public AbilityDK_CorpseExplosion(CombatState CS)
 {
     this.CState = CS;
     this.szName = "Corpse Explosion";
     this.AbilityCost[(int)DKCostTypes.RunicPower] = 40;
     this.uBaseDamage     = 443;
     this.bWeaponRequired = false;
     this.bTriggersGCD    = true;
     this.uRange          = 30;
     this.Cooldown        = 5000;
     this.bAOE            = true;
 }
Пример #3
0
 public AbilityDK_FrostStrike(CombatState CS)
 {
     this.CState = CS;
     this.wMH    = CS.MH;
     this.wOH    = CS.OH;
     this.szName = "Frost Strike";
     this.AbilityCost[(int)DKCostTypes.RunicPower] = 40;
     this.uMinDamage            = 137;
     this.uMaxDamage            = 138;
     this.bWeaponRequired       = true;
     this.fWeaponDamageModifier = .55f;
     this.bTriggersGCD          = true;
     m_iToT = CState.m_Talents.ThreatOfThassarian;
 }
Пример #4
0
 public AbilityDK_BloodStrike(CombatState CS)
 {
     this.CState = CS;
     this.wMH    = CS.MH;
     this.wOH    = CS.OH;
     this.szName = "Blood Strike";
     this.AbilityCost[(int)DKCostTypes.Blood]      = 1;
     this.AbilityCost[(int)DKCostTypes.RunicPower] = -10;
     this.uBaseDamage           = 306;
     this.fWeaponDamageModifier = 0.4f;
     this.bWeaponRequired       = true;
     this.bTriggersGCD          = true;
     m_iToT = CState.m_Talents.ThreatOfThassarian;
 }
Пример #5
0
 /// <summary>
 /// Chills the target for 227 to 245 Frost damage and  infects
 /// them with Frost Fever, a disease that deals periodic damage
 /// and reduces melee and ranged attack speed by 14% for 15 sec.
 /// </summary>
 public AbilityDK_IcyTouch(CombatState CS)
 {
     this.CState = CS;
     this.szName = "Icy Touch";
     this.AbilityCost[(int)DKCostTypes.Frost]      = 1;
     this.AbilityCost[(int)DKCostTypes.RunicPower] = -10;
     this.uMaxDamage   = 245;
     this.uMinDamage   = 227;
     this.uRange       = 20;
     this.tDamageType  = ItemDamageType.Frost;
     this.bTriggersGCD = true;
     // 3.3.3 IT now hits alot harder for threat.
     this.ThreatMultiplier   = 7;
     this.m_TriggeredAbility = new AbilityDK_FrostFever(CS);
 }
Пример #6
0
 public AbilityDK_RuneStrike(CombatState CS)
 {
     this.CState = CS;
     this.wMH    = CS.MH;
     this.wOH    = CS.OH;
     this.szName = "Rune Strike";
     this.AbilityCost[(int)DKCostTypes.RunicPower] = 20;
     this.uBaseDamage           = 736; // May need to adjust this.
     this.bWeaponRequired       = true;
     this.fWeaponDamageModifier = 1.5f;
     this.DamageAdditiveModifer = 150 * (int)CState.m_Stats.AttackPower * 10 / 10000;
     this.bTriggersGCD          = false;
     this.Cooldown = 0;
     m_iToT        = CState.m_Talents.ThreatOfThassarian;
 }
Пример #7
0
 public AbilityDK_ScourgeStrike(CombatState CS)
 {
     this.CState = CS;
     this.wMH    = CS.MH;
     this.wOH    = CS.OH;
     this.szName = "Scourge Strike";
     this.AbilityCost[(int)DKCostTypes.Frost]      = 1;
     this.AbilityCost[(int)DKCostTypes.UnHoly]     = 1;
     this.AbilityCost[(int)DKCostTypes.RunicPower] = -15;
     this.uBaseDamage           = 400;
     this.bWeaponRequired       = true;
     this.fWeaponDamageModifier = .5f;
     this.bTriggersGCD          = true;
     // TODO: Physical Damage * .25 * # diseases on target as shadow.
 }
Пример #8
0
 public AbilityDK_HeartStrike(CombatState CS)
 {
     this.CState = CS;
     this.wMH    = CS.MH;
     this.wOH    = CS.OH;
     this.szName = "Heart Strike";
     this.AbilityCost[(int)DKCostTypes.Blood]      = 1;
     this.AbilityCost[(int)DKCostTypes.RunicPower] = -10;
     this.uBaseDamage           = 736; // May need to adjust this.
     this.bWeaponRequired       = true;
     this.fWeaponDamageModifier = .5f;
     this.bTriggersGCD          = true;
     this.bAOE = true;
     // TODO: Multi Target spell - need to add in the damage for the 2nd target.
     // Override Damage method.
 }
Пример #9
0
 public AbilityDK_Obliterate(CombatState CS)
 {
     this.CState = CS;
     this.wMH    = CS.MH;
     this.wOH    = CS.OH;
     this.szName = "Obliterate";
     this.AbilityCost[(int)DKCostTypes.Frost]      = 1;
     this.AbilityCost[(int)DKCostTypes.UnHoly]     = 1;
     this.AbilityCost[(int)DKCostTypes.RunicPower] = -15;
     this.uBaseDamage           = (uint)(584 * .8f);
     this.bWeaponRequired       = true;
     this.fWeaponDamageModifier = .8f;
     this.bTriggersGCD          = true;
     // Physical Damage * .125 * # diseases on target may consume the diseases.
     m_iToT = CState.m_Talents.ThreatOfThassarian;
 }
Пример #10
0
 public AbilityDK_Base(CombatState CS)
 {
     this.CState = CS;
     this.szName = "";
     this.AbilityCost[(int)DKCostTypes.Blood]      = 0;
     this.AbilityCost[(int)DKCostTypes.Frost]      = 0;
     this.AbilityCost[(int)DKCostTypes.UnHoly]     = 0;
     this.AbilityCost[(int)DKCostTypes.RunicPower] = 0;
     this.uBaseDamage = 0;
     this.uRange      = MELEE_RANGE;
     this.tDamageType = ItemDamageType.Physical;
     this.Cooldown    = 1500; // GCD
     this.CastTime    = INSTANT;
     this.uTickRate   = INSTANT;
     this.uDuration   = INSTANT;
 }
Пример #11
0
 public AbilityDK_BloodBoil(CombatState CS)
 {
     this.CState = CS;
     this.szName = "Blood Boil";
     this.AbilityCost[(int)DKCostTypes.Blood]      = 1;
     this.AbilityCost[(int)DKCostTypes.RunicPower] = -10;
     this.uMinDamage            = 180;
     this.uMaxDamage            = 220;
     this.tDamageType           = ItemDamageType.Shadow;
     this.bWeaponRequired       = false;
     this.fWeaponDamageModifier = 0;
     this.bTriggersGCD          = true;
     this.uRange = 0;
     this.uArea  = 10;
     this.bAOE   = true;
 }
Пример #12
0
 public AbilityDK_DeathStrike(CombatState CS)
 {
     this.CState = CS;
     this.wMH    = CS.MH;
     this.wOH    = CS.OH;
     this.szName = "Death Strike";
     this.AbilityCost[(int)DKCostTypes.Frost]      = 1;
     this.AbilityCost[(int)DKCostTypes.UnHoly]     = 1;
     this.AbilityCost[(int)DKCostTypes.RunicPower] = -15;
     this.uBaseDamage           = 223;
     this.bWeaponRequired       = true;
     this.fWeaponDamageModifier = .75f;
     this.bTriggersGCD          = true;
     // TODO: # diseases on Target.
     this.CState.m_Stats.HealthRestoreFromMaxHealth += (.05f /* * # of diseases on target */);
     m_iToT = CState.m_Talents.ThreatOfThassarian;
 }
Пример #13
0
 public AbilityDK_Pestilence(CombatState CS)
 {
     this.CState = CS;
     this.szName = "Pestilence";
     this.AbilityCost[(int)DKCostTypes.Blood]      = 1;
     this.AbilityCost[(int)DKCostTypes.RunicPower] = -10;
     this.uMinDamage            = 0;
     this.uMaxDamage            = 0;
     this.bWeaponRequired       = false;
     this.fWeaponDamageModifier = 0;
     this.bTriggersGCD          = true;
     this.uRange = 0;
     this.uArea  = 10;
     this.bAOE   = true;
     // TODO: Glyph - Refreshes disease
     // TODO: Glyph - extends range
 }
Пример #14
0
 public AbilityDK_HowlingBlast(CombatState CS)
 {
     this.CState = CS;
     this.szName = "Howling Blast";
     this.AbilityCost[(int)DKCostTypes.Frost]      = 1;
     this.AbilityCost[(int)DKCostTypes.UnHoly]     = 1;
     this.AbilityCost[(int)DKCostTypes.RunicPower] = -15;
     this.uMinDamage            = 518;
     this.uMaxDamage            = 562;
     this.tDamageType           = ItemDamageType.Frost;
     this.bWeaponRequired       = false;
     this.fWeaponDamageModifier = 0;
     this.bTriggersGCD          = true;
     this.uRange = 20;
     this.uArea  = 10;
     this.bAOE   = true;
 }
Пример #15
0
 /// <summary>
 /// A disease dealing [0 + AP * 0.055 * 1.15] Shadow damage every 3 sec for 15 sec.  Caused by Plague Strike and other abilities.
 /// Base damage 0
 /// Bonus from attack power [AP * 0.055 * 1.15]
 /// </summary>
 public AbilityDK_BloodPlague(CombatState CS)
 {
     this.CState      = CS;
     this.szName      = "Blood Plague";
     this.tDamageType = ItemDamageType.Shadow;
     if (CState.m_Talents.Epidemic >= 3)
     {
         // error
         this.uDuration = 15000;
     }
     else
     {
         this.uDuration = 15000 + ((uint)CState.m_Talents.Epidemic * 3000);
     }
     this.uTickRate    = 3 * 1000;
     this.uBaseDamage  = 0;
     this.bTriggersGCD = false;
     this.CastTime     = 0;
     this.Cooldown     = 0;
 }
Пример #16
0
 public AbilityDK_DeathNDecay(CombatState CS)
 {
     this.CState = CS;
     this.szName = "Death N Decay";
     this.AbilityCost[(int)DKCostTypes.Frost]      = 1;
     this.AbilityCost[(int)DKCostTypes.UnHoly]     = 1;
     this.AbilityCost[(int)DKCostTypes.Blood]      = 1;
     this.AbilityCost[(int)DKCostTypes.RunicPower] = -15;
     this.uMinDamage            = 62;
     this.uMaxDamage            = 62;
     this.tDamageType           = ItemDamageType.Shadow;
     this.bWeaponRequired       = false;
     this.fWeaponDamageModifier = 0;
     this.bTriggersGCD          = true;
     this.uRange    = 30;
     this.uArea     = 10;
     this.uTickRate = 1 * 1000;
     this.uDuration = 10 * 1000;
     this.Cooldown  = 30 * 1000;
     this.bAOE      = true;
 }