private void GenerateSpellList(Character character)
        {
            _AvailableSpells.Clear();

            float tankHealingModifier = (_CalculationOptions.EarthShield && _CalculationOptions.Targets == "Tank") ? 0.15f : 0f;
            short orbValue = (short)((1516 * (1 + (character.ShamanTalents.ImprovedShields * .05f))));

            if (_CalculationOptions.EarthShield)
            {
                EarthShield es = new EarthShield()
                {
                    BaseManaCost = (int)(0.19f * _BaseMana),
                    CostScale = 1f - character.ShamanTalents.TidalFocus * .02f,
                    EffectModifier = 1.1f + (character.ShamanTalents.SparkOfLife * .02f),
                    BonusSpellPower = 1 * ((1 + character.ShamanTalents.ElementalWeapons * .2f) * 150f),
                    AbsorbOrbChance = 0f
                };

                if (character.ShamanTalents.GlyphofEarthShield)
                    es.EffectModifier += 0.2f;
                if (character.ShamanTalents.ImprovedShields > 0)
                    es.EffectModifier += character.ShamanTalents.ImprovedShields * 0.05f;

                _AvailableSpells.Add(es);
            }

            if (character.ShamanTalents.Riptide > 0)
            {
                Riptide riptide = new Riptide()
                {
                    BaseManaCost = (int)(0.10f * _BaseMana),
                    DurationModifer = (character.ShamanTalents.GlyphofRiptide ? 6f : 0f),
                    CostScale = 1f - character.ShamanTalents.TidalFocus * .02f,
                    EffectModifier = (1.1f + (character.ShamanTalents.SparkOfLife * .02f) + tankHealingModifier),
                    BonusSpellPower = 1 * ((1 + character.ShamanTalents.ElementalWeapons * .2f) * 150f),
                    AbsorbOrbChance = 0.5f * character.ShamanTalents.ImprovedWaterShield,
                    OrbValue = orbValue,
                    ProvidesTidalWaves = (character.ShamanTalents.TidalWaves > 0)
                };
                _AvailableSpells.Add(riptide);
            }

            HealingRain healingRain = new HealingRain()
            {
                BaseManaCost = (int)(0.46f * _BaseMana),
                CostScale = 1f - character.ShamanTalents.TidalFocus * .02f,
                EffectModifier = 1.1f + (character.ShamanTalents.SparkOfLife * .02f),
                AbsorbOrbChance = 0f,
                BonusSpellPower = 1 * ((1 + character.ShamanTalents.ElementalWeapons * .2f) * 150f)
            };
            //_AvailableSpells.Add(healingRain);

            ChainHeal chainHeal = new ChainHeal()
            {
                BaseManaCost = (int)(0.17f * _BaseMana),
                ChainedHeal = false,
                CostScale = 1f - character.ShamanTalents.TidalFocus * .02f,
                EffectModifier = 1.1f + (character.ShamanTalents.SparkOfLife * .02f) + tankHealingModifier,
                BonusSpellPower = 1 * ((1 + character.ShamanTalents.ElementalWeapons * .2f) * 150f),
                AbsorbOrbChance = 0.15f * character.ShamanTalents.ImprovedWaterShield,
                OrbValue = orbValue,
                ProvidesTidalWaves = (character.ShamanTalents.TidalWaves > 0)
            };
            _AvailableSpells.Add(chainHeal);

            HealingSpell healingSurge = new HealingSpell()
            {
                SpellId = 8004,
                SpellName = "Healing Surge",
                SpellAbrv = "HS",
                BaseManaCost = (int)(0.27f * _BaseMana),
                BaseCastTime = 1.5f,
                BaseCoefficient = 1.5f / 3.5f,
                BaseEffect = 6004f,
                CostScale = 1f - character.ShamanTalents.TidalFocus * .02f,
                EffectModifier = 1.1f + (character.ShamanTalents.SparkOfLife * .02f) + tankHealingModifier,
                BonusSpellPower = 1 * ((1 + character.ShamanTalents.ElementalWeapons * .2f) * 150f),
                AbsorbOrbChance = 0.3f * character.ShamanTalents.ImprovedWaterShield,
                OrbValue = orbValue,
                ConsumesTidalWaves = true
            };
            if (character.ShamanTalents.TidalWaves > 0)
                healingSurge.TidalWavesBuff = new TemporaryBuff() { Name = "Tidal Waves", Stats = new Stats() { SpellCrit = 0.1f * character.ShamanTalents.TidalWaves } };
            _AvailableSpells.Add(healingSurge);

            HealingSpell healingWave = new HealingSpell()
            {
                SpellId = 331,
                SpellName = "Healing Wave",
                SpellAbrv = "HW",
                BaseManaCost = (int)(0.09f * _BaseMana),
                BaseCastTime = 3f,
                BaseCoefficient = 3f / 3.5f,
                BaseEffect = 3002f,
                CostScale = 1f - character.ShamanTalents.TidalFocus * .02f,
                EffectModifier = 1.1f + (character.ShamanTalents.SparkOfLife * .02f) + tankHealingModifier,
                BonusSpellPower = 1 * ((1 + character.ShamanTalents.ElementalWeapons * .2f) * 150f),
                ConsumesTidalWaves = true,
                AbsorbOrbChance = 0.5f * character.ShamanTalents.ImprovedWaterShield,
                OrbValue = orbValue,
                CastTimeReduction = 0.5f // Purification
            };
            if (character.ShamanTalents.TidalWaves > 0)
                healingWave.TidalWavesBuff = new TemporaryBuff() { Name = "Tidal Waves", Stats = new Stats() { SpellHaste = 0.1f * character.ShamanTalents.TidalWaves } };
            _AvailableSpells.Add(healingWave);

            HealingSpell greaterHw = new HealingSpell()
            {
                SpellId = 77472,
                SpellName = "Greater Healing Wave",
                SpellAbrv = "GHW",
                BaseManaCost = (int)(0.3f * _BaseMana),
                BaseCastTime = 3f,
                BaseCoefficient = 3f / 3.5f,
                BaseEffect = 8005f,
                CostScale = 1f - character.ShamanTalents.TidalFocus * .02f,
                EffectModifier = 1.1f + (character.ShamanTalents.SparkOfLife * .02f) + tankHealingModifier,
                BonusSpellPower = 1 * ((1 + character.ShamanTalents.ElementalWeapons * .2f) * 150f),
                ConsumesTidalWaves = true,
                AbsorbOrbChance = 0.5f * character.ShamanTalents.ImprovedWaterShield,
                OrbValue = orbValue,
                CastTimeReduction = 0.5f // Purification
            };
            if (character.ShamanTalents.TidalWaves > 0)
                greaterHw.TidalWavesBuff = new TemporaryBuff() { Name = "Tidal Waves", Stats = new Stats() { SpellHaste = 0.1f * character.ShamanTalents.TidalWaves } };
            _AvailableSpells.Add(greaterHw);

            if (character.ShamanTalents.TelluricCurrents > 0)
            {
                LightningBolt lb = new LightningBolt()
                {
                    BaseManaCost = (int)(0.06f * _BaseMana),
                    CostScale = 1f - character.ShamanTalents.Convection * .05f,
                    EffectModifier = 1f + (character.ShamanTalents.Concussion * 0.02f) + (character.ShamanTalents.GlyphofLightningBolt ? 0.04f : 0f),
                    TCPercent = character.ShamanTalents.TelluricCurrents * 0.2f
                };
                _AvailableSpells.Add(lb);
            }
        }
