Core/Spells: Fixed multiple druid's spells (#26223)

* Tooth And Claw proc correctly (was incorrect attribute)
* Tiger Dash will now transform to cat
* Travelform doesn't require learning riding skill
* Aquatic Form only useable if player has the spell (passive at level 17)
* Doesn't allow stag form inside water
* Bristling Fur will generate rage based on max rage
* Now also removing prowl when cat form is removed
This commit is contained in:
Matan Shukry
2021-04-11 22:16:41 +03:00
committed by GitHub
parent b92e20f6c8
commit cf3ea20825
2 changed files with 53 additions and 11 deletions

View File

@@ -0,0 +1,7 @@
-- Spell Proc
DELETE FROM `spell_proc` WHERE `SpellId` IN (135286);
INSERT INTO `spell_proc` (`SpellId`,`SchoolMask`,`SpellFamilyName`,`SpellFamilyMask0`,`SpellFamilyMask1`,`SpellFamilyMask2`,`SpellFamilyMask3`,`ProcFlags`,`SpellTypeMask`,`SpellPhaseMask`,`HitMask`,`AttributesMask`,`DisableEffectsMask`,`ProcsPerMinute`,`Chance`,`Cooldown`,`Charges`) VALUES
(135286, 0, 7, 0x800, 0x0, 0x0, 0x0, 0x10, 1, 2, 0x403, 0x10, 0, 0, 0, 0, 0);
DELETE FROM `spell_script_names` WHERE `ScriptName` IN ('spell_dru_cat_form');
INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES (768, 'spell_dru_cat_form');

View File

