From cf9825dd82c5b58fd3f796145bfdea41f4f77b4b Mon Sep 17 00:00:00 2001 From: Ovahlord Date: Sat, 30 Mar 2019 17:20:51 +0100 Subject: [PATCH] Scripts/Gilneas: fixed two possible crash locations caused by modifying iterators while iterating through them closes #55 --- .../EasternKingdoms/Gilneas/chapter1.cpp | 24 ++++++++++++------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/src/server/scripts/EasternKingdoms/Gilneas/chapter1.cpp b/src/server/scripts/EasternKingdoms/Gilneas/chapter1.cpp index c4ea1e896c7..0b43fa8c841 100644 --- a/src/server/scripts/EasternKingdoms/Gilneas/chapter1.cpp +++ b/src/server/scripts/EasternKingdoms/Gilneas/chapter1.cpp @@ -526,15 +526,18 @@ class npc_greymanes_horse : public CreatureScript { if (Creature* krennan = passenger->ToCreature()) { - for (Unit* attacker : me->getAttackers()) - { - if (!attacker) - continue; + std::vector storedAttackers; + for (Unit* attacker : me->getAttackers()) + storedAttackers.push_back(attacker); + + for (Unit* attacker : storedAttackers) + { if (Creature* creature = attacker->ToCreature()) if (creature->IsAIEnabled) creature->AI()->EnterEvadeMode(); } + player->ExitVehicle(); krennan->AddUnitState(UNIT_STATE_ROOT); krennan->ExitVehicle(); @@ -650,18 +653,23 @@ class npc_crowleys_horse : public CreatureScript me->GetMotionMaster()->MovePath(PATH_ID_CROWLEYS_HORSE_2, false); break; case EVENT_DISMOUNT_PLAYER: - for (Unit* attacker : me->getAttackers()) - { - if (!attacker) - continue; + { + std::vector storedAttackers; + for (Unit* attacker : me->getAttackers()) + storedAttackers.push_back(attacker); + + for (Unit* attacker : storedAttackers) + { if (Creature* creature = attacker->ToCreature()) if (creature->IsAIEnabled) creature->AI()->EnterEvadeMode(); } + me->RemoveAurasDueToSpell(VEHICLE_SPELL_RIDE_HARDCODED); me->DespawnOrUnsummon(Seconds(5)); break; + } case EVENT_MOVE_OFF_PATH: me->SetControlled(false, UNIT_STATE_ROOT); _currentPath = PATH_ID_CROWLEYS_HORSE_3;