Skip to content

Commit 4b1e913

Browse files
committed
Merge branch '5.x' of github.com:pawn-lang/YSI-Includes into 5.x
2 parents df44da8 + 040d655 commit 4b1e913

File tree

1 file changed

+45
-7
lines changed

1 file changed

+45
-7
lines changed

YSI_Core/y_core/y_scriptinit_impl.inc

Lines changed: 45 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)