Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class SearingAndGravitySelector
- {
- public:
- SearingAndGravitySelector(uint32 auraId1, uint32 auraId2, uint32 auraId3, uint32 auraId4, uint32 auraId5) : _auraId1(auraId1), _auraId2(auraId2), _auraId3(auraId3),
- _auraId4(auraId4), _auraId5(auraId5) { }
- bool operator()(WorldObject* object)
- {
- if (object->ToUnit() && object->ToUnit()->HasAura(_auraId1) || object->ToUnit()->HasAura(_auraId2) || object->ToUnit()->HasAura(_auraId3)
- || object->ToUnit()->HasAura(_auraId4) || object->ToUnit()->HasAura(_auraId5))
- return true;
- return false;
- }
- private:
- uint32 _auraId1, _auraId2, _auraId3, _auraId4, _auraId5;
- };
- class spell_xt002_searing_light_spawn_life_spark : public SpellScriptLoader
- {
- public:
- spell_xt002_searing_light_spawn_life_spark() : SpellScriptLoader("spell_xt002_searing_light_spawn_life_spark") { }
- class spell_xt002_searing_light_spawn_life_spark_AuraScript : public AuraScript
- {
- PrepareAuraScript(spell_xt002_searing_light_spawn_life_spark_AuraScript);
- bool Validate(SpellInfo const* /*spell*/) override
- {
- if (!sSpellMgr->GetSpellInfo(SPELL_SUMMON_LIFE_SPARK))
- return false;
- return true;
- }
- void OnRemove(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/)
- {
- if (!GetOwner())
- return;
- if (Player* player = GetOwner()->ToPlayer())
- if (Unit* xt002 = GetCaster())
- if (xt002->HasAura(aurEff->GetAmount())) // Heartbreak aura indicating hard mode
- xt002->CastSpell(player, SPELL_SUMMON_LIFE_SPARK, true);
- }
- void Register() override
- {
- AfterEffectRemove += AuraEffectRemoveFn(spell_xt002_searing_light_spawn_life_spark_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL, AURA_EFFECT_HANDLE_REAL);
- }
- };
- class spell_xt002_searing_light_spawn_life_spark_SpellScript : public SpellScript
- {
- PrepareSpellScript(spell_xt002_searing_light_spawn_life_spark_SpellScript);
- void FilterTargets(std::list<WorldObject*>& targets)
- {
- targets.remove_if(SearingAndGravitySelector(SPELL_SEARING_LIGHT_10, SPELL_SEARING_LIGHT_25, SPELL_GRAVITY_BOMB_10, SPELL_GRAVITY_BOMB_25, SPELL_BOSS_HITTIN_YA_AURA));
- if (!targets.empty())
- if (WorldObject* player = Trinity::Containers::SelectRandomContainerElement(targets))
- {
- targets.clear();
- targets.push_back(player);
- }
- }
- void Register() override
- {
- OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_xt002_searing_light_spawn_life_spark_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_DEST_AREA_ENEMY);
- OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_xt002_searing_light_spawn_life_spark_SpellScript::FilterTargets, EFFECT_1, TARGET_UNIT_DEST_AREA_ENEMY);
- }
- };
- SpellScript* GetSpellScript() const override
- {
- return new spell_xt002_searing_light_spawn_life_spark_SpellScript();
- }
- AuraScript* GetAuraScript() const override
- {
- return new spell_xt002_searing_light_spawn_life_spark_AuraScript();
- }
- };
- class spell_xt002_gravity_bomb_aura : public SpellScriptLoader
- {
- public:
- spell_xt002_gravity_bomb_aura() : SpellScriptLoader("spell_xt002_gravity_bomb_aura") { }
- class spell_xt002_gravity_bomb_aura_AuraScript : public AuraScript
- {
- PrepareAuraScript(spell_xt002_gravity_bomb_aura_AuraScript);
- bool Validate(SpellInfo const* /*spell*/) override
- {
- if (!sSpellMgr->GetSpellInfo(SPELL_SUMMON_VOID_ZONE))
- return false;
- return true;
- }
- void OnRemove(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/)
- {
- if (!GetOwner())
- return;
- if (Player* player = GetOwner()->ToPlayer())
- if (Unit* xt002 = GetCaster())
- if (xt002->HasAura(aurEff->GetAmount())) // Heartbreak aura indicating hard mode
- xt002->CastSpell(player, SPELL_SUMMON_VOID_ZONE, true);
- }
- void OnPeriodic(AuraEffect const* aurEff)
- {
- Unit* xt002 = GetCaster();
- if (!xt002)
- return;
- if (!GetOwner())
- return;
- Unit* owner = GetOwner()->ToUnit();
- if (!owner)
- return;
- if (aurEff->GetAmount() >= int32(owner->GetHealth()))
- if (xt002->GetAI())
- xt002->GetAI()->SetData(DATA_GRAVITY_BOMB_CASUALTY, 1);
- }
- void Register() override
- {
- OnEffectPeriodic += AuraEffectPeriodicFn(spell_xt002_gravity_bomb_aura_AuraScript::OnPeriodic, EFFECT_2, SPELL_AURA_PERIODIC_DAMAGE);
- AfterEffectRemove += AuraEffectRemoveFn(spell_xt002_gravity_bomb_aura_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL, AURA_EFFECT_HANDLE_REAL);
- }
- };
- class spell_xt002_gravity_bomb_aura_SpellScript : public SpellScript
- {
- PrepareSpellScript(spell_xt002_gravity_bomb_aura_SpellScript);
- void FilterTargets(std::list<WorldObject*>& targets)
- {
- targets.remove_if(SearingAndGravitySelector(SPELL_SEARING_LIGHT_10, SPELL_SEARING_LIGHT_25, SPELL_GRAVITY_BOMB_10, SPELL_GRAVITY_BOMB_25, SPELL_BOSS_HITTIN_YA_AURA));
- if (!targets.empty())
- if (WorldObject* player = Trinity::Containers::SelectRandomContainerElement(targets))
- {
- targets.clear();
- targets.push_back(player);
- }
- }
- void Register() override
- {
- OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_xt002_gravity_bomb_aura_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_DEST_AREA_ENEMY);
- OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_xt002_gravity_bomb_aura_SpellScript::FilterTargets, EFFECT_2, TARGET_UNIT_DEST_AREA_ENEMY);
- }
- };
- SpellScript* GetSpellScript() const override
- {
- return new spell_xt002_gravity_bomb_aura_SpellScript();
- }
- AuraScript* GetAuraScript() const override
- {
- return new spell_xt002_gravity_bomb_aura_AuraScript();
- }
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement