@@ -0,0 +1,5 @@
|
|||||||
|
DELETE FROM `spell_proc_event` WHERE `entry` IN (48492,48494,48495);
|
||||||
|
DELETE FROM `spell_script_names` WHERE `spell_id` IN(-5217, -5229);
|
||||||
|
INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES
|
||||||
|
(-5217, "spell_dru_tiger_s_fury"),
|
||||||
|
(-5229, "spell_dru_enrage");
|
||||||
@@ -6448,30 +6448,6 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere
|
|||||||
basepoints0 = CalculatePctN(int32(damage), triggerAmount);
|
basepoints0 = CalculatePctN(int32(damage), triggerAmount);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
// King of the Jungle
|
|
||||||
else if (dummySpell->SpellIconID == 2850)
|
|
||||||
{
|
|
||||||
// Effect 0 - mod damage while having Enrage
|
|
||||||
if (effIndex == 0)
|
|
||||||
{
|
|
||||||
if (!(procSpell->SpellFamilyFlags[0] & 0x00080000) || procSpell->SpellIconID != 961)
|
|
||||||
return false;
|
|
||||||
triggered_spell_id = 51185;
|
|
||||||
basepoints0 = triggerAmount;
|
|
||||||
target = this;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
// Effect 1 - Tiger's Fury restore energy
|
|
||||||
else if (effIndex == 1)
|
|
||||||
{
|
|
||||||
if (!(procSpell->SpellFamilyFlags[2] & 0x00000800) || procSpell->SpellIconID != 1181)
|
|
||||||
return false;
|
|
||||||
triggered_spell_id = 51178;
|
|
||||||
basepoints0 = triggerAmount;
|
|
||||||
target = this;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case SPELLFAMILY_ROGUE:
|
case SPELLFAMILY_ROGUE:
|
||||||
|
|||||||
@@ -34,6 +34,36 @@ enum DruidSpells
|
|||||||
DRUID_SURVIVAL_INSTINCTS = 50322,
|
DRUID_SURVIVAL_INSTINCTS = 50322,
|
||||||
DRUID_SAVAGE_ROAR = 62071,
|
DRUID_SAVAGE_ROAR = 62071,
|
||||||
SPELL_DRUID_ITEM_T8_BALANCE_RELIC = 64950,
|
SPELL_DRUID_ITEM_T8_BALANCE_RELIC = 64950,
|
||||||
|
SPELL_KING_OF_THE_JUNGLE = 48492,
|
||||||
|
SPELL_TIGER_S_FURY_ENERGIZE = 51178,
|
||||||
|
SPELL_ENRAGE_MOD_DAMAGE = 51185,
|
||||||
|
};
|
||||||
|
|
||||||
|
class spell_dru_enrage : public SpellScriptLoader
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
spell_dru_enrage() : SpellScriptLoader("spell_dru_enrage") { }
|
||||||
|
|
||||||
|
class spell_dru_enrage_SpellScript : public SpellScript
|
||||||
|
{
|
||||||
|
PrepareSpellScript(spell_dru_enrage_SpellScript);
|
||||||
|
|
||||||
|
void OnHit()
|
||||||
|
{
|
||||||
|
if (AuraEffect const* aurEff = GetHitUnit()->GetAuraEffectOfRankedSpell(SPELL_KING_OF_THE_JUNGLE, EFFECT_0))
|
||||||
|
GetHitUnit()->CastCustomSpell(SPELL_ENRAGE_MOD_DAMAGE, SPELLVALUE_BASE_POINT0, aurEff->GetAmount(), GetHitUnit(), true);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Register()
|
||||||
|
{
|
||||||
|
AfterHit += SpellHitFn(spell_dru_enrage_SpellScript::OnHit);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
SpellScript* GetSpellScript() const
|
||||||
|
{
|
||||||
|
return new spell_dru_enrage_SpellScript();
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// 54846 Glyph of Starfire
|
// 54846 Glyph of Starfire
|
||||||
@@ -88,6 +118,115 @@ class spell_dru_glyph_of_starfire : public SpellScriptLoader
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class spell_dru_insect_swarm : public SpellScriptLoader
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
spell_dru_insect_swarm() : SpellScriptLoader("spell_dru_insect_swarm") { }
|
||||||
|
|
||||||
|
class spell_dru_insect_swarm_AuraScript : public AuraScript
|
||||||
|
{
|
||||||
|
PrepareAuraScript(spell_dru_insect_swarm_AuraScript);
|
||||||
|
|
||||||
|
void CalculateAmount(AuraEffect const* aurEff, int32 & amount, bool & /*canBeRecalculated*/)
|
||||||
|
{
|
||||||
|
if (Unit* caster = GetCaster())
|
||||||
|
if (AuraEffect const* relicAurEff = caster->GetAuraEffect(SPELL_DRUID_ITEM_T8_BALANCE_RELIC, EFFECT_0))
|
||||||
|
amount += relicAurEff->GetAmount() / aurEff->GetTotalTicks();
|
||||||
|
}
|
||||||
|
|
||||||
|
void Register()
|
||||||
|
{
|
||||||
|
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_dru_insect_swarm_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
AuraScript* GetAuraScript() const
|
||||||
|
{
|
||||||
|
return new spell_dru_insect_swarm_AuraScript();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
class spell_dru_lifebloom : public SpellScriptLoader
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
spell_dru_lifebloom() : SpellScriptLoader("spell_dru_lifebloom") { }
|
||||||
|
|
||||||
|
class spell_dru_lifebloom_AuraScript : public AuraScript
|
||||||
|
{
|
||||||
|
PrepareAuraScript(spell_dru_lifebloom_AuraScript);
|
||||||
|
|
||||||
|
bool Validate(SpellInfo const* /*spell*/)
|
||||||
|
{
|
||||||
|
if (!sSpellMgr->GetSpellInfo(DRUID_LIFEBLOOM_FINAL_HEAL))
|
||||||
|
return false;
|
||||||
|
if (!sSpellMgr->GetSpellInfo(DRUID_LIFEBLOOM_ENERGIZE))
|
||||||
|
return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void AfterRemove(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/)
|
||||||
|
{
|
||||||
|
// Final heal only on duration end
|
||||||
|
if (GetTargetApplication()->GetRemoveMode() != AURA_REMOVE_BY_EXPIRE)
|
||||||
|
return;
|
||||||
|
|
||||||
|
// final heal
|
||||||
|
int32 stack = GetStackAmount();
|
||||||
|
int32 healAmount = aurEff->GetAmount();
|
||||||
|
if (Unit* caster = GetCaster())
|
||||||
|
{
|
||||||
|
healAmount = caster->SpellHealingBonusDone(GetTarget(), GetSpellInfo(), healAmount, HEAL, stack);
|
||||||
|
healAmount = GetTarget()->SpellHealingBonusTaken(caster, GetSpellInfo(), healAmount, HEAL, stack);
|
||||||
|
|
||||||
|
GetTarget()->CastCustomSpell(GetTarget(), DRUID_LIFEBLOOM_FINAL_HEAL, &healAmount, NULL, NULL, true, NULL, aurEff, GetCasterGUID());
|
||||||
|
|
||||||
|
// restore mana
|
||||||
|
int32 returnMana = CalculatePctU(caster->GetCreateMana(), GetSpellInfo()->ManaCostPercentage) * stack / 2;
|
||||||
|
caster->CastCustomSpell(caster, DRUID_LIFEBLOOM_ENERGIZE, &returnMana, NULL, NULL, true, NULL, aurEff, GetCasterGUID());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
GetTarget()->CastCustomSpell(GetTarget(), DRUID_LIFEBLOOM_FINAL_HEAL, &healAmount, NULL, NULL, true, NULL, aurEff, GetCasterGUID());
|
||||||
|
}
|
||||||
|
|
||||||
|
void HandleDispel(DispelInfo* dispelInfo)
|
||||||
|
{
|
||||||
|
if (Unit* target = GetUnitOwner())
|
||||||
|
{
|
||||||
|
if (AuraEffect const* aurEff = GetEffect(EFFECT_1))
|
||||||
|
{
|
||||||
|
// final heal
|
||||||
|
int32 healAmount = aurEff->GetAmount();
|
||||||
|
if (Unit* caster = GetCaster())
|
||||||
|
{
|
||||||
|
healAmount = caster->SpellHealingBonusDone(target, GetSpellInfo(), healAmount, HEAL, dispelInfo->GetRemovedCharges());
|
||||||
|
healAmount = target->SpellHealingBonusTaken(caster, GetSpellInfo(), healAmount, HEAL, dispelInfo->GetRemovedCharges());
|
||||||
|
target->CastCustomSpell(target, DRUID_LIFEBLOOM_FINAL_HEAL, &healAmount, NULL, NULL, true, NULL, NULL, GetCasterGUID());
|
||||||
|
|
||||||
|
// restore mana
|
||||||
|
int32 returnMana = CalculatePctU(caster->GetCreateMana(), GetSpellInfo()->ManaCostPercentage) * dispelInfo->GetRemovedCharges() / 2;
|
||||||
|
caster->CastCustomSpell(caster, DRUID_LIFEBLOOM_ENERGIZE, &returnMana, NULL, NULL, true, NULL, NULL, GetCasterGUID());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
target->CastCustomSpell(target, DRUID_LIFEBLOOM_FINAL_HEAL, &healAmount, NULL, NULL, true, NULL, NULL, GetCasterGUID());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Register()
|
||||||
|
{
|
||||||
|
AfterEffectRemove += AuraEffectRemoveFn(spell_dru_lifebloom_AuraScript::AfterRemove, EFFECT_1, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
|
||||||
|
AfterDispel += AuraDispelFn(spell_dru_lifebloom_AuraScript::HandleDispel);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
AuraScript* GetAuraScript() const
|
||||||
|
{
|
||||||
|
return new spell_dru_lifebloom_AuraScript();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
// 69366 - Moonkin Form passive
|
// 69366 - Moonkin Form passive
|
||||||
class spell_dru_moonkin_form_passive : public SpellScriptLoader
|
class spell_dru_moonkin_form_passive : public SpellScriptLoader
|
||||||
{
|
{
|
||||||
@@ -132,6 +271,34 @@ class spell_dru_moonkin_form_passive : public SpellScriptLoader
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class spell_dru_predatory_strikes : public SpellScriptLoader
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
spell_dru_predatory_strikes() : SpellScriptLoader("spell_dru_predatory_strikes") { }
|
||||||
|
|
||||||
|
class spell_dru_predatory_strikes_AuraScript : public AuraScript
|
||||||
|
{
|
||||||
|
PrepareAuraScript(spell_dru_predatory_strikes_AuraScript);
|
||||||
|
|
||||||
|
void UpdateAmount(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
|
||||||
|
{
|
||||||
|
if (Player* target = GetTarget()->ToPlayer())
|
||||||
|
target->UpdateAttackPowerAndDamage();
|
||||||
|
}
|
||||||
|
|
||||||
|
void Register()
|
||||||
|
{
|
||||||
|
AfterEffectApply += AuraEffectApplyFn(spell_dru_predatory_strikes_AuraScript::UpdateAmount, EFFECT_ALL, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_CHANGE_AMOUNT_MASK);
|
||||||
|
AfterEffectRemove += AuraEffectRemoveFn(spell_dru_predatory_strikes_AuraScript::UpdateAmount, EFFECT_ALL, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_CHANGE_AMOUNT_MASK);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
AuraScript* GetAuraScript() const
|
||||||
|
{
|
||||||
|
return new spell_dru_predatory_strikes_AuraScript();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
// 33851 - Primal Tenacity
|
// 33851 - Primal Tenacity
|
||||||
class spell_dru_primal_tenacity : public SpellScriptLoader
|
class spell_dru_primal_tenacity : public SpellScriptLoader
|
||||||
{
|
{
|
||||||
@@ -219,274 +386,6 @@ class spell_dru_savage_defense : public SpellScriptLoader
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
class spell_dru_t10_restoration_4p_bonus : public SpellScriptLoader
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
spell_dru_t10_restoration_4p_bonus() : SpellScriptLoader("spell_dru_t10_restoration_4p_bonus") { }
|
|
||||||
|
|
||||||
class spell_dru_t10_restoration_4p_bonus_SpellScript : public SpellScript
|
|
||||||
{
|
|
||||||
PrepareSpellScript(spell_dru_t10_restoration_4p_bonus_SpellScript);
|
|
||||||
|
|
||||||
bool Load()
|
|
||||||
{
|
|
||||||
return GetCaster()->GetTypeId() == TYPEID_PLAYER;
|
|
||||||
}
|
|
||||||
|
|
||||||
void FilterTargets(std::list<WorldObject*>& targets)
|
|
||||||
{
|
|
||||||
if (!GetCaster()->ToPlayer()->GetGroup())
|
|
||||||
{
|
|
||||||
targets.clear();
|
|
||||||
targets.push_back(GetCaster());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
targets.remove(GetExplTargetUnit());
|
|
||||||
std::list<Unit*> tempTargets;
|
|
||||||
for (std::list<WorldObject*>::const_iterator itr = targets.begin(); itr != targets.end(); ++itr)
|
|
||||||
if ((*itr)->GetTypeId() == TYPEID_PLAYER && GetCaster()->IsInRaidWith((*itr)->ToUnit()))
|
|
||||||
tempTargets.push_back((*itr)->ToUnit());
|
|
||||||
|
|
||||||
if (tempTargets.empty())
|
|
||||||
{
|
|
||||||
targets.clear();
|
|
||||||
FinishCast(SPELL_FAILED_DONT_REPORT);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Unit* target = Trinity::Containers::SelectRandomContainerElement(tempTargets);
|
|
||||||
targets.clear();
|
|
||||||
targets.push_back(target);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void Register()
|
|
||||||
{
|
|
||||||
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_dru_t10_restoration_4p_bonus_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_DEST_AREA_ALLY);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
SpellScript* GetSpellScript() const
|
|
||||||
{
|
|
||||||
return new spell_dru_t10_restoration_4p_bonus_SpellScript();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
class spell_dru_starfall_aoe : public SpellScriptLoader
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
spell_dru_starfall_aoe() : SpellScriptLoader("spell_dru_starfall_aoe") { }
|
|
||||||
|
|
||||||
class spell_dru_starfall_aoe_SpellScript : public SpellScript
|
|
||||||
{
|
|
||||||
PrepareSpellScript(spell_dru_starfall_aoe_SpellScript);
|
|
||||||
|
|
||||||
void FilterTargets(std::list<WorldObject*>& targets)
|
|
||||||
{
|
|
||||||
targets.remove(GetExplTargetUnit());
|
|
||||||
}
|
|
||||||
|
|
||||||
void Register()
|
|
||||||
{
|
|
||||||
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_dru_starfall_aoe_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_DEST_AREA_ENEMY);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
SpellScript* GetSpellScript() const
|
|
||||||
{
|
|
||||||
return new spell_dru_starfall_aoe_SpellScript();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// 40121 - Swift Flight Form (Passive)
|
|
||||||
class spell_dru_swift_flight_passive : public SpellScriptLoader
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
spell_dru_swift_flight_passive() : SpellScriptLoader("spell_dru_swift_flight_passive") { }
|
|
||||||
|
|
||||||
class spell_dru_swift_flight_passive_AuraScript : public AuraScript
|
|
||||||
{
|
|
||||||
PrepareAuraScript(spell_dru_swift_flight_passive_AuraScript);
|
|
||||||
|
|
||||||
bool Load()
|
|
||||||
{
|
|
||||||
return GetCaster()->GetTypeId() == TYPEID_PLAYER;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CalculateAmount(AuraEffect const* /*aurEff*/, int32 & amount, bool & /*canBeRecalculated*/)
|
|
||||||
{
|
|
||||||
if (Player* caster = GetCaster()->ToPlayer())
|
|
||||||
if (caster->Has310Flyer(false))
|
|
||||||
amount = 310;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Register()
|
|
||||||
{
|
|
||||||
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_dru_swift_flight_passive_AuraScript::CalculateAmount, EFFECT_1, SPELL_AURA_MOD_INCREASE_VEHICLE_FLIGHT_SPEED);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
AuraScript* GetAuraScript() const
|
|
||||||
{
|
|
||||||
return new spell_dru_swift_flight_passive_AuraScript();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
class spell_dru_starfall_dummy : public SpellScriptLoader
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
spell_dru_starfall_dummy() : SpellScriptLoader("spell_dru_starfall_dummy") { }
|
|
||||||
|
|
||||||
class spell_dru_starfall_dummy_SpellScript : public SpellScript
|
|
||||||
{
|
|
||||||
PrepareSpellScript(spell_dru_starfall_dummy_SpellScript);
|
|
||||||
|
|
||||||
void FilterTargets(std::list<WorldObject*>& targets)
|
|
||||||
{
|
|
||||||
Trinity::Containers::RandomResizeList(targets, 2);
|
|
||||||
}
|
|
||||||
|
|
||||||
void HandleDummy(SpellEffIndex /*effIndex*/)
|
|
||||||
{
|
|
||||||
Unit* caster = GetCaster();
|
|
||||||
// Shapeshifting into an animal form or mounting cancels the effect
|
|
||||||
if (caster->GetCreatureType() == CREATURE_TYPE_BEAST || caster->IsMounted())
|
|
||||||
{
|
|
||||||
if (SpellInfo const* spellInfo = GetTriggeringSpell())
|
|
||||||
caster->RemoveAurasDueToSpell(spellInfo->Id);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Any effect which causes you to lose control of your character will supress the starfall effect.
|
|
||||||
if (caster->HasUnitState(UNIT_STATE_CONTROLLED))
|
|
||||||
return;
|
|
||||||
|
|
||||||
caster->CastSpell(GetHitUnit(), uint32(GetEffectValue()), true);
|
|
||||||
}
|
|
||||||
|
|
||||||
void Register()
|
|
||||||
{
|
|
||||||
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_dru_starfall_dummy_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY);
|
|
||||||
OnEffectHitTarget += SpellEffectFn(spell_dru_starfall_dummy_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
SpellScript* GetSpellScript() const
|
|
||||||
{
|
|
||||||
return new spell_dru_starfall_dummy_SpellScript();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
class spell_dru_lifebloom : public SpellScriptLoader
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
spell_dru_lifebloom() : SpellScriptLoader("spell_dru_lifebloom") { }
|
|
||||||
|
|
||||||
class spell_dru_lifebloom_AuraScript : public AuraScript
|
|
||||||
{
|
|
||||||
PrepareAuraScript(spell_dru_lifebloom_AuraScript);
|
|
||||||
|
|
||||||
bool Validate(SpellInfo const* /*spell*/)
|
|
||||||
{
|
|
||||||
if (!sSpellMgr->GetSpellInfo(DRUID_LIFEBLOOM_FINAL_HEAL))
|
|
||||||
return false;
|
|
||||||
if (!sSpellMgr->GetSpellInfo(DRUID_LIFEBLOOM_ENERGIZE))
|
|
||||||
return false;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
void AfterRemove(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/)
|
|
||||||
{
|
|
||||||
// Final heal only on duration end
|
|
||||||
if (GetTargetApplication()->GetRemoveMode() != AURA_REMOVE_BY_EXPIRE)
|
|
||||||
return;
|
|
||||||
|
|
||||||
// final heal
|
|
||||||
int32 stack = GetStackAmount();
|
|
||||||
int32 healAmount = aurEff->GetAmount();
|
|
||||||
if (Unit* caster = GetCaster())
|
|
||||||
{
|
|
||||||
healAmount = caster->SpellHealingBonusDone(GetTarget(), GetSpellInfo(), healAmount, HEAL, stack);
|
|
||||||
healAmount = GetTarget()->SpellHealingBonusTaken(caster, GetSpellInfo(), healAmount, HEAL, stack);
|
|
||||||
|
|
||||||
GetTarget()->CastCustomSpell(GetTarget(), DRUID_LIFEBLOOM_FINAL_HEAL, &healAmount, NULL, NULL, true, NULL, aurEff, GetCasterGUID());
|
|
||||||
|
|
||||||
// restore mana
|
|
||||||
int32 returnMana = CalculatePctU(caster->GetCreateMana(), GetSpellInfo()->ManaCostPercentage) * stack / 2;
|
|
||||||
caster->CastCustomSpell(caster, DRUID_LIFEBLOOM_ENERGIZE, &returnMana, NULL, NULL, true, NULL, aurEff, GetCasterGUID());
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
GetTarget()->CastCustomSpell(GetTarget(), DRUID_LIFEBLOOM_FINAL_HEAL, &healAmount, NULL, NULL, true, NULL, aurEff, GetCasterGUID());
|
|
||||||
}
|
|
||||||
|
|
||||||
void HandleDispel(DispelInfo* dispelInfo)
|
|
||||||
{
|
|
||||||
if (Unit* target = GetUnitOwner())
|
|
||||||
{
|
|
||||||
if (AuraEffect const* aurEff = GetEffect(EFFECT_1))
|
|
||||||
{
|
|
||||||
// final heal
|
|
||||||
int32 healAmount = aurEff->GetAmount();
|
|
||||||
if (Unit* caster = GetCaster())
|
|
||||||
{
|
|
||||||
healAmount = caster->SpellHealingBonusDone(target, GetSpellInfo(), healAmount, HEAL, dispelInfo->GetRemovedCharges());
|
|
||||||
healAmount = target->SpellHealingBonusTaken(caster, GetSpellInfo(), healAmount, HEAL, dispelInfo->GetRemovedCharges());
|
|
||||||
target->CastCustomSpell(target, DRUID_LIFEBLOOM_FINAL_HEAL, &healAmount, NULL, NULL, true, NULL, NULL, GetCasterGUID());
|
|
||||||
|
|
||||||
// restore mana
|
|
||||||
int32 returnMana = CalculatePctU(caster->GetCreateMana(), GetSpellInfo()->ManaCostPercentage) * dispelInfo->GetRemovedCharges() / 2;
|
|
||||||
caster->CastCustomSpell(caster, DRUID_LIFEBLOOM_ENERGIZE, &returnMana, NULL, NULL, true, NULL, NULL, GetCasterGUID());
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
target->CastCustomSpell(target, DRUID_LIFEBLOOM_FINAL_HEAL, &healAmount, NULL, NULL, true, NULL, NULL, GetCasterGUID());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void Register()
|
|
||||||
{
|
|
||||||
AfterEffectRemove += AuraEffectRemoveFn(spell_dru_lifebloom_AuraScript::AfterRemove, EFFECT_1, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
|
|
||||||
AfterDispel += AuraDispelFn(spell_dru_lifebloom_AuraScript::HandleDispel);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
AuraScript* GetAuraScript() const
|
|
||||||
{
|
|
||||||
return new spell_dru_lifebloom_AuraScript();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
class spell_dru_predatory_strikes : public SpellScriptLoader
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
spell_dru_predatory_strikes() : SpellScriptLoader("spell_dru_predatory_strikes") { }
|
|
||||||
|
|
||||||
class spell_dru_predatory_strikes_AuraScript : public AuraScript
|
|
||||||
{
|
|
||||||
PrepareAuraScript(spell_dru_predatory_strikes_AuraScript);
|
|
||||||
|
|
||||||
void UpdateAmount(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
|
|
||||||
{
|
|
||||||
if (Player* target = GetTarget()->ToPlayer())
|
|
||||||
target->UpdateAttackPowerAndDamage();
|
|
||||||
}
|
|
||||||
|
|
||||||
void Register()
|
|
||||||
{
|
|
||||||
AfterEffectApply += AuraEffectApplyFn(spell_dru_predatory_strikes_AuraScript::UpdateAmount, EFFECT_ALL, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_CHANGE_AMOUNT_MASK);
|
|
||||||
AfterEffectRemove += AuraEffectRemoveFn(spell_dru_predatory_strikes_AuraScript::UpdateAmount, EFFECT_ALL, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_CHANGE_AMOUNT_MASK);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
AuraScript* GetAuraScript() const
|
|
||||||
{
|
|
||||||
return new spell_dru_predatory_strikes_AuraScript();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
class spell_dru_savage_roar : public SpellScriptLoader
|
class spell_dru_savage_roar : public SpellScriptLoader
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@@ -551,6 +450,77 @@ class spell_dru_savage_roar : public SpellScriptLoader
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class spell_dru_starfall_aoe : public SpellScriptLoader
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
spell_dru_starfall_aoe() : SpellScriptLoader("spell_dru_starfall_aoe") { }
|
||||||
|
|
||||||
|
class spell_dru_starfall_aoe_SpellScript : public SpellScript
|
||||||
|
{
|
||||||
|
PrepareSpellScript(spell_dru_starfall_aoe_SpellScript);
|
||||||
|
|
||||||
|
void FilterTargets(std::list<WorldObject*>& targets)
|
||||||
|
{
|
||||||
|
targets.remove(GetExplTargetUnit());
|
||||||
|
}
|
||||||
|
|
||||||
|
void Register()
|
||||||
|
{
|
||||||
|
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_dru_starfall_aoe_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_DEST_AREA_ENEMY);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
SpellScript* GetSpellScript() const
|
||||||
|
{
|
||||||
|
return new spell_dru_starfall_aoe_SpellScript();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
class spell_dru_starfall_dummy : public SpellScriptLoader
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
spell_dru_starfall_dummy() : SpellScriptLoader("spell_dru_starfall_dummy") { }
|
||||||
|
|
||||||
|
class spell_dru_starfall_dummy_SpellScript : public SpellScript
|
||||||
|
{
|
||||||
|
PrepareSpellScript(spell_dru_starfall_dummy_SpellScript);
|
||||||
|
|
||||||
|
void FilterTargets(std::list<WorldObject*>& targets)
|
||||||
|
{
|
||||||
|
Trinity::Containers::RandomResizeList(targets, 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
void HandleDummy(SpellEffIndex /*effIndex*/)
|
||||||
|
{
|
||||||
|
Unit* caster = GetCaster();
|
||||||
|
// Shapeshifting into an animal form or mounting cancels the effect
|
||||||
|
if (caster->GetCreatureType() == CREATURE_TYPE_BEAST || caster->IsMounted())
|
||||||
|
{
|
||||||
|
if (SpellInfo const* spellInfo = GetTriggeringSpell())
|
||||||
|
caster->RemoveAurasDueToSpell(spellInfo->Id);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Any effect which causes you to lose control of your character will supress the starfall effect.
|
||||||
|
if (caster->HasUnitState(UNIT_STATE_CONTROLLED))
|
||||||
|
return;
|
||||||
|
|
||||||
|
caster->CastSpell(GetHitUnit(), uint32(GetEffectValue()), true);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Register()
|
||||||
|
{
|
||||||
|
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_dru_starfall_dummy_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY);
|
||||||
|
OnEffectHitTarget += SpellEffectFn(spell_dru_starfall_dummy_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
SpellScript* GetSpellScript() const
|
||||||
|
{
|
||||||
|
return new spell_dru_starfall_dummy_SpellScript();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
class spell_dru_survival_instincts : public SpellScriptLoader
|
class spell_dru_survival_instincts : public SpellScriptLoader
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@@ -616,47 +586,136 @@ class spell_dru_survival_instincts : public SpellScriptLoader
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
class spell_dru_insect_swarm : public SpellScriptLoader
|
// 40121 - Swift Flight Form (Passive)
|
||||||
|
class spell_dru_swift_flight_passive : public SpellScriptLoader
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
spell_dru_insect_swarm() : SpellScriptLoader("spell_dru_insect_swarm") { }
|
spell_dru_swift_flight_passive() : SpellScriptLoader("spell_dru_swift_flight_passive") { }
|
||||||
|
|
||||||
class spell_dru_insect_swarm_AuraScript : public AuraScript
|
class spell_dru_swift_flight_passive_AuraScript : public AuraScript
|
||||||
{
|
{
|
||||||
PrepareAuraScript(spell_dru_insect_swarm_AuraScript);
|
PrepareAuraScript(spell_dru_swift_flight_passive_AuraScript);
|
||||||
|
|
||||||
void CalculateAmount(AuraEffect const* aurEff, int32 & amount, bool & /*canBeRecalculated*/)
|
bool Load()
|
||||||
{
|
{
|
||||||
if (Unit* caster = GetCaster())
|
return GetCaster()->GetTypeId() == TYPEID_PLAYER;
|
||||||
if (AuraEffect const* relicAurEff = caster->GetAuraEffect(SPELL_DRUID_ITEM_T8_BALANCE_RELIC, EFFECT_0))
|
}
|
||||||
amount += relicAurEff->GetAmount() / aurEff->GetTotalTicks();
|
|
||||||
|
void CalculateAmount(AuraEffect const* /*aurEff*/, int32 & amount, bool & /*canBeRecalculated*/)
|
||||||
|
{
|
||||||
|
if (Player* caster = GetCaster()->ToPlayer())
|
||||||
|
if (caster->Has310Flyer(false))
|
||||||
|
amount = 310;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Register()
|
void Register()
|
||||||
{
|
{
|
||||||
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_dru_insect_swarm_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE);
|
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_dru_swift_flight_passive_AuraScript::CalculateAmount, EFFECT_1, SPELL_AURA_MOD_INCREASE_VEHICLE_FLIGHT_SPEED);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
AuraScript* GetAuraScript() const
|
AuraScript* GetAuraScript() const
|
||||||
{
|
{
|
||||||
return new spell_dru_insect_swarm_AuraScript();
|
return new spell_dru_swift_flight_passive_AuraScript();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
class spell_dru_tiger_s_fury : public SpellScriptLoader
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
spell_dru_tiger_s_fury() : SpellScriptLoader("spell_dru_tiger_s_fury") { }
|
||||||
|
|
||||||
|
class spell_dru_tiger_s_fury_SpellScript : public SpellScript
|
||||||
|
{
|
||||||
|
PrepareSpellScript(spell_dru_tiger_s_fury_SpellScript);
|
||||||
|
|
||||||
|
void OnHit()
|
||||||
|
{
|
||||||
|
if (AuraEffect const* aurEff = GetHitUnit()->GetAuraEffectOfRankedSpell(SPELL_KING_OF_THE_JUNGLE, EFFECT_1))
|
||||||
|
GetHitUnit()->CastCustomSpell(SPELL_TIGER_S_FURY_ENERGIZE, SPELLVALUE_BASE_POINT0, aurEff->GetAmount(), GetHitUnit(), true);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Register()
|
||||||
|
{
|
||||||
|
AfterHit += SpellHitFn(spell_dru_tiger_s_fury_SpellScript::OnHit);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
SpellScript* GetSpellScript() const
|
||||||
|
{
|
||||||
|
return new spell_dru_tiger_s_fury_SpellScript();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
class spell_dru_t10_restoration_4p_bonus : public SpellScriptLoader
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
spell_dru_t10_restoration_4p_bonus() : SpellScriptLoader("spell_dru_t10_restoration_4p_bonus") { }
|
||||||
|
|
||||||
|
class spell_dru_t10_restoration_4p_bonus_SpellScript : public SpellScript
|
||||||
|
{
|
||||||
|
PrepareSpellScript(spell_dru_t10_restoration_4p_bonus_SpellScript);
|
||||||
|
|
||||||
|
bool Load()
|
||||||
|
{
|
||||||
|
return GetCaster()->GetTypeId() == TYPEID_PLAYER;
|
||||||
|
}
|
||||||
|
|
||||||
|
void FilterTargets(std::list<WorldObject*>& targets)
|
||||||
|
{
|
||||||
|
if (!GetCaster()->ToPlayer()->GetGroup())
|
||||||
|
{
|
||||||
|
targets.clear();
|
||||||
|
targets.push_back(GetCaster());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
targets.remove(GetExplTargetUnit());
|
||||||
|
std::list<Unit*> tempTargets;
|
||||||
|
for (std::list<WorldObject*>::const_iterator itr = targets.begin(); itr != targets.end(); ++itr)
|
||||||
|
if ((*itr)->GetTypeId() == TYPEID_PLAYER && GetCaster()->IsInRaidWith((*itr)->ToUnit()))
|
||||||
|
tempTargets.push_back((*itr)->ToUnit());
|
||||||
|
|
||||||
|
if (tempTargets.empty())
|
||||||
|
{
|
||||||
|
targets.clear();
|
||||||
|
FinishCast(SPELL_FAILED_DONT_REPORT);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Unit* target = Trinity::Containers::SelectRandomContainerElement(tempTargets);
|
||||||
|
targets.clear();
|
||||||
|
targets.push_back(target);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Register()
|
||||||
|
{
|
||||||
|
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_dru_t10_restoration_4p_bonus_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_DEST_AREA_ALLY);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
SpellScript* GetSpellScript() const
|
||||||
|
{
|
||||||
|
return new spell_dru_t10_restoration_4p_bonus_SpellScript();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
void AddSC_druid_spell_scripts()
|
void AddSC_druid_spell_scripts()
|
||||||
{
|
{
|
||||||
|
new spell_dru_enrage();
|
||||||
new spell_dru_glyph_of_starfire();
|
new spell_dru_glyph_of_starfire();
|
||||||
|
new spell_dru_insect_swarm();
|
||||||
|
new spell_dru_lifebloom();
|
||||||
new spell_dru_moonkin_form_passive();
|
new spell_dru_moonkin_form_passive();
|
||||||
|
new spell_dru_predatory_strikes();
|
||||||
new spell_dru_primal_tenacity();
|
new spell_dru_primal_tenacity();
|
||||||
new spell_dru_savage_defense();
|
new spell_dru_savage_defense();
|
||||||
new spell_dru_t10_restoration_4p_bonus();
|
|
||||||
new spell_dru_starfall_aoe();
|
|
||||||
new spell_dru_swift_flight_passive();
|
|
||||||
new spell_dru_starfall_dummy();
|
|
||||||
new spell_dru_lifebloom();
|
|
||||||
new spell_dru_predatory_strikes();
|
|
||||||
new spell_dru_savage_roar();
|
new spell_dru_savage_roar();
|
||||||
|
new spell_dru_starfall_aoe();
|
||||||
|
new spell_dru_starfall_dummy();
|
||||||
new spell_dru_survival_instincts();
|
new spell_dru_survival_instincts();
|
||||||
new spell_dru_insect_swarm();
|
new spell_dru_swift_flight_passive();
|
||||||
|
new spell_dru_tiger_s_fury();
|
||||||
|
new spell_dru_t10_restoration_4p_bonus();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user