diff --git a/src/events.cpp b/src/events.cpp index 033d647b1e..21a4409fb7 100755 --- a/src/events.cpp +++ b/src/events.cpp @@ -217,7 +217,7 @@ void EventManager::InitHandler(PClass* type) RegisterHandler(handler); } -void EventManager::InitStaticHandlers(bool map) +void EventManager::InitStaticHandlers(FLevelLocals *l, bool map) { // don't initialize map handlers if restoring from savegame. if (savegamerestore) @@ -225,6 +225,7 @@ void EventManager::InitStaticHandlers(bool map) // just make sure Shutdown(); + Level = l; // initialize event handlers from gameinfo for (const FString& typeName : gameinfo.EventHandlers) @@ -241,7 +242,7 @@ void EventManager::InitStaticHandlers(bool map) return; // initialize event handlers from mapinfo - for (const FString& typeName : level.info->EventHandlers) + for (const FString& typeName : Level->info->EventHandlers) { PClass* type = GetHandlerClass(typeName); if (IsStaticType(type)) diff --git a/src/events.h b/src/events.h index b207f924bf..79c75023a7 100755 --- a/src/events.h +++ b/src/events.h @@ -249,7 +249,7 @@ struct EventManager // check type bool IsStaticType(PClass* type); // init static handlers - void InitStaticHandlers(bool map); + void InitStaticHandlers(FLevelLocals *l, bool map); // shutdown handlers void Shutdown(); diff --git a/src/gamedata/info.cpp b/src/gamedata/info.cpp index f06e56b464..010200a775 100644 --- a/src/gamedata/info.cpp +++ b/src/gamedata/info.cpp @@ -395,7 +395,7 @@ void PClassActor::StaticInit() InitBotStuff(); // reinit GLOBAL static stuff from gameinfo, once classes are loaded. - staticEventManager.InitStaticHandlers(false); + staticEventManager.InitStaticHandlers(primaryLevel, false); } //========================================================================== diff --git a/src/p_setup.cpp b/src/p_setup.cpp index 7ea4d9f154..dddfe2d46c 100644 --- a/src/p_setup.cpp +++ b/src/p_setup.cpp @@ -423,7 +423,7 @@ void P_SetupLevel(FLevelLocals *Level, int position, bool newGame) // [ZZ] init per-map static handlers. we need to call this before everything is set up because otherwise scripts don't receive PlayerEntered event // (which happens at god-knows-what stage in this function, but definitely not the last part, because otherwise it'd work to put E_InitStaticHandlers before the player spawning) - Level->localEventManager->InitStaticHandlers(true); + Level->localEventManager->InitStaticHandlers(Level, true); // generate a checksum for the level, to be included and checked with savegames. map->GetChecksum(Level->md5);