@@ -57,6 +57,7 @@ enum DruidSpells
SPELL_DRUID_EXHILARATE = 28742,
SPELL_DRUID_FERAL_CHARGE_BEAR = 16979,
SPELL_DRUID_FERAL_CHARGE_CAT = 49376,
SPELL_DRUID_FORM_AQUATIC_PASSIVE = 276012,
SPELL_DRUID_FORM_AQUATIC = 1066,
SPELL_DRUID_FORM_FLIGHT = 33943,
SPELL_DRUID_FORM_STAG = 165961,
@@ -79,6 +80,7 @@ enum DruidSpells
SPELL_DRUID_LIVING_SEED_PROC = 48504,
SPELL_DRUID_MANGLE = 33917,
SPELL_DRUID_MOONFIRE_DAMAGE = 164812,
SPELL_DRUID_PROWL = 5215,
SPELL_DRUID_REJUVENATION_T10_PROC = 70691,
SPELL_DRUID_RESTORATION_T10_2P_BONUS = 70658,
SPELL_DRUID_SAVAGE_ROAR = 62071,
@@ -217,7 +219,7 @@ class spell_dru_bristling_fur : public AuraScript
if (DamageInfo* damageInfo = eventInfo.GetDamageInfo())
{
Unit* target = GetTarget();
uint32 rage = 100.0f * (float)damageInfo->GetDamage() / (float)target->GetMaxHealth();
uint32 rage = target->GetMaxPower(POWER_RAGE) * (float)damageInfo->GetDamage() / (float)target->GetMaxHealth();
if (rage > 0)
target->CastCustomSpell(SPELL_DRUID_BRISTLING_FUR_GAIN_RAGE, SPELLVALUE_BASE_POINT0, rage, target, TRIGGERED_FULL_MASK);
}
@@ -229,6 +231,27 @@ class spell_dru_bristling_fur : public AuraScript
}
};
// 768 - CatForm - SPELL_DRUID_CAT_FORM
class spell_dru_cat_form : public AuraScript
{
PrepareAuraScript(spell_dru_cat_form);
bool Validate(SpellInfo const* /*spellInfo*/) override
{
return ValidateSpellInfo({ SPELL_DRUID_PROWL });
}
void HandleAfterRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
GetTarget()->RemoveOwnedAura(SPELL_DRUID_PROWL);
}
void Register() override
{
AfterEffectRemove += AuraEffectRemoveFn(spell_dru_cat_form::HandleAfterRemove, EFFECT_0, SPELL_AURA_MOD_SHAPESHIFT, AURA_EFFECT_HANDLE_REAL);
}
};
// 1850 - Dash
class spell_dru_dash : public SpellScriptLoader
{
@@ -1743,7 +1766,7 @@ public:
bool Validate(SpellInfo const* /*spellInfo*/) override
{
return ValidateSpellInfo({ SPELL_DRUID_FORM_STAG, SPELL_DRUID_FORM_AQUATIC, SPELL_DRUID_FORM_FLIGHT, SPELL_DRUID_FORM_SWIFT_FLIGHT });
return ValidateSpellInfo({ SPELL_DRUID_FORM_STAG, SPELL_DRUID_FORM_AQUATIC_PASSIVE, SPELL_DRUID_FORM_AQUATIC, SPELL_DRUID_FORM_FLIGHT, SPELL_DRUID_FORM_SWIFT_FLIGHT });
}
bool Load() override
@@ -1799,13 +1822,13 @@ public:
static uint32 GetFormSpellId(Player const* player, Difficulty difficulty, bool requiresOutdoor)
{
// Check what form is appropriate
if (player->IsInWater()) // Aquatic form
if (player->HasSpell(SPELL_DRUID_FORM_AQUATIC_PASSIVE) && player->IsInWater()) // Aquatic form
return SPELL_DRUID_FORM_AQUATIC;
if (!player->IsInCombat() && player->GetSkillValue(SKILL_RIDING) >= 225 && CheckLocationForForm(player, difficulty, requiresOutdoor, SPELL_DRUID_FORM_FLIGHT) == SPELL_CAST_OK) // Flight form
return player->GetSkillValue(SKILL_RIDING) >= 300 ? SPELL_DRUID_FORM_SWIFT_FLIGHT : SPELL_DRUID_FORM_FLIGHT;
if (CheckLocationForForm(player, difficulty, requiresOutdoor, SPELL_DRUID_FORM_STAG) == SPELL_CAST_OK) // Stag form
if (!player->IsInWater() && CheckLocationForForm(player, difficulty, requiresOutdoor, SPELL_DRUID_FORM_STAG) == SPELL_CAST_OK) // Stag form
return SPELL_DRUID_FORM_STAG;
return 0;
@@ -1833,16 +1856,20 @@ public:
{
PrepareSpellScript(spell_dru_travel_form_dummy_SpellScript);
bool Validate(SpellInfo const* /*spellInfo*/) override
{
return ValidateSpellInfo({ SPELL_DRUID_FORM_AQUATIC_PASSIVE, SPELL_DRUID_FORM_AQUATIC, SPELL_DRUID_FORM_STAG });
}
SpellCastResult CheckCast()
{
Player* player = GetCaster()->ToPlayer();
if (!player)
return SPELL_FAILED_CUSTOM_ERROR;
if (player->GetSkillValue(SKILL_RIDING) < 75)
return SPELL_FAILED_APPRENTICE_RIDING_REQUIREMENT;
uint32 spellId = (player->HasSpell(SPELL_DRUID_FORM_AQUATIC_PASSIVE) && player->IsInWater()) ? SPELL_DRUID_FORM_AQUATIC : SPELL_DRUID_FORM_STAG;
SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(player->IsInWater() ? SPELL_DRUID_FORM_AQUATIC : SPELL_DRUID_FORM_STAG, GetCastDifficulty());
SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellId, GetCastDifficulty());
return spellInfo->CheckLocation(player->GetMapId(), player->GetZoneId(), player->GetAreaId(), player);
}
@@ -1904,9 +1931,16 @@ public:
};
// 252216 - Tiger Dash
class spell_dru_tiger_dash : public AuraScript
class spell_dru_tiger_dash : public spell_dru_base_transformer
{
PrepareAuraScript(spell_dru_tiger_dash);
protected:
bool ToCatForm() const override { return true; }
};
// 252216 - Tiger Dash (Aura)
class spell_dru_tiger_dash_aura : public AuraScript
{
PrepareAuraScript(spell_dru_tiger_dash_aura);
void HandlePeriodic(AuraEffect const* aurEff)
{
@@ -1919,7 +1953,7 @@ class spell_dru_tiger_dash : public AuraScript
void Register() override
{
OnEffectPeriodic += AuraEffectPeriodicFn(spell_dru_tiger_dash::HandlePeriodic, EFFECT_1, SPELL_AURA_PERIODIC_DUMMY);
OnEffectPeriodic += AuraEffectPeriodicFn(spell_dru_tiger_dash_aura::HandlePeriodic, EFFECT_1, SPELL_AURA_PERIODIC_DUMMY);
}
};
@@ -2021,6 +2055,7 @@ void AddSC_druid_spell_scripts()
RegisterSpellScript(spell_dru_berserk);
RegisterAuraScript(spell_dru_brambles);
RegisterAuraScript(spell_dru_bristling_fur);
RegisterAuraScript(spell_dru_cat_form);
new spell_dru_dash();
RegisterAuraScript(spell_dru_earthwarden);
RegisterAuraScript(spell_dru_eclipse_aura);
@@ -2061,6 +2096,6 @@ void AddSC_druid_spell_scripts()
RegisterAuraScript(spell_dru_thrash_aura);
new spell_dru_travel_form();
new spell_dru_travel_form_dummy();
RegisterAuraScript(spell_dru_tiger_dash);
RegisterSpellAndAuraScriptPair(spell_dru_tiger_dash, spell_dru_tiger_dash_aura);
new spell_dru_wild_growth();
}