diff options
| author | xinef1 <w.szyszko2@gmail.com> | 2017-02-04 22:37:16 +0100 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2017-02-04 22:37:16 +0100 |
| commit | 86da1a19bb36edf3242dafac6e45e87434ddff73 (patch) | |
| tree | 5c445d5763a46adbbbfa6d605f40fb8c6ee2f0e6 /src/server/game/Entities/GameObject | |
| parent | 9e1b286984c63b801561a67dd4eae7910ec1af10 (diff) | |
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.
Diffstat (limited to 'src/server/game/Entities/GameObject')
| -rw-r--r-- | src/server/game/Entities/GameObject/GameObject.cpp | 4 |
1 files changed, 2 insertions, 2 deletions
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. |
