From efd91bfd577494a1ba56283826cec22a53d55bb5 Mon Sep 17 00:00:00 2001 From: hondacrx Date: Mon, 28 Aug 2023 11:35:00 -0400 Subject: [PATCH] Scripts/Spells: Implement Ysera's Gift Port From (https://github.com/TrinityCore/TrinityCore/commit/001ac7aa5bd6e34189c79f53e1e012fee8e2d3e1) --- Source/Scripts/Spells/Druid.cs | 58 ++++++++++++++++++++++++++++------ 1 file changed, 49 insertions(+), 9 deletions(-) diff --git a/Source/Scripts/Spells/Druid.cs b/Source/Scripts/Spells/Druid.cs index 07334f5a8..ef3fcd43b 100644 --- a/Source/Scripts/Spells/Druid.cs +++ b/Source/Scripts/Spells/Druid.cs @@ -76,6 +76,8 @@ namespace Scripts.Spells.Druid public const uint ThrashBear = 77758; public const uint ThrashBearAura = 192090; public const uint ThrashCat = 106830; + public const uint YserasGiftHealParty = 145110; + public const uint YserasGiftHealSelf = 145109; } [Script] // 22812 - Barkskin @@ -557,7 +559,7 @@ namespace Scripts.Spells.Druid OnEffectRemove.Add(new EffectApplyHandler(OnRemove, 1, AuraType.ModShapeshift, AuraEffectHandleModes.Real)); } } - + [Script] // 210706 - Gore class spell_dru_gore : AuraScript { @@ -629,10 +631,10 @@ namespace Scripts.Spells.Druid { AuraEffect innervateR2 = caster.GetAuraEffect(SpellIds.InnervateRank2, 0); if (innervateR2 != null) - caster.CastSpell(caster, SpellIds.Innervate, - new CastSpellExtraArgs(TriggerCastFlags.IgnoreSpellAndCategoryCD | TriggerCastFlags.IgnoreCastInProgress) - .SetTriggeringSpell(GetSpell()) - .AddSpellMod(SpellValueMod.BasePoint0, -innervateR2.GetAmount())); + caster.CastSpell(caster, SpellIds.Innervate, + new CastSpellExtraArgs(TriggerCastFlags.IgnoreSpellAndCategoryCD | TriggerCastFlags.IgnoreCastInProgress) + .SetTriggeringSpell(GetSpell()) + .AddSpellMod(SpellValueMod.BasePoint0, -innervateR2.GetAmount())); } } @@ -737,7 +739,7 @@ namespace Scripts.Spells.Druid AfterEffectRemove.Add(new EffectApplyHandler(AfterRemove, 0, AuraType.Dummy, AuraEffectHandleModes.Real)); } } - + [Script] // 8921 - Moonfire class spell_dru_moonfire : SpellScript { @@ -906,7 +908,7 @@ namespace Scripts.Spells.Druid OnEffectPeriodic.Add(new EffectPeriodicHandler(OnTick, 1, AuraType.PeriodicDamage)); } } - + [Script] // 106839 - Skull Bash class spell_dru_skull_bash : SpellScript { @@ -1085,7 +1087,7 @@ namespace Scripts.Spells.Druid return; int amount = MathFunctions.CalculatePct(spellPowerCost.Amount, aurEff.GetAmount()); - CastSpellExtraArgs args = new (aurEff); + CastSpellExtraArgs args = new(aurEff); args.AddSpellMod(SpellValueMod.BasePoint0, amount); caster.CastSpell((Unit)null, SpellIds.Exhilarate, args); } @@ -1466,7 +1468,7 @@ namespace Scripts.Spells.Druid OnEffectPeriodic.Add(new EffectPeriodicHandler(HandlePeriodic, 1, AuraType.PeriodicDummy)); } } - + [Script] // 48438 - Wild Growth class spell_dru_wild_growth : SpellScript { @@ -1547,4 +1549,42 @@ namespace Scripts.Spells.Druid OnEffectUpdatePeriodic.Add(new EffectUpdatePeriodicHandler(HandleTickUpdate, 0, AuraType.PeriodicHeal)); } } + + [Script] // 145108 - Ysera's Gift + class spell_dru_yseras_gift : AuraScript + { + public override bool Validate(SpellInfo spellInfo) + { + return ValidateSpellInfo(SpellIds.YserasGiftHealSelf, SpellIds.YserasGiftHealParty); + } + + void HandleEffectPeriodic(AuraEffect aurEff) + { + int healAmount = (int)GetTarget().CountPctFromMaxHealth(aurEff.GetAmount()); + + if (!GetTarget().IsFullHealth()) + GetTarget().CastSpell(GetTarget(), SpellIds.YserasGiftHealSelf, new CastSpellExtraArgs(aurEff).AddSpellMod(SpellValueMod.BasePoint0, healAmount)); + else + GetTarget().CastSpell(GetTarget(), SpellIds.YserasGiftHealParty, new CastSpellExtraArgs(aurEff).AddSpellMod(SpellValueMod.BasePoint0, healAmount)); + } + + public override void Register() + { + OnEffectPeriodic.Add(new EffectPeriodicHandler(HandleEffectPeriodic, 0, AuraType.PeriodicDummy)); + } + } + + [Script] // 145110 - Ysera's Gift (heal) + class spell_dru_yseras_gift_group_heal : SpellScript + { + void SelectTargets(List targets) + { + SelectRandomInjuredTargets(targets, 1, true); + } + + public override void Register() + { + OnObjectAreaTargetSelect.Add(new ObjectAreaTargetSelectHandler(SelectTargets, 0, Targets.UnitCasterAreaRaid)); + } + } } \ No newline at end of file