public Spell(SpellName spellname, SpellTalentSchool talentSchool, SpellSchool directSpellSchool = default(SpellSchool), SpellSchool DoTSpellSchool = default(SpellSchool), double duration = 0, bool hasteAffectsDuration = false, double baseCasttime = 0, double flatCasttimeReduction = 0, double percentualCasttimeReduction = 0, double hasteFactor = 1, double cooldown = 0, double manaCostOfBaseMana = 0, double manaCostFactor = 1, double requiredBuffUptimeFactor = 1, Reagent reagent = Reagent.None, double averageDirectBaseDamage = 0, double averageDoTBaseDamage = 0, double SPDirectScaling = 0, double SPDoTScaling = 0, double APDirectScaling = 0, double APDoTScaling = 0, bool channeled = false, int numOfTicks = 1, double directDamageFactor = 1, double DoTDamageFactor = 1, bool directCanCrit = true, bool DoTCanCrit = false, double directCritChance = 0, double DoTCritChance = 0, double directCritDamageFactor = 1.5, double DoTCritDamageFactor = 1.5) { this.spellname = spellname; this.talentSchool = talentSchool; this.directSpellSchool = directSpellSchool; this.duration = duration; this.hasteAffectsDuration = hasteAffectsDuration; this.baseCasttime = baseCasttime; this.flatCasttimeReduction = flatCasttimeReduction; this.percentualCasttimeReduction = percentualCasttimeReduction; this.effectiveCasttime = ((baseCasttime * (1 - (percentualCasttimeReduction / 100))) - flatCasttimeReduction) / hasteFactor; this.hasteFactor = hasteFactor; this.cooldown = cooldown; this.effectiveCooldown = cooldown; this.manaCostOfBaseMana = manaCostOfBaseMana; this.manaCostFactor = manaCostFactor; this.requiredBuffUptimeFactor = requiredBuffUptimeFactor; this.averageDirectBaseDamage = averageDirectBaseDamage; this.averageDoTBaseDamage = averageDoTBaseDamage; this.SPDirectScaling = SPDirectScaling; this.SPDoTScaling = SPDoTScaling; this.APDirectScaling = APDirectScaling; this.APDoTScaling = APDoTScaling; this.reagent = reagent; this.channeled = channeled; this.numOfTicks = numOfTicks; this.directDamageFactor = directDamageFactor; this.DoTDamageFactor = DoTDamageFactor; this.directCanCrit = directCanCrit; this.DoTCanCrit = DoTCanCrit; this.directCritChance = directCritChance; this.DoTCritChance = DoTCritChance; this.directCritDamageFactor = directCritDamageFactor; this.DoTCritDamageFactor = DoTCritDamageFactor; }