Example #2
0
        private void GenerateSpellList(Character character)
        {
            _AvailableSpells.Clear();

            float tankHealingModifier = (_CalculationOptions.EarthShield && _CalculationOptions.Targets == "Tank") ? 0.15f : 0f;
            short orbValue            = (short)((1516 * (1 + (character.ShamanTalents.ImprovedShields * .05f))));

            if (_CalculationOptions.EarthShield)
            {
                EarthShield es = new EarthShield()
                {
                    BaseManaCost    = (int)(0.19f * _BaseMana),
                    CostScale       = 1f - character.ShamanTalents.TidalFocus * .02f,
                    EffectModifier  = 1.1f + (character.ShamanTalents.SparkOfLife * .02f),
                    BonusSpellPower = 1 * ((1 + character.ShamanTalents.ElementalWeapons * .2f) * 150f),
                    AbsorbOrbChance = 0f
                };

                if (character.ShamanTalents.GlyphofEarthShield)
                {
                    es.EffectModifier += 0.2f;
                }
                if (character.ShamanTalents.ImprovedShields > 0)
                {
                    es.EffectModifier += character.ShamanTalents.ImprovedShields * 0.05f;
                }

                _AvailableSpells.Add(es);
            }

            if (character.ShamanTalents.Riptide > 0)
            {
                Riptide riptide = new Riptide()
                {
                    BaseManaCost       = (int)(0.10f * _BaseMana),
                    DurationModifer    = (character.ShamanTalents.GlyphofRiptide ? 6f : 0f),
                    CostScale          = 1f - character.ShamanTalents.TidalFocus * .02f,
                    EffectModifier     = (1.1f + (character.ShamanTalents.SparkOfLife * .02f) + tankHealingModifier),
                    BonusSpellPower    = 1 * ((1 + character.ShamanTalents.ElementalWeapons * .2f) * 150f),
                    AbsorbOrbChance    = 0.5f * character.ShamanTalents.ImprovedWaterShield,
                    OrbValue           = orbValue,
                    ProvidesTidalWaves = (character.ShamanTalents.TidalWaves > 0)
                };
                _AvailableSpells.Add(riptide);
            }

            HealingRain healingRain = new HealingRain()
            {
                BaseManaCost    = (int)(0.46f * _BaseMana),
                CostScale       = 1f - character.ShamanTalents.TidalFocus * .02f,
                EffectModifier  = 1.1f + (character.ShamanTalents.SparkOfLife * .02f),
                AbsorbOrbChance = 0f,
                BonusSpellPower = 1 * ((1 + character.ShamanTalents.ElementalWeapons * .2f) * 150f)
            };
            //_AvailableSpells.Add(healingRain);

            ChainHeal chainHeal = new ChainHeal()
            {
                BaseManaCost       = (int)(0.17f * _BaseMana),
                ChainedHeal        = false,
                CostScale          = 1f - character.ShamanTalents.TidalFocus * .02f,
                EffectModifier     = 1.1f + (character.ShamanTalents.SparkOfLife * .02f) + tankHealingModifier,
                BonusSpellPower    = 1 * ((1 + character.ShamanTalents.ElementalWeapons * .2f) * 150f),
                AbsorbOrbChance    = 0.15f * character.ShamanTalents.ImprovedWaterShield,
                OrbValue           = orbValue,
                ProvidesTidalWaves = (character.ShamanTalents.TidalWaves > 0)
            };

            _AvailableSpells.Add(chainHeal);

            HealingSpell healingSurge = new HealingSpell()
            {
                SpellId            = 8004,
                SpellName          = "Healing Surge",
                SpellAbrv          = "HS",
                BaseManaCost       = (int)(0.27f * _BaseMana),
                BaseCastTime       = 1.5f,
                BaseCoefficient    = 1.5f / 3.5f,
                BaseEffect         = 6004f,
                CostScale          = 1f - character.ShamanTalents.TidalFocus * .02f,
                EffectModifier     = 1.1f + (character.ShamanTalents.SparkOfLife * .02f) + tankHealingModifier,
                BonusSpellPower    = 1 * ((1 + character.ShamanTalents.ElementalWeapons * .2f) * 150f),
                AbsorbOrbChance    = 0.3f * character.ShamanTalents.ImprovedWaterShield,
                OrbValue           = orbValue,
                ConsumesTidalWaves = true
            };

            if (character.ShamanTalents.TidalWaves > 0)
            {
                healingSurge.TidalWavesBuff = new TemporaryBuff()
                {
                    Name = "Tidal Waves", Stats = new Stats()
                    {
                        SpellCrit = 0.1f * character.ShamanTalents.TidalWaves
                    }
                }
            }
            ;
            _AvailableSpells.Add(healingSurge);

            HealingSpell healingWave = new HealingSpell()
            {
                SpellId            = 331,
                SpellName          = "Healing Wave",
                SpellAbrv          = "HW",
                BaseManaCost       = (int)(0.09f * _BaseMana),
                BaseCastTime       = 3f,
                BaseCoefficient    = 3f / 3.5f,
                BaseEffect         = 3002f,
                CostScale          = 1f - character.ShamanTalents.TidalFocus * .02f,
                EffectModifier     = 1.1f + (character.ShamanTalents.SparkOfLife * .02f) + tankHealingModifier,
                BonusSpellPower    = 1 * ((1 + character.ShamanTalents.ElementalWeapons * .2f) * 150f),
                ConsumesTidalWaves = true,
                AbsorbOrbChance    = 0.5f * character.ShamanTalents.ImprovedWaterShield,
                OrbValue           = orbValue,
                CastTimeReduction  = 0.5f // Purification
            };

            if (character.ShamanTalents.TidalWaves > 0)
            {
                healingWave.TidalWavesBuff = new TemporaryBuff()
                {
                    Name = "Tidal Waves", Stats = new Stats()
                    {
                        SpellHaste = 0.1f * character.ShamanTalents.TidalWaves
                    }
                }
            }
            ;
            _AvailableSpells.Add(healingWave);

            HealingSpell greaterHw = new HealingSpell()
            {
                SpellId            = 77472,
                SpellName          = "Greater Healing Wave",
                SpellAbrv          = "GHW",
                BaseManaCost       = (int)(0.3f * _BaseMana),
                BaseCastTime       = 3f,
                BaseCoefficient    = 3f / 3.5f,
                BaseEffect         = 8005f,
                CostScale          = 1f - character.ShamanTalents.TidalFocus * .02f,
                EffectModifier     = 1.1f + (character.ShamanTalents.SparkOfLife * .02f) + tankHealingModifier,
                BonusSpellPower    = 1 * ((1 + character.ShamanTalents.ElementalWeapons * .2f) * 150f),
                ConsumesTidalWaves = true,
                AbsorbOrbChance    = 0.5f * character.ShamanTalents.ImprovedWaterShield,
                OrbValue           = orbValue,
                CastTimeReduction  = 0.5f // Purification
            };

            if (character.ShamanTalents.TidalWaves > 0)
            {
                greaterHw.TidalWavesBuff = new TemporaryBuff()
                {
                    Name = "Tidal Waves", Stats = new Stats()
                    {
                        SpellHaste = 0.1f * character.ShamanTalents.TidalWaves
                    }
                }
            }
            ;
            _AvailableSpells.Add(greaterHw);

            if (character.ShamanTalents.TelluricCurrents > 0)
            {
                LightningBolt lb = new LightningBolt()
                {
                    BaseManaCost   = (int)(0.06f * _BaseMana),
                    CostScale      = 1f - character.ShamanTalents.Convection * .05f,
                    EffectModifier = 1f + (character.ShamanTalents.Concussion * 0.02f) + (character.ShamanTalents.GlyphofLightningBolt ? 0.04f : 0f),
                    TCPercent      = character.ShamanTalents.TelluricCurrents * 0.2f
                };
                _AvailableSpells.Add(lb);
            }
        }