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
|
class spell_blood_queen_pact_of_the_darkfallen : public SpellScriptLoader
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@@ -709,7 +695,7 @@ class spell_blood_queen_pact_of_the_darkfallen : public SpellScriptLoader
|
|||||||
|
|
||||||
void FilterTargets(std::list<Unit*>& unitList)
|
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;
|
bool remove = true;
|
||||||
std::list<Unit*>::const_iterator itrEnd = unitList.end(), itr, itr2;
|
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)
|
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());
|
unitList.push_back(GetCaster());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -192,18 +192,9 @@ class boss_rotface : public CreatureScript
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case EVENT_MUTATED_INFECTION:
|
case EVENT_MUTATED_INFECTION:
|
||||||
{
|
me->CastCustomSpell(SPELL_MUTATED_INFECTION, SPELLVALUE_MAX_TARGETS, 1, NULL, false);
|
||||||
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());
|
|
||||||
}
|
|
||||||
events.ScheduleEvent(EVENT_MUTATED_INFECTION, infectionCooldown);
|
events.ScheduleEvent(EVENT_MUTATED_INFECTION, infectionCooldown);
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
default:
|
default:
|
||||||
break;
|
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
|
class spell_rotface_little_ooze_combine : public SpellScriptLoader
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@@ -725,6 +775,7 @@ void AddSC_boss_rotface()
|
|||||||
new npc_big_ooze();
|
new npc_big_ooze();
|
||||||
new npc_precious_icc();
|
new npc_precious_icc();
|
||||||
new spell_rotface_ooze_flood();
|
new spell_rotface_ooze_flood();
|
||||||
|
new spell_rotface_mutated_infection();
|
||||||
new spell_rotface_little_ooze_combine();
|
new spell_rotface_little_ooze_combine();
|
||||||
new spell_rotface_large_ooze_combine();
|
new spell_rotface_large_ooze_combine();
|
||||||
new spell_rotface_large_ooze_buff_combine();
|
new spell_rotface_large_ooze_buff_combine();
|
||||||
|
|||||||
@@ -212,15 +212,6 @@ class AuraRemoveEvent : public BasicEvent
|
|||||||
uint32 _spellId;
|
uint32 _spellId;
|
||||||
};
|
};
|
||||||
|
|
||||||
class SummonTargetSelector
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
bool operator()(Unit* unit) const
|
|
||||||
{
|
|
||||||
return unit->HasAura(SPELL_RECENTLY_SPAWNED);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
class ValithriaDespawner : public BasicEvent
|
class ValithriaDespawner : public BasicEvent
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@@ -1227,7 +1218,7 @@ class spell_dreamwalker_summon_suppresser : public SpellScriptLoader
|
|||||||
|
|
||||||
std::list<Creature*> summoners;
|
std::list<Creature*> summoners;
|
||||||
GetCreatureListWithEntryInGrid(summoners, caster, 22515, 100.0f);
|
GetCreatureListWithEntryInGrid(summoners, caster, 22515, 100.0f);
|
||||||
summoners.remove_if(SummonTargetSelector());
|
summoners.remove_if(Trinity::UnitAuraCheck(true, SPELL_RECENTLY_SPAWNED));
|
||||||
Trinity::RandomResizeList(summoners, 2);
|
Trinity::RandomResizeList(summoners, 2);
|
||||||
if (summoners.empty())
|
if (summoners.empty())
|
||||||
return;
|
return;
|
||||||
|
|||||||
Reference in New Issue
Block a user