diff --git a/Strategic/LuaInitNPCs.cpp b/Strategic/LuaInitNPCs.cpp index d91243ba7..ce739e3ff 100644 --- a/Strategic/LuaInitNPCs.cpp +++ b/Strategic/LuaInitNPCs.cpp @@ -13633,43 +13633,58 @@ static int l_GetNumHostilesInSector( lua_State *L ) void LuaGetIntelAndQuestMapData( INT32 aLevel ) { - const char* filename = "scripts\\strategicmap.lua"; + static LuaScopeState _LS(true); + static bool isInitialized = false; - LuaScopeState _LS( true ); - - IniFunction( _LS.L(), TRUE ); - IniGlobalGameSetting( _LS.L() ); - - SGP_THROW_IFFALSE( _LS.L.EvalFile( filename ), _BS( "Cannot open file: " ) << filename << _BS::cget ); + // Initialize only once during lifetime of program + if (!isInitialized) + { + isInitialized = true; + IniFunction(_LS.L(), TRUE); + IniGlobalGameSetting(_LS.L()); + const char* filename = "scripts\\strategicmap.lua"; + SGP_THROW_IFFALSE(_LS.L.EvalFile(filename), _BS("Cannot open file: ") << filename << _BS::cget); + } + IniGlobalGameSetting(_LS.L()); LuaFunction( _LS.L, "GetIntelAndQuestMapData" ).Param( aLevel ).Call( 1 ); } void SetFactoryLeftoverProgress( INT16 sSectorX, INT16 sSectorY, INT8 bSectorZ, UINT16 usFacilityType, UINT16 usProductionNumber, INT32 sProgressLeft ) { - const char* filename = "scripts\\strategicmap.lua"; + static LuaScopeState _LS(true); + static bool isInitialized = false; - LuaScopeState _LS( true ); - - IniFunction( _LS.L(), TRUE ); - IniGlobalGameSetting( _LS.L() ); - - SGP_THROW_IFFALSE( _LS.L.EvalFile( filename ), _BS( "Cannot open file: " ) << filename << _BS::cget ); + // Initialize only once during lifetime of program + if (!isInitialized) + { + isInitialized = true; + IniFunction(_LS.L(), TRUE); + IniGlobalGameSetting(_LS.L()); + const char* filename = "scripts\\strategicmap.lua"; + SGP_THROW_IFFALSE(_LS.L.EvalFile(filename), _BS("Cannot open file: ") << filename << _BS::cget); + } + IniGlobalGameSetting(_LS.L()); LuaFunction( _LS.L, "SetFactoryLeftoverProgress" ).Param( sSectorX ).Param( sSectorY ).Param( bSectorZ ).Param( usFacilityType ).Param( usProductionNumber ).Param( sProgressLeft ).Call( 6 ); } INT32 GetFactoryLeftoverProgress( INT16 sSectorX, INT16 sSectorY, INT8 bSectorZ, UINT16 usFacilityType, UINT16 usProductionNumber ) { - const char* filename = "scripts\\strategicmap.lua"; + static LuaScopeState _LS( true ); + static bool isInitialized = false; - LuaScopeState _LS( true ); - - IniFunction( _LS.L(), TRUE ); - IniGlobalGameSetting( _LS.L() ); - - SGP_THROW_IFFALSE( _LS.L.EvalFile( filename ), _BS( "Cannot open file: " ) << filename << _BS::cget ); + // Initialize only once during lifetime of program + if (!isInitialized) + { + isInitialized = true; + IniFunction( _LS.L(), TRUE ); + IniGlobalGameSetting(_LS.L()); + const char* filename = "scripts\\strategicmap.lua"; + SGP_THROW_IFFALSE( _LS.L.EvalFile( filename ), _BS( "Cannot open file: " ) << filename << _BS::cget ); + } + IniGlobalGameSetting(_LS.L()); LuaFunction( _LS.L, "GetFactoryLeftoverProgress" ).Param( sSectorX ).Param( sSectorY ).Param( bSectorZ ).Param( usFacilityType ).Param( usProductionNumber ).Call( 5 ); if ( lua_gettop( _LS.L() ) >= 0 )