Scripts/Icecrown Citadel
* Replaced custom check classes with new Trinity::UnitAuraCheck * Rotface will no longer select separate players for each effect of Mutated Infection Closes #2866
This commit is contained in:
@@ -684,20 +684,6 @@ class spell_blood_queen_bloodbolt : public SpellScriptLoader
|
||||
}
|
||||
};
|
||||
|
||||
class PactOfTheDarkfallenCheck
|
||||
{
|
||||
public:
|
||||
PactOfTheDarkfallenCheck(bool hasPact) : _hasPact(hasPact) { }
|
||||
|
||||
bool operator() (Unit* unit)
|
||||
{
|
||||
return unit->HasAura(SPELL_PACT_OF_THE_DARKFALLEN) == _hasPact;
|
||||
}
|
||||
|
||||
private:
|
||||
bool _hasPact;
|
||||
};
|
||||
|
||||
class spell_blood_queen_pact_of_the_darkfallen : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
@@ -709,7 +695,7 @@ class spell_blood_queen_pact_of_the_darkfallen : public SpellScriptLoader
|
||||
|
||||
void FilterTargets(std::list<Unit*>& unitList)
|
||||
{
|
||||
unitList.remove_if(PactOfTheDarkfallenCheck(false));
|
||||
unitList.remove_if(Trinity::UnitAuraCheck(false, SPELL_PACT_OF_THE_DARKFALLEN));
|
||||
|
||||
bool remove = true;
|
||||
std::list<Unit*>::const_iterator itrEnd = unitList.end(), itr, itr2;
|
||||
@@ -795,7 +781,7 @@ class spell_blood_queen_pact_of_the_darkfallen_dmg_target : public SpellScriptLo
|
||||
|
||||
void FilterTargets(std::list<Unit*>& unitList)
|
||||
{
|
||||
unitList.remove_if(PactOfTheDarkfallenCheck(true));
|
||||
unitList.remove_if(Trinity::UnitAuraCheck(true, SPELL_PACT_OF_THE_DARKFALLEN));
|
||||
unitList.push_back(GetCaster());
|
||||
}
|
||||
|
||||
|
||||
@@ -192,18 +192,9 @@ class boss_rotface : public CreatureScript
|
||||
}
|
||||
break;
|
||||
case EVENT_MUTATED_INFECTION:
|
||||
{
|
||||
Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1, 0.0f, true, -MUTATED_INFECTION);
|
||||
if (!target)
|
||||
target = SelectTarget(SELECT_TARGET_RANDOM, 0, 0.0f, true, -MUTATED_INFECTION);
|
||||
if (target)
|
||||
{
|
||||
me->CastCustomSpell(SPELL_MUTATED_INFECTION, SPELLVALUE_MAX_TARGETS, 1, target, false);
|
||||
Talk(EMOTE_MUTATED_INFECTION, target->GetGUID());
|
||||
}
|
||||
me->CastCustomSpell(SPELL_MUTATED_INFECTION, SPELLVALUE_MAX_TARGETS, 1, NULL, false);
|
||||
events.ScheduleEvent(EVENT_MUTATED_INFECTION, infectionCooldown);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@@ -479,6 +470,65 @@ class spell_rotface_ooze_flood : public SpellScriptLoader
|
||||
}
|
||||
};
|
||||
|
||||
class spell_rotface_mutated_infection : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_rotface_mutated_infection() : SpellScriptLoader("spell_rotface_mutated_infection") { }
|
||||
|
||||
class spell_rotface_mutated_infection_SpellScript : public SpellScript
|
||||
{
|
||||
PrepareSpellScript(spell_rotface_mutated_infection_SpellScript);
|
||||
|
||||
bool Load()
|
||||
{
|
||||
_target = NULL;
|
||||
return true;
|
||||
}
|
||||
|
||||
void FilterTargets(std::list<Unit*>& targets)
|
||||
{
|
||||
// remove targets with this aura already
|
||||
// tank is not on this list
|
||||
targets.remove_if(Trinity::UnitAuraCheck(true, GetSpellInfo()->Id));
|
||||
std::list<Unit*>::iterator itr = targets.begin();
|
||||
std::advance(itr, urand(0, targets.size() - 1));
|
||||
Unit* target = *itr;
|
||||
targets.clear();
|
||||
targets.push_back(target);
|
||||
_target = target;
|
||||
}
|
||||
|
||||
void ReplaceTargets(std::list<Unit*>& targets)
|
||||
{
|
||||
targets.clear();
|
||||
if (_target)
|
||||
targets.push_back(_target);
|
||||
}
|
||||
|
||||
void NotifyTargets()
|
||||
{
|
||||
if (Creature* caster = GetCaster()->ToCreature())
|
||||
if (Unit* target = GetHitUnit())
|
||||
caster->AI()->Talk(EMOTE_MUTATED_INFECTION, target->GetGUID());
|
||||
}
|
||||
|
||||
void Register()
|
||||
{
|
||||
OnUnitTargetSelect += SpellUnitTargetFn(spell_rotface_mutated_infection_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY);
|
||||
OnUnitTargetSelect += SpellUnitTargetFn(spell_rotface_mutated_infection_SpellScript::ReplaceTargets, EFFECT_1, TARGET_UNIT_SRC_AREA_ENEMY);
|
||||
OnUnitTargetSelect += SpellUnitTargetFn(spell_rotface_mutated_infection_SpellScript::ReplaceTargets, EFFECT_2, TARGET_UNIT_SRC_AREA_ENEMY);
|
||||
AfterHit += SpellHitFn(spell_rotface_mutated_infection_SpellScript::NotifyTargets);
|
||||
}
|
||||
|
||||
Unit* _target;
|
||||
};
|
||||
|
||||
SpellScript* GetSpellScript() const
|
||||
{
|
||||
return new spell_rotface_mutated_infection_SpellScript();
|
||||
}
|
||||
};
|
||||
|
||||
class spell_rotface_little_ooze_combine : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
@@ -725,6 +775,7 @@ void AddSC_boss_rotface()
|
||||
new npc_big_ooze();
|
||||
new npc_precious_icc();
|
||||
new spell_rotface_ooze_flood();
|
||||
new spell_rotface_mutated_infection();
|
||||
new spell_rotface_little_ooze_combine();
|
||||
new spell_rotface_large_ooze_combine();
|
||||
new spell_rotface_large_ooze_buff_combine();
|
||||
|
||||
@@ -212,15 +212,6 @@ class AuraRemoveEvent : public BasicEvent
|
||||
uint32 _spellId;
|
||||
};
|
||||
|
||||
class SummonTargetSelector
|
||||
{
|
||||
public:
|
||||
bool operator()(Unit* unit) const
|
||||
{
|
||||
return unit->HasAura(SPELL_RECENTLY_SPAWNED);
|
||||
}
|
||||
};
|
||||
|
||||
class ValithriaDespawner : public BasicEvent
|
||||
{
|
||||
public:
|
||||
@@ -1227,7 +1218,7 @@ class spell_dreamwalker_summon_suppresser : public SpellScriptLoader
|
||||
|
||||
std::list<Creature*> summoners;
|
||||
GetCreatureListWithEntryInGrid(summoners, caster, 22515, 100.0f);
|
||||
summoners.remove_if(SummonTargetSelector());
|
||||
summoners.remove_if(Trinity::UnitAuraCheck(true, SPELL_RECENTLY_SPAWNED));
|
||||
Trinity::RandomResizeList(summoners, 2);
|
||||
if (summoners.empty())
|
||||
return;
|
||||
|
||||
Reference in New Issue
Block a user