mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-16 07:30:42 +01:00
Scripts/Spells: Implement Germination and Luxuriant Soil (#29178)
Co-authored-by: Shauren <shauren.trinity@gmail.com>
This commit is contained in:
8
sql/updates/world/master/2023_08_13_02_world.sql
Normal file
8
sql/updates/world/master/2023_08_13_02_world.sql
Normal file
@@ -0,0 +1,8 @@
|
||||
DELETE FROM `spell_proc` WHERE `SpellId` IN (392315);
|
||||
INSERT INTO `spell_proc` (`SpellId`,`SchoolMask`,`SpellFamilyName`,`SpellFamilyMask0`,`SpellFamilyMask1`,`SpellFamilyMask2`,`SpellFamilyMask3`,`ProcFlags`,`ProcFlags2`,`SpellTypeMask`,`SpellPhaseMask`,`HitMask`,`AttributesMask`,`DisableEffectsMask`,`ProcsPerMinute`,`Chance`,`Cooldown`,`Charges`) VALUES
|
||||
(392315,0x00,7,0x00000010,0x00000000,0x00000000,0x00000000,0x0,0x0,0x2,0x2,0x403,0x0,0x0,0,0,0,0); -- Luxuriant Soil
|
||||
|
||||
DELETE FROM `spell_script_names` WHERE `ScriptName` IN ('spell_dru_luxuriant_soil', 'spell_dru_germination');
|
||||
INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
|
||||
(774, 'spell_dru_germination'),
|
||||
(392315, 'spell_dru_luxuriant_soil');
|
||||
@@ -22,8 +22,10 @@
|
||||
*/
|
||||
|
||||
#include "ScriptMgr.h"
|
||||
#include "CellImpl.h"
|
||||
#include "Containers.h"
|
||||
#include "DB2Stores.h"
|
||||
#include "GridNotifiersImpl.h"
|
||||
#include "Player.h"
|
||||
#include "Spell.h"
|
||||
#include "SpellAuraEffects.h"
|
||||
@@ -72,6 +74,7 @@ enum DruidSpells
|
||||
SPELL_DRUID_FORMS_TRINKET_NONE = 37344,
|
||||
SPELL_DRUID_FORMS_TRINKET_TREE = 37342,
|
||||
SPELL_DRUID_GALACTIC_GUARDIAN_AURA = 213708,
|
||||
SPELL_DRUID_GERMINATION = 155675,
|
||||
SPELL_DRUID_GLYPH_OF_STARS = 114301,
|
||||
SPELL_DRUID_GLYPH_OF_STARS_VISUAL = 114302,
|
||||
SPELL_DRUID_GORE_PROC = 93622,
|
||||
@@ -91,6 +94,8 @@ enum DruidSpells
|
||||
SPELL_DRUID_MASS_ENTANGLEMENT = 102359,
|
||||
SPELL_DRUID_MOONFIRE_DAMAGE = 164812,
|
||||
SPELL_DRUID_PROWL = 5215,
|
||||
SPELL_DRUID_REJUVENATION = 774,
|
||||
SPELL_DRUID_REJUVENATION_GERMINATION = 155777,
|
||||
SPELL_DRUID_REJUVENATION_T10_PROC = 70691,
|
||||
SPELL_DRUID_RESTORATION_T10_2P_BONUS = 70658,
|
||||
SPELL_DRUID_SAVAGE_ROAR = 62071,
|
||||
@@ -733,6 +738,48 @@ class spell_dru_galactic_guardian : public AuraScript
|
||||
}
|
||||
};
|
||||
|
||||
// 774 - Rejuvenation
|
||||
class spell_dru_germination : public SpellScript
|
||||
{
|
||||
bool Validate(SpellInfo const* /*spellInfo*/) override
|
||||
{
|
||||
return ValidateSpellInfo({ SPELL_DRUID_REJUVENATION, SPELL_DRUID_GERMINATION, SPELL_DRUID_REJUVENATION_GERMINATION });
|
||||
}
|
||||
|
||||
void PickRejuvenationVariant(WorldObject*& target) const
|
||||
{
|
||||
Unit* caster = GetCaster();
|
||||
|
||||
// Germination talent.
|
||||
if (caster->HasAura(SPELL_DRUID_GERMINATION))
|
||||
{
|
||||
Unit* unitTarget = target->ToUnit();
|
||||
Aura* rejuvenationAura = unitTarget->GetAura(SPELL_DRUID_REJUVENATION, caster->GetGUID());
|
||||
Aura* germinationAura = unitTarget->GetAura(SPELL_DRUID_REJUVENATION_GERMINATION, caster->GetGUID());
|
||||
|
||||
// if target doesn't have Rejuventation, cast passes through.
|
||||
if (!rejuvenationAura)
|
||||
return;
|
||||
|
||||
// if target has Rejuvenation, but not Germination, or Germination has lower remaining duration than Rejuvenation, then cast Germination
|
||||
if (germinationAura && germinationAura->GetDuration() >= rejuvenationAura->GetDuration())
|
||||
return;
|
||||
|
||||
caster->CastSpell(target, SPELL_DRUID_REJUVENATION_GERMINATION,
|
||||
CastSpellExtraArgs(TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_DONT_REPORT_CAST_ERROR)
|
||||
.SetTriggeringSpell(GetSpell()));
|
||||
|
||||
// prevent aura refresh (but cast must still happen to consume mana)
|
||||
target = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnObjectTargetSelect += SpellObjectTargetSelectFn(spell_dru_germination::PickRejuvenationVariant, EFFECT_0, TARGET_UNIT_TARGET_ALLY);
|
||||
}
|
||||
};
|
||||
|
||||
// 24858 - Moonkin Form
|
||||
class spell_dru_glyph_of_stars : public AuraScript
|
||||
{
|
||||
@@ -968,6 +1015,44 @@ class spell_dru_lunar_inspiration : public AuraScript
|
||||
}
|
||||
};
|
||||
|
||||
// 392315 - Luxuriant Soil
|
||||
class spell_dru_luxuriant_soil : public AuraScript
|
||||
{
|
||||
bool Validate(SpellInfo const* /*spellInfo*/) override
|
||||
{
|
||||
return ValidateSpellInfo({ SPELL_DRUID_REJUVENATION });
|
||||
}
|
||||
|
||||
static bool CheckProc(AuraEffect const* aurEff, ProcEventInfo const& /*eventInfo*/)
|
||||
{
|
||||
return roll_chance_i(aurEff->GetAmount());
|
||||
}
|
||||
|
||||
void HandleProc(AuraEffect const* /*aurEff*/, ProcEventInfo const& eventInfo) const
|
||||
{
|
||||
Unit* rejuvCaster = GetTarget();
|
||||
|
||||
// let's use the ProcSpell's max. range.
|
||||
float spellRange = eventInfo.GetSpellInfo()->GetMaxRange();
|
||||
|
||||
std::vector<Unit*> targetList;
|
||||
Trinity::WorldObjectSpellNearbyTargetCheck check(spellRange, rejuvCaster, eventInfo.GetSpellInfo(), TARGET_CHECK_ALLY, nullptr, TARGET_OBJECT_TYPE_UNIT);
|
||||
Trinity::UnitListSearcher searcher(rejuvCaster, targetList, check);
|
||||
Cell::VisitAllObjects(rejuvCaster, searcher, spellRange);
|
||||
|
||||
if (targetList.empty())
|
||||
return;
|
||||
|
||||
rejuvCaster->CastSpell(Trinity::Containers::SelectRandomContainerElement(targetList), SPELL_DRUID_REJUVENATION, TRIGGERED_IGNORE_GCD | TRIGGERED_IGNORE_POWER_AND_REAGENT_COST | TRIGGERED_IGNORE_CAST_IN_PROGRESS);
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
DoCheckEffectProc += AuraCheckEffectProcFn(spell_dru_luxuriant_soil::CheckProc, EFFECT_0, SPELL_AURA_DUMMY);
|
||||
OnEffectProc += AuraEffectProcFn(spell_dru_luxuriant_soil::HandleProc, EFFECT_0, SPELL_AURA_DUMMY);
|
||||
}
|
||||
};
|
||||
|
||||
// 8921 - Moonfire
|
||||
class spell_dru_moonfire : public SpellScript
|
||||
{
|
||||
@@ -1791,6 +1876,7 @@ void AddSC_druid_spell_scripts()
|
||||
RegisterSpellScript(spell_dru_ferocious_bite);
|
||||
RegisterSpellScript(spell_dru_forms_trinket);
|
||||
RegisterSpellScript(spell_dru_galactic_guardian);
|
||||
RegisterSpellScript(spell_dru_germination);
|
||||
RegisterSpellScript(spell_dru_glyph_of_stars);
|
||||
RegisterSpellScript(spell_dru_gore);
|
||||
RegisterSpellScript(spell_dru_incapacitating_roar);
|
||||
@@ -1800,6 +1886,7 @@ void AddSC_druid_spell_scripts()
|
||||
RegisterSpellScript(spell_dru_item_t6_trinket);
|
||||
RegisterSpellScript(spell_dru_lifebloom);
|
||||
RegisterSpellScript(spell_dru_lunar_inspiration);
|
||||
RegisterSpellScript(spell_dru_luxuriant_soil);
|
||||
RegisterSpellScript(spell_dru_moonfire);
|
||||
RegisterSpellScript(spell_dru_omen_of_clarity);
|
||||
RegisterSpellScript(spell_dru_prowl);
|
||||
|
||||
Reference in New Issue
Block a user