@@ -281,9 +281,8 @@ forward bool:DumpAMX_Write(const filename[]);
281281 forward OnCachedInit ();
282282#endif
283283
284- static ScriptInit_CallOnCodeInit (bool: jit)
284+ static bool: ScriptInit_CallOnCodeInit (bool: jit, bool: fs )
285285{
286- Server_DisableLongCall ();
287286 if (YSI_g_sScriptInitState & E_SCRIPTINIT_STATE_RELOAD)
288287 {
289288 // Loaded from a file.
@@ -304,6 +303,41 @@ static ScriptInit_CallOnCodeInit(bool:jit)
304303 }
305304 else
306305 {
306+ #if defined YSI_NO_MODE_CACHE
307+ #pragma unused fs
308+ #else
309+ #if defined __date && defined __time && defined YSI_AUTO_LOAD_CACHE
310+ new name[64 ];
311+ format (name, sizeof (name), " YSI_CACHE.%s .%s " , __date, __time);
312+ if (fexist (name))
313+ {
314+ if (jit)
315+ {
316+ P: W (" Could not auto-load YSI cache - script type (GM/FS) cannot be determined with JIT." );
317+ strcat (name, " .amx" );
318+ }
319+ else if (fs)
320+ {
321+ P: W (" Could not auto-load YSI cache - current filterscript cannot be unloaded." );
322+ strcat (name, " .amx" );
323+ }
324+ else
325+ {
326+ Server_EnableLongCall ();
327+ format (name, sizeof (name), " changemode ../scriptfiles/%s " , name);
328+ SendRconCommand (name)
329+ return false ;
330+ }
331+ }
332+ else
333+ {
334+ strcat (name, " .amx" );
335+ }
336+ #else
337+ static const name[] = " YSI_CACHE.amx" ;
338+ #endif
339+ #endif
340+ Server_DisableLongCall ();
307341 #if defined YSI_NO_OPTIMISATION_MESSAGE
308342 #pragma unused jit
309343 #else
@@ -342,7 +376,7 @@ static ScriptInit_CallOnCodeInit(bool:jit)
342376 // Set the variable to something unique for next load. This will be written out, thus
343377 // loaded in next time.
344378 YSI_g_sScriptInitState = E_SCRIPTINIT_STATE_RELOAD;
345- if (DumpAMX_Write (" YSI_CACHE.amx " ))
379+ if (DumpAMX_Write (name ))
346380 {
347381 // Clear this flag after dumping. This is so we can tell when a mode is cached.
348382 YSI_g_sScriptInitState = tmp | E_SCRIPTINIT_STATE_DUMPED;
@@ -387,9 +421,10 @@ static ScriptInit_CallOnCodeInit(bool:jit)
387421 YSI_g_sScriptInitState = tmp;
388422 P: E (" YSI code cache write failed" );
389423 }
424+ Server_EnableLongCall ();
390425 #endif
391426 }
392- Server_EnableLongCall () ;
427+ return true ;
393428}
394429
395430#if ! defined _ALS_OnJITCompile
@@ -408,7 +443,8 @@ public OnJITCompile()
408443 }
409444 DEBUG_MAYBE_DUMP (" YSI_PRE_INIT.asm" );
410445 YSI_g_sScriptInitState |= E_SCRIPTINIT_STATE_JITING;
411- ScriptInit_CallOnCodeInit (true );
446+ if (! ScriptInit_CallOnCodeInit (true , false ))
447+ return 0 ;
412448 new ret = ScriptInit_OnJITCompile ();
413449 if (ret)
414450 {
@@ -531,7 +567,8 @@ public OnFilterScriptInit()
531567 if (! (YSI_g_sScriptInitState & E_SCRIPTINIT_STATE_JITING))
532568 {
533569 DEBUG_MAYBE_DUMP (" YSI_PRE_INIT.asm" );
534- ScriptInit_CallOnCodeInit (false );
570+ if (! ScriptInit_CallOnCodeInit (false , true ))
571+ return 0 ;
535572 }
536573 ScriptInit_PreInitFuncs_ ();
537574 #if defined ScriptInit_OnScriptInit
@@ -583,7 +620,8 @@ public OnGameModeInit()
583620 if (! (YSI_g_sScriptInitState & E_SCRIPTINIT_STATE_JITING))
584621 {
585622 DEBUG_MAYBE_DUMP (" YSI_PRE_INIT.asm" );
586- ScriptInit_CallOnCodeInit (false );
623+ if (! ScriptInit_CallOnCodeInit (false , false ))
624+ return 0 ;
587625 }
588626 ScriptInit_PreInitFuncs_ ();
589627 #if defined ScriptInit_OnScriptInit
0 commit comments