aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2012-04-11 17:53:55 +0200
committerShauren <shauren.trinity@gmail.com>2012-04-11 17:53:55 +0200
commitbe5b91f6bb9f98d40723807a03da6dc00d6b6aff (patch)
tree72e8f4b1cb0d6e83440d69cbe4b20490b8b77cd2 /src
parent0506877e2accabfe2c0acce6a2c4d0066e0c321b (diff)
Scripts/Icecrown Citadel: Fixed crashes on despawning abominations during Professor Putricide's phase transition
Diffstat (limited to 'src')
-rwxr-xr-xsrc/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp30
1 files changed, 28 insertions, 2 deletions
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp
index b66632b6eeb..541e52fb922 100755
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp
@@ -167,6 +167,33 @@ enum PutricideData
#define EXPERIMENT_STATE_OOZE false
#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
{
public:
@@ -477,8 +504,7 @@ class boss_professor_putricide : public CreatureScript
SetPhase(PHASE_COMBAT_3);
events.ScheduleEvent(EVENT_MUTATED_PLAGUE, 25000);
events.CancelEvent(EVENT_UNSTABLE_EXPERIMENT);
- summons.DespawnEntry(NPC_MUTATED_ABOMINATION_10);
- summons.DespawnEntry(NPC_MUTATED_ABOMINATION_25);
+ summons.remove_if(AbominationDespawner(me));
break;
default:
break;