diff options
author | Shauren <shauren.trinity@gmail.com> | 2022-06-09 23:03:42 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2022-06-09 23:03:42 +0200 |
commit | 6ca0f99ccfc6549f3390a1bac151f85fdcb77561 (patch) | |
tree | c4a24306fa537f9dfa15cd083e380a3d01acf70e /src/server/game/Events/GameEventMgr.cpp | |
parent | f820ff178decf7d844b7c398b79be7269feeb53e (diff) |
Core/GameEventMgr: Spawn creatures and gameobjects in all active instances when event starts
Diffstat (limited to 'src/server/game/Events/GameEventMgr.cpp')
-rw-r--r-- | src/server/game/Events/GameEventMgr.cpp | 34 |
1 files changed, 19 insertions, 15 deletions
diff --git a/src/server/game/Events/GameEventMgr.cpp b/src/server/game/Events/GameEventMgr.cpp index b0d207dc01e..72e12165505 100644 --- a/src/server/game/Events/GameEventMgr.cpp +++ b/src/server/game/Events/GameEventMgr.cpp @@ -1235,11 +1235,13 @@ void GameEventMgr::GameEventSpawn(int16 event_id) sObjectMgr->AddCreatureToGrid(data); // Spawn if necessary (loaded grids only) - Map* map = sMapMgr->CreateBaseMap(data->mapId); - map->RemoveRespawnTime(SPAWN_TYPE_CREATURE, *itr); - // We use spawn coords to spawn - if (map && !map->Instanceable() && map->IsGridLoaded(data->spawnPoint)) - Creature::CreateCreatureFromDB(*itr, map); + sMapMgr->DoForAllMapsWithMapId(data->mapId, [&itr, data](Map* map) + { + map->RemoveRespawnTime(SPAWN_TYPE_CREATURE, *itr); + // We use spawn coords to spawn + if (map->IsGridLoaded(data->spawnPoint)) + Creature::CreateCreatureFromDB(*itr, map); + }); } } @@ -1258,21 +1260,23 @@ void GameEventMgr::GameEventSpawn(int16 event_id) sObjectMgr->AddGameobjectToGrid(data); // Spawn if necessary (loaded grids only) // this base map checked as non-instanced and then only existed - Map* map = sMapMgr->CreateBaseMap(data->mapId); - map->RemoveRespawnTime(SPAWN_TYPE_GAMEOBJECT, *itr); - // We use current coords to unspawn, not spawn coords since creature can have changed grid - if (map && !map->Instanceable() && map->IsGridLoaded(data->spawnPoint)) + sMapMgr->DoForAllMapsWithMapId(data->mapId, [&itr, data](Map* map) { - if (GameObject* go = GameObject::CreateGameObjectFromDB(*itr, map, false)) + map->RemoveRespawnTime(SPAWN_TYPE_GAMEOBJECT, *itr); + // We use current coords to unspawn, not spawn coords since creature can have changed grid + if (map->IsGridLoaded(data->spawnPoint)) { - /// @todo find out when it is add to map - if (go->isSpawnedByDefault()) + if (GameObject* go = GameObject::CreateGameObjectFromDB(*itr, map, false)) { - if (!map->AddToMap(go)) - delete go; + /// @todo find out when it is add to map + if (go->isSpawnedByDefault()) + { + if (!map->AddToMap(go)) + delete go; + } } } - } + }); } } |