Scripts/Icecrown Citadel: Fixed crashes on despawning abominations during Professor Putricide's phase transition

This commit is contained in:
Shauren
2012-04-11 17:53:55 +02:00
parent 0506877e2a
commit be5b91f6bb
@@ -167,6 +167,33 @@ enum PutricideData
#define EXPERIMENT_STATE_OOZE false #define EXPERIMENT_STATE_OOZE false
#define EXPERIMENT_STATE_GAS true #define EXPERIMENT_STATE_GAS true
class AbominationDespawner
{
public:
explicit AbominationDespawner(Unit* owner) : _owner(owner) { }
bool operator()(uint64 guid)
{
if (Unit* summon = ObjectAccessor::GetUnit(*_owner, guid))
{
if (summon->GetEntry() == NPC_MUTATED_ABOMINATION_10 || summon->GetEntry() == NPC_MUTATED_ABOMINATION_25)
{
if (Vehicle* veh = summon->GetVehicleKit())
veh->RemoveAllPassengers(); // also despawns the vehicle
return true;
}
return false;
}
return true;
}
private:
Unit* _owner;
};
class boss_professor_putricide : public CreatureScript class boss_professor_putricide : public CreatureScript
{ {
public: public:
@@ -477,8 +504,7 @@ class boss_professor_putricide : public CreatureScript
SetPhase(PHASE_COMBAT_3); SetPhase(PHASE_COMBAT_3);
events.ScheduleEvent(EVENT_MUTATED_PLAGUE, 25000); events.ScheduleEvent(EVENT_MUTATED_PLAGUE, 25000);
events.CancelEvent(EVENT_UNSTABLE_EXPERIMENT); events.CancelEvent(EVENT_UNSTABLE_EXPERIMENT);
summons.DespawnEntry(NPC_MUTATED_ABOMINATION_10); summons.remove_if(AbominationDespawner(me));
summons.DespawnEntry(NPC_MUTATED_ABOMINATION_25);
break; break;
default: default:
break; break;