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