Advertisement
Guest User

Untitled

a guest
May 24th, 2016
46
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.50 KB | None | 0 0
  1. class SearingAndGravitySelector
  2. {
  3. public:
  4.     SearingAndGravitySelector(uint32 auraId1, uint32 auraId2, uint32 auraId3, uint32 auraId4, uint32 auraId5) : _auraId1(auraId1), _auraId2(auraId2), _auraId3(auraId3),
  5.         _auraId4(auraId4), _auraId5(auraId5) { }
  6.  
  7.     bool operator()(WorldObject* object)
  8.     {
  9.         if (object->ToUnit() && object->ToUnit()->HasAura(_auraId1) || object->ToUnit()->HasAura(_auraId2) || object->ToUnit()->HasAura(_auraId3)
  10.             || object->ToUnit()->HasAura(_auraId4) || object->ToUnit()->HasAura(_auraId5))
  11.             return true;
  12.  
  13.         return false;
  14.     }
  15.  
  16. private:
  17.     uint32 _auraId1, _auraId2, _auraId3, _auraId4, _auraId5;
  18. };
  19.  
  20. class spell_xt002_searing_light_spawn_life_spark : public SpellScriptLoader
  21. {
  22. public:
  23.     spell_xt002_searing_light_spawn_life_spark() : SpellScriptLoader("spell_xt002_searing_light_spawn_life_spark") { }
  24.  
  25.     class spell_xt002_searing_light_spawn_life_spark_AuraScript : public AuraScript
  26.     {
  27.         PrepareAuraScript(spell_xt002_searing_light_spawn_life_spark_AuraScript);
  28.  
  29.         bool Validate(SpellInfo const* /*spell*/) override
  30.         {
  31.             if (!sSpellMgr->GetSpellInfo(SPELL_SUMMON_LIFE_SPARK))
  32.                 return false;
  33.             return true;
  34.         }
  35.  
  36.         void OnRemove(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/)
  37.         {
  38.             if (!GetOwner())
  39.                 return;
  40.  
  41.             if (Player* player = GetOwner()->ToPlayer())
  42.                 if (Unit* xt002 = GetCaster())
  43.                     if (xt002->HasAura(aurEff->GetAmount()))   // Heartbreak aura indicating hard mode
  44.                         xt002->CastSpell(player, SPELL_SUMMON_LIFE_SPARK, true);
  45.         }
  46.  
  47.         void Register() override
  48.         {
  49.             AfterEffectRemove += AuraEffectRemoveFn(spell_xt002_searing_light_spawn_life_spark_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL, AURA_EFFECT_HANDLE_REAL);
  50.         }
  51.     };
  52.  
  53.  
  54.     class spell_xt002_searing_light_spawn_life_spark_SpellScript : public SpellScript
  55.     {
  56.         PrepareSpellScript(spell_xt002_searing_light_spawn_life_spark_SpellScript);
  57.  
  58.         void FilterTargets(std::list<WorldObject*>& targets)
  59.         {
  60.             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));
  61.  
  62.             if (!targets.empty())
  63.                 if (WorldObject* player = Trinity::Containers::SelectRandomContainerElement(targets))
  64.                 {
  65.                     targets.clear();
  66.                     targets.push_back(player);
  67.                 }
  68.         }
  69.  
  70.         void Register() override
  71.         {
  72.             OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_xt002_searing_light_spawn_life_spark_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_DEST_AREA_ENEMY);
  73.             OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_xt002_searing_light_spawn_life_spark_SpellScript::FilterTargets, EFFECT_1, TARGET_UNIT_DEST_AREA_ENEMY);
  74.         }
  75.     };
  76.  
  77.     SpellScript* GetSpellScript() const override
  78.     {
  79.         return new spell_xt002_searing_light_spawn_life_spark_SpellScript();
  80.     }
  81.  
  82.     AuraScript* GetAuraScript() const override
  83.     {
  84.         return new spell_xt002_searing_light_spawn_life_spark_AuraScript();
  85.     }
  86. };
  87.  
  88. class spell_xt002_gravity_bomb_aura : public SpellScriptLoader
  89. {
  90. public:
  91.     spell_xt002_gravity_bomb_aura() : SpellScriptLoader("spell_xt002_gravity_bomb_aura") { }
  92.  
  93.     class spell_xt002_gravity_bomb_aura_AuraScript : public AuraScript
  94.     {
  95.         PrepareAuraScript(spell_xt002_gravity_bomb_aura_AuraScript);
  96.  
  97.         bool Validate(SpellInfo const* /*spell*/) override
  98.         {
  99.             if (!sSpellMgr->GetSpellInfo(SPELL_SUMMON_VOID_ZONE))
  100.                 return false;
  101.             return true;
  102.         }
  103.  
  104.         void OnRemove(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/)
  105.         {
  106.             if (!GetOwner())
  107.                 return;
  108.  
  109.             if (Player* player = GetOwner()->ToPlayer())
  110.                 if (Unit* xt002 = GetCaster())
  111.                     if (xt002->HasAura(aurEff->GetAmount()))   // Heartbreak aura indicating hard mode
  112.                         xt002->CastSpell(player, SPELL_SUMMON_VOID_ZONE, true);
  113.         }
  114.  
  115.         void OnPeriodic(AuraEffect const* aurEff)
  116.         {
  117.             Unit* xt002 = GetCaster();
  118.             if (!xt002)
  119.                 return;
  120.  
  121.             if (!GetOwner())
  122.                 return;
  123.  
  124.             Unit* owner = GetOwner()->ToUnit();
  125.             if (!owner)
  126.                 return;
  127.  
  128.             if (aurEff->GetAmount() >= int32(owner->GetHealth()))
  129.                 if (xt002->GetAI())
  130.                     xt002->GetAI()->SetData(DATA_GRAVITY_BOMB_CASUALTY, 1);
  131.         }
  132.  
  133.         void Register() override
  134.         {
  135.             OnEffectPeriodic += AuraEffectPeriodicFn(spell_xt002_gravity_bomb_aura_AuraScript::OnPeriodic, EFFECT_2, SPELL_AURA_PERIODIC_DAMAGE);
  136.             AfterEffectRemove += AuraEffectRemoveFn(spell_xt002_gravity_bomb_aura_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL, AURA_EFFECT_HANDLE_REAL);
  137.         }
  138.     };
  139.  
  140.     class spell_xt002_gravity_bomb_aura_SpellScript : public SpellScript
  141.     {
  142.         PrepareSpellScript(spell_xt002_gravity_bomb_aura_SpellScript);
  143.  
  144.         void FilterTargets(std::list<WorldObject*>& targets)
  145.         {
  146.             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));
  147.  
  148.             if (!targets.empty())
  149.                 if (WorldObject* player = Trinity::Containers::SelectRandomContainerElement(targets))
  150.                 {
  151.                     targets.clear();
  152.                     targets.push_back(player);
  153.                 }
  154.         }
  155.  
  156.         void Register() override
  157.         {
  158.             OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_xt002_gravity_bomb_aura_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_DEST_AREA_ENEMY);
  159.             OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_xt002_gravity_bomb_aura_SpellScript::FilterTargets, EFFECT_2, TARGET_UNIT_DEST_AREA_ENEMY);
  160.  
  161.         }
  162.     };
  163.  
  164.     SpellScript* GetSpellScript() const override
  165.     {
  166.         return new spell_xt002_gravity_bomb_aura_SpellScript();
  167.     }
  168.  
  169.     AuraScript* GetAuraScript() const override
  170.     {
  171.         return new spell_xt002_gravity_bomb_aura_AuraScript();
  172.     }
  173. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement