Core/Spells:

* fixed Hunter Fervor talent
* fixed Hunter Killing Streak talent
* fixed Crouching Tiger, Hidden Chimera talent
* allow controlled units to proc the auras of their owner when dealing spell damage
This commit is contained in:
Ovahlord committed 2020-08-23 00:51:52 +02:00
1 parent 1507ca0179
commit 5be03870b5
4 files changed
+159 -3

No files matched your search

@@ -0,0 +1,18 @@
DELETE FROM `spell_script_names` WHERE `ScriptName` IN
('spell_hun_fervor',
'spell_hun_killing_streak',
'spell_hun_crouching_tiger_hidden_chimera');
INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
(82726, 'spell_hun_fervor'),
(-82748, 'spell_hun_killing_streak'),
(-82898, 'spell_hun_crouching_tiger_hidden_chimera');
DELETE FROM `spell_proc` WHERE `SpellId` IN (-82748, 94006, 94007, -82898);
INSERT INTO `spell_proc` (`SpellId`, `SpellFamilyName`, `SpellFamilyMask1`, `ProcFlags`, `SpellTypeMask`, `SpellPhaseMask`, `HitMask`, `Chance`, `AttributesMask`) VALUES
(-82748, 9, 0x800, 0x00055554, 1, 2, 0, 100, 0x20),
(94006, 9, 0x800, 0, 4, 2, 0, 0, 0x8 | 0x20),
(94007, 9, 0x800, 0, 4, 2, 0, 0, 0x8 | 0x20);
INSERT INTO `spell_proc` (`SpellId`, `Cooldown`) VALUES
(-82898, 2000);
+4
View File
@@ -2676,6 +2676,10 @@ void Spell::DoAllEffectOnTarget(TargetInfo* target)
DamageInfo spellDamageInfo(damageInfo, SPELL_DIRECT_DAMAGE, m_attackType, hitMask);
caster->ProcSkillsAndAuras(unitTarget, procAttacker, procVictim, PROC_SPELL_TYPE_DAMAGE, PROC_SPELL_PHASE_HIT, hitMask, this, &spellDamageInfo, nullptr);
// Controlled units should trigger procs for their owner as well
if (Unit* owner = caster->GetOwner())
owner->ProcSkillsAndAuras(unitTarget, procAttacker, procVictim, PROC_SPELL_TYPE_DAMAGE, PROC_SPELL_PHASE_HIT, hitMask, this, &spellDamageInfo, nullptr);
if (caster->GetTypeId() == TYPEID_PLAYER && !m_spellInfo->HasAttribute(SPELL_ATTR0_STOP_ATTACK_TARGET) && !m_spellInfo->HasAttribute(SPELL_ATTR4_CANT_TRIGGER_ITEM_SPELLS) &&
(m_spellInfo->DmgClass == SPELL_DAMAGE_CLASS_MELEE || m_spellInfo->DmgClass == SPELL_DAMAGE_CLASS_RANGED))
caster->ToPlayer()->CastItemCombatSpell(spellDamageInfo);
+137
View File
@@ -45,6 +45,9 @@ enum HunterSpells
SPELL_HUNTER_CAMOUFLAGE_PERIODIC_TRIGGERED = 80325,
SPELL_HUNTER_CHIMERA_SHOT = 53209,
SPELL_HUNTER_CHIMERA_SHOT_HEAL = 53353,
SPELL_HUNTER_DISENGAGE = 781,
SPELL_HUNTER_DETERRENCE = 19263,
SPELL_HUNTER_FERVOR_PET_ENERGIZE = 82728,
SPELL_HUNTER_FIRE = 82926,
SPELL_HUNTER_FRENZY_EFFECT = 19615,
SPELL_HUNTER_FOCUS_FIRE_ENERGIZE = 83468,
@@ -56,6 +59,8 @@ enum HunterSpells
SPELL_HUNTER_INSANITY = 95809,
SPELL_HUNTER_INVIGORATION_TRIGGERED = 53398,
SPELL_HUNTER_GLYPH_OF_KILL_SHOT_COOLDOWN = 90967,
SPELL_HUNTER_KILLING_STREAK_TRIGGERED_R1 = 94006,
SPELL_HUNTER_KILLING_STREAK_TRIGGERED_R2 = 94007,
SPELL_HUNTER_LOCK_AND_LOAD = 56453,
SPELL_HUNTER_MARKED_FOR_DEATH_TRIGGERED = 88691,
SPELL_HUNTER_MASTERS_CALL_TRIGGERED = 62305,
@@ -1717,6 +1722,135 @@ class spell_hun_kill_command: public SpellScript
}
};
// 82726 - Fervor
class spell_hun_fervor : public SpellScript
{
PrepareSpellScript(spell_hun_fervor);
bool Load() override
{
return GetCaster()->IsPlayer();
}
bool Validate(SpellInfo const* /*spellInfo*/) override
{
return ValidateSpellInfo({ SPELL_HUNTER_FERVOR_PET_ENERGIZE });
}
void HandleScriptEffect(SpellEffIndex /*effIndex*/)
{
Unit* caster = GetCaster();
if (!caster)
return;
Player* player = caster->ToPlayer();
if (Pet* pet = player->GetPet())
player->CastSpell(pet, SPELL_HUNTER_FERVOR_PET_ENERGIZE, true);
}
void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_hun_fervor::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_ENERGIZE);
}
};
std::array<uint32, 2> const KillingStreakTriggerSpells =
{
SPELL_HUNTER_KILLING_STREAK_TRIGGERED_R1,
SPELL_HUNTER_KILLING_STREAK_TRIGGERED_R2
};
// -82748 - Killing Streak
class spell_hun_killing_streak : public AuraScript
{
PrepareAuraScript(spell_hun_killing_streak);
bool Validate(SpellInfo const* /*spellInfo*/) override
{
return ValidateSpellInfo(
{
SPELL_HUNTER_KILLING_STREAK_TRIGGERED_R1,
SPELL_HUNTER_KILLING_STREAK_TRIGGERED_R2
});
}
void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
{
PreventDefaultAction();
if (!(eventInfo.GetHitMask() & PROC_HIT_CRITICAL))
_firstCrit = false;
else
{
if (_firstCrit)
{
GetTarget()->CastSpell(GetTarget(), KillingStreakTriggerSpells[GetSpellInfo()->GetRank() - 1], true, nullptr, aurEff);
_firstCrit = false;
}
else
_firstCrit = true;
}
}
void Register() override
{
OnEffectProc += AuraEffectProcFn(spell_hun_killing_streak::HandleProc, EFFECT_0, SPELL_AURA_DUMMY);
}
private:
bool _firstCrit = false;
};
// -82898 - Crouching Tiger, Hidden Chimera
class spell_hun_crouching_tiger_hidden_chimera : public AuraScript
{
PrepareAuraScript(spell_hun_crouching_tiger_hidden_chimera);
bool Load() override
{
return GetCaster()->IsPlayer();
}
bool CheckProc(ProcEventInfo& eventInfo)
{
return eventInfo.GetDamageInfo();
}
bool Validate(SpellInfo const* /*spellInfo*/) override
{
return ValidateSpellInfo(
{
SPELL_HUNTER_DISENGAGE,
SPELL_HUNTER_DETERRENCE
});
}
void HandleDisengageProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
{
PreventDefaultAction();
if (eventInfo.GetDamageInfo()->GetAttackType() != BASE_ATTACK && eventInfo.GetDamageInfo()->GetAttackType() != OFF_ATTACK)
return;
GetTarget()->GetSpellHistory()->ModifyCooldown(SPELL_HUNTER_DISENGAGE, -aurEff->GetAmount());
}
void HandleDeterrenceProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
{
PreventDefaultAction();
if (eventInfo.GetDamageInfo()->GetAttackType() != RANGED_ATTACK)
return;
GetTarget()->GetSpellHistory()->ModifyCooldown(SPELL_HUNTER_DETERRENCE, -aurEff->GetAmount());
}
void Register() override
{
DoCheckProc += AuraCheckProcFn(spell_hun_crouching_tiger_hidden_chimera::CheckProc);
OnEffectProc += AuraEffectProcFn(spell_hun_crouching_tiger_hidden_chimera::HandleDisengageProc, EFFECT_0, SPELL_AURA_DUMMY);
OnEffectProc += AuraEffectProcFn(spell_hun_crouching_tiger_hidden_chimera::HandleDeterrenceProc, EFFECT_1, SPELL_AURA_DUMMY);
}
};
void AddSC_hunter_spell_scripts()
{
new spell_hun_ancient_hysteria();
@@ -1726,13 +1860,16 @@ void AddSC_hunter_spell_scripts()
RegisterAuraScript(spell_hun_camouflage_triggered);
new spell_hun_chimera_shot();
new spell_hun_cobra_shot();
RegisterAuraScript(spell_hun_crouching_tiger_hidden_chimera);
new spell_hun_disengage();
RegisterSpellScript(spell_hun_fervor);
new spell_hun_fire();
RegisterAuraScript(spell_hun_focus_fire);
RegisterAuraScript(spell_hun_frenzy_effect);
RegisterAuraScript(spell_hun_glyph_of_kill_shot);
new spell_hun_improved_mend_pet();
RegisterSpellScript(spell_hun_invigoration);
RegisterAuraScript(spell_hun_killing_streak);
RegisterSpellScript(spell_hun_kill_command);
new spell_hun_last_stand_pet();
new spell_hun_lock_and_load();
@@ -1868,9 +1868,6 @@ class spell_warl_burning_embers : public AuraScript
{
PreventDefaultAction();
Unit* target = GetTarget();
if (target->IsCreature() && target->GetOwner())
target = GetTarget()->GetOwner();
uint8 maxTicks = sSpellMgr->AssertSpellInfo(SPELL_WARLOCK_BURNING_EMBERS_DAMAGE)->GetMaxTicks();
int32 damageBp = CalculatePct(eventInfo.GetDamageInfo()->GetDamage(), aurEff->GetAmount()) / maxTicks;
float coefficient = GetSpellInfo()->GetRank() * 0.7f;