From 86da1a19bb36edf3242dafac6e45e87434ddff73 Mon Sep 17 00:00:00 2001 From: xinef1 Date: Sat, 4 Feb 2017 22:37:16 +0100 Subject: Core/Misc: Fix various crashes, also related to multithreading (#19012) * When iterating groups we have to either do it not in multithreaded context (map updates) or start with checking maps (they are guaranteed to change in single thread update). * Properly clear ComboPoint references on player remove * remove some possible references item may have when it is deleted during save. * Also clear all hostile references when unit is removed from map. --- src/server/game/Entities/GameObject/GameObject.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/server/game/Entities/GameObject') diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp index 8b80d027c9f..b7f4433b63e 100644 --- a/src/server/game/Entities/GameObject/GameObject.cpp +++ b/src/server/game/Entities/GameObject/GameObject.cpp @@ -582,7 +582,7 @@ void GameObject::Update(uint32 diff) { Group* group = sGroupMgr->GetGroupByGUID(lootingGroupLowGUID); if (group) - group->EndRoll(&loot); + group->EndRoll(&loot, GetMap()); m_groupLootTimer = 0; lootingGroupLowGUID = 0; } @@ -1290,7 +1290,7 @@ void GameObject::Use(Unit* user) if (itr->second) { - if (Player* ChairUser = ObjectAccessor::FindPlayer(itr->second)) + if (Player* ChairUser = ObjectAccessor::GetPlayer(*this, itr->second)) { if (ChairUser->IsSitState() && ChairUser->GetStandState() != UNIT_STAND_STATE_SIT && ChairUser->GetExactDist2d(x_i, y_i) < 0.1f) continue; // This seat is already occupied by ChairUser. NOTE: Not sure if the ChairUser->GetStandState() != UNIT_STAND_STATE_SIT check is required. -- cgit v1.2.3