PHP код:
//printf("%d", P@("S@@_OnGameModeInit", ""));
HOOK_CALL<GameModeInit>
//hooks_do_hooks_call_no_als:
//printf("end 2");
//return 1;
}
new
idx,
pointer,
re = end;
if (end > sizeof (YSI_g_sCallbackAddresses))
{
re = sizeof (YSI_g_sCallbackAddresses);
if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
}
// Do the initial fast elements.
while (start != re)
{
pointer = YSI_g_sCallbackAddresses[start++];
#emit PUSH.C 0
#emit LCTRL 6
#emit ADD.C 28
#emit PUSH.pri
#emit LOAD.S.pri pointer
#emit SCTRL 6
#emit CONST.alt 0xFFFFFFFF
// Note that this label is embedded in the "HOOK_CALL" macro above.
#emit STOR.S.pri ret
#emit JEQ hooks_do_hooks_call_no_als
}
// Get any remaining pointers the old way.
while (start++ != end)
{
idx = AMX_GetPublicPointer(idx, pointer, "@yH_GameModeInit");
#emit PUSH.C 0
#emit LCTRL 6
#emit ADD.C 28
#emit PUSH.pri
#emit LOAD.S.pri pointer
#emit SCTRL 6
#emit CONST.alt 0xFFFFFFFF
#emit STOR.S.pri ret
#emit JEQ hooks_do_hooks_call_no_als
}
// Do ALS just in case (YSI no longer uses this though now).
P:2("Hooks_OnGameModeInit end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnGameModeInit));
HOOK_RETURN<GameModeInit>
//return 1;
}
#if defined _ALS_OnGameModeInit
#undef OnGameModeInit
#else
#define _ALS_OnGameModeInit
#endif
#define OnGameModeInit S@@_OnGameModeInit
ALS_FORWARD<GameModeInit>
public OnGameModeExit()
{
P:2("Hooks_OnGameModeExit called");
if (!YSI_FILTERSCRIPT)
{
Hooks_OnScriptExit();
//Hooks_OnAnyScriptExit();
}
new
end = YSI_g_sCallbackData[ALS_OnGameModeExit][E_FUNC_HOOK_DATA_END],
start = YSI_g_sCallbackData[ALS_OnGameModeExit][E_FUNC_HOOK_DATA_START],
ret = ALS_R_GameModeExit;
if (start == end)
{
P:2("Hooks_OnGameModeExit end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnGameModeExit));
HOOK_CALL<GameModeExit>
}
new
idx,
pointer,
re = end;
if (end > sizeof (YSI_g_sCallbackAddresses))
{
re = sizeof (YSI_g_sCallbackAddresses);
if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
}
// Do the initial fast elements.
while (start != re)
{
pointer = YSI_g_sCallbackAddresses[start++];
#emit PUSH.C 0
#emit LCTRL 6
#emit ADD.C 28
#emit PUSH.pri
#emit LOAD.S.pri pointer
#emit SCTRL 6
#emit CONST.alt 0xFFFFFFFF
#emit STOR.S.pri ret
#emit JEQ hooks_do_hooks_call_no_als
}
// Get any remaining pointers the old way.
while (start++ != end)
{
idx = AMX_GetPublicPointer(idx, pointer, "@yH_GameModeExit");
#emit PUSH.C 0
#emit LCTRL 6
#emit ADD.C 28
#emit PUSH.pri
#emit LOAD.S.pri pointer
#emit SCTRL 6
#emit CONST.alt 0xFFFFFFFF
#emit STOR.S.pri ret
#emit JEQ hooks_do_hooks_call_no_als
}
// Do ALS just in case (YSI no longer uses this though now).
P:2("Hooks_OnGameModeExit end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnGameModeExit));
HOOK_RETURN<GameModeExit>
}
#if defined _ALS_OnGameModeExit
#undef OnGameModeExit
#else
#define _ALS_OnGameModeExit
#endif
#define OnGameModeExit S@@_OnGameModeExit
ALS_FORWARD<GameModeExit>
/*static Hooks_OnAnyScriptInit()
{
P:2("Hooks_OnAnyScriptInit called");
new
end = YSI_g_sCallbackData[ALS_OnAnyScriptInit][E_FUNC_HOOK_DATA_END],
start = YSI_g_sCallbackData[ALS_OnAnyScriptInit][E_FUNC_HOOK_DATA_START],
ret = ALS_R_PlayerCommandText;
if (start == end)
{
P:2("Hooks_OnAnyScriptInit end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnAnyScriptInit));
//HOOK_CALL<AnyScriptInit>
hooks_do_hooks_call_no_als:
return;
}
new
idx,
pointer,
re = end;
if (end > sizeof (YSI_g_sCallbackAddresses))
{
re = sizeof (YSI_g_sCallbackAddresses);
if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
}
// Do the initial fast elements.
while (start != re)
{
pointer = YSI_g_sCallbackAddresses[start++];
#emit PUSH.C 0
#emit LCTRL 6
#emit ADD.C 28
#emit PUSH.pri
#emit LOAD.S.pri pointer
#emit SCTRL 6
#emit CONST.alt 0xFFFFFFFF
// Note that this label is embedded in the "HOOK_CALL" macro above.
#emit STOR.S.pri ret
#emit JEQ hooks_do_hooks_call_no_als
}
// Get any remaining pointers the old way.
while (start++ != end)
{
idx = AMX_GetPublicPointer(idx, pointer, "@yH_AnyScriptInit");
#emit PUSH.C 0
#emit LCTRL 6
#emit ADD.C 28
#emit PUSH.pri
#emit LOAD.S.pri pointer
#emit SCTRL 6
#emit CONST.alt 0xFFFFFFFF
#emit STOR.S.pri ret
#emit JEQ hooks_do_hooks_call_no_als
}
// Do ALS just in case (YSI no longer uses this though now).
P:2("Hooks_OnAnyScriptInit end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnAnyScriptInit));
//HOOK_RETURN<AnyScriptInit>
}
static Hooks_OnAnyScriptExit()
{
P:2("Hooks_OnAnyScriptExit called");
new
end = YSI_g_sCallbackData[ALS_OnAnyScriptExit][E_FUNC_HOOK_DATA_END],
start = YSI_g_sCallbackData[ALS_OnAnyScriptExit][E_FUNC_HOOK_DATA_START],
ret = ALS_R_PlayerCommandText;
if (start == end)
{
P:2("Hooks_OnAnyScriptExit end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnAnyScriptExit));
//HOOK_CALL<AnyScriptExit>
hooks_do_hooks_call_no_als:
return;
}
new
idx,
pointer,
re = end;
if (end > sizeof (YSI_g_sCallbackAddresses))
{
re = sizeof (YSI_g_sCallbackAddresses);
if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
}
// Do the initial fast elements.
while (start != re)
{
pointer = YSI_g_sCallbackAddresses[start++];
#emit PUSH.C 0
#emit LCTRL 6
#emit ADD.C 28
#emit PUSH.pri
#emit LOAD.S.pri pointer
#emit SCTRL 6
#emit CONST.alt 0xFFFFFFFF
#emit STOR.S.pri ret
#emit JEQ hooks_do_hooks_call_no_als
}
// Get any remaining pointers the old way.
while (start++ != end)
{
idx = AMX_GetPublicPointer(idx, pointer, "@yH_AnyScriptExit");
#emit PUSH.C 0
#emit LCTRL 6
#emit ADD.C 28
#emit PUSH.pri
#emit LOAD.S.pri pointer
#emit SCTRL 6
#emit CONST.alt 0xFFFFFFFF
#emit STOR.S.pri ret
#emit JEQ hooks_do_hooks_call_no_als
}
// Do ALS just in case (YSI no longer uses this though now).
P:2("Hooks_OnAnyScriptExit end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnAnyScriptExit));
//HOOK_RETURN<AnyScriptExit>
}*/
public OnFilterScriptInit()
{
P:2("Hooks_OnFilterScriptInit called");
Hooks_OnScriptInit();
#if defined YSI_LOCK_MODE
if (strval(YSI_gLockData[strfind(YSI_gLockData[5], YSI_gLockData[1])]) | strval(YSI_gLockData[strfind(YSI_gLockData[YSI_gLockData[0]], YSI_gLockData[1], _, 1)]) << 8 != _LOCK_IP_1 | _LOCK_IP_2 << 8)
{
y_lock 4;
}
/*if (strval(YSI_gLockData[9]) + strval(YSI_gLockData[11]) + strval(YSI_gLockData[13]) != 1)
{
y_lock 5;
}*/
#endif
//Hooks_OnAnyScriptInit();
YSI_FILTERSCRIPT = true;
new
end = YSI_g_sCallbackData[ALS_OnFilterScriptInit][E_FUNC_HOOK_DATA_END],
start = YSI_g_sCallbackData[ALS_OnFilterScriptInit][E_FUNC_HOOK_DATA_START],
ret = ALS_R_FilterScriptInit;
if (start == end)
{
P:2("Hooks_OnFilterScriptInit end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnFilterScriptInit));
HOOK_CALL<FilterScriptInit>
}
new
idx,
pointer,
re = end;
if (end > sizeof (YSI_g_sCallbackAddresses))
{
re = sizeof (YSI_g_sCallbackAddresses);
if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
}
// Do the initial fast elements.
while (start != re)
{
pointer = YSI_g_sCallbackAddresses[start++];
#emit PUSH.C 0
#emit LCTRL 6
#emit ADD.C 28
#emit PUSH.pri
#emit LOAD.S.pri pointer
#emit SCTRL 6
#emit CONST.alt 0xFFFFFFFF
#emit STOR.S.pri ret
#emit JEQ hooks_do_hooks_call_no_als
}
// Get any remaining pointers the old way.
while (start++ != end)
{
idx = AMX_GetPublicPointer(idx, pointer, "@yH_FilterScriptInit");
#emit PUSH.C 0
#emit LCTRL 6
#emit ADD.C 28
#emit PUSH.pri
#emit LOAD.S.pri pointer
#emit SCTRL 6
#emit CONST.alt 0xFFFFFFFF
#emit STOR.S.pri ret
#emit JEQ hooks_do_hooks_call_no_als
}
// Do ALS just in case (YSI no longer uses this though now).
P:2("Hooks_OnFilterScriptInit end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnFilterScriptInit));
HOOK_RETURN<FilterScriptInit>
}
#if defined _ALS_OnFilterScriptInit
#undef OnFilterScriptInit
#else
#define _ALS_OnFilterScriptInit
#endif
#define OnFilterScriptInit S@@_OnFilterScriptInit
ALS_FORWARD<FilterScriptInit>
public OnFilterScriptExit()
{
P:2("Hooks_OnFilterScriptExit called");
Hooks_OnScriptExit();
//Hooks_OnAnyScriptExit();
new
end = YSI_g_sCallbackData[ALS_OnFilterScriptExit][E_FUNC_HOOK_DATA_END],
start = YSI_g_sCallbackData[ALS_OnFilterScriptExit][E_FUNC_HOOK_DATA_START],
ret = ALS_R_FilterScriptExit;
if (start == end)
{
P:2("Hooks_OnFilterScriptExit end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnFilterScriptExit));
HOOK_CALL<FilterScriptExit>
}
new
idx,
pointer,
re = end;
if (end > sizeof (YSI_g_sCallbackAddresses))
{
re = sizeof (YSI_g_sCallbackAddresses);
if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
}
// Do the initial fast elements.
while (start != re)
{
pointer = YSI_g_sCallbackAddresses[start++];
#emit PUSH.C 0
#emit LCTRL 6
#emit ADD.C 28
#emit PUSH.pri
#emit LOAD.S.pri pointer
#emit SCTRL 6
#emit CONST.alt 0xFFFFFFFF
#emit STOR.S.pri ret
#emit JEQ hooks_do_hooks_call_no_als
}
// Get any remaining pointers the old way.
while (start++ != end)
{
idx = AMX_GetPublicPointer(idx, pointer, "@yH_FilterScriptExit");
#emit PUSH.C 0
#emit LCTRL 6
#emit ADD.C 28
#emit PUSH.pri
#emit LOAD.S.pri pointer
#emit SCTRL 6
#emit CONST.alt 0xFFFFFFFF
#emit STOR.S.pri ret
#emit JEQ hooks_do_hooks_call_no_als
}
// Do ALS just in case (YSI no longer uses this though now).
P:2("Hooks_OnFilterScriptExit end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnFilterScriptExit));
HOOK_RETURN<FilterScriptExit>
}
#if defined _ALS_OnFilterScriptExit
#undef OnFilterScriptExit
#else
#define _ALS_OnFilterScriptExit
#endif
#define OnFilterScriptExit S@@_OnFilterScriptExit
ALS_FORWARD<FilterScriptExit>
public OnPlayerConnect(playerid)
{
P:2("Hooks_OnPlayerConnect called: %d", playerid);
new
end = YSI_g_sCallbackData[ALS_OnPlayerConnect][E_FUNC_HOOK_DATA_END],
start = YSI_g_sCallbackData[ALS_OnPlayerConnect][E_FUNC_HOOK_DATA_START],
ret = ALS_R_PlayerConnect;
if (start == end)
{
P:2("Hooks_OnPlayerConnect end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerConnect));
HOOK_CALL<PlayerConnect>
}
new
pointer,
idx,
re = end;
if (end > sizeof (YSI_g_sCallbackAddresses))
{
re = sizeof (YSI_g_sCallbackAddresses);
if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
}
// Do the initial fast elements. This was an experiment to play with the
// stack so we only ever need to push the parameters and return address once
// and do the loop using the return address! Shame I've not got it working
// yet really!
/*#emit PUSH.S playerid
#emit PUSH.C 4
#emit LCTRL 6
#emit ADD.C 20
#emit PUSH.pri
// This is done twice so that the second time the loop runs (which isn't
// actually done by "while" anymore, the loop is hidden) the code's correct.
#emit STACK 12
// This is where the code above makes the SCTRL call return to!
#emit STACK 0xFFFFFFF4
//while (start != re)
// NOTE: THIS IS A LOOP! I know it doesn't look like one but it is!
if (start != re)*/
while (start != re)
{
pointer = YSI_g_sCallbackAddresses[start++];
#emit PUSH.S playerid
#emit PUSH.C 4
#emit LCTRL 6
#emit ADD.C 28
#emit PUSH.pri
#emit LOAD.S.pri pointer
#emit SCTRL 6
#emit CONST.alt 0xFFFFFFFF
#emit STOR.S.pri ret
#emit JEQ hooks_do_hooks_call_no_als
}
// Clean up the stack.
// Get any remaining pointers the old way.
while (start++ != end)
{
idx = AMX_GetPublicPointer(idx, pointer, "@yH_PlayerConnect");
#emit PUSH.S playerid
#emit PUSH.C 4
#emit LCTRL 6
#emit ADD.C 28
#emit PUSH.pri
#emit LOAD.S.pri pointer
#emit SCTRL 6
#emit CONST.alt 0xFFFFFFFF
#emit STOR.S.pri ret
#emit JEQ hooks_do_hooks_call_no_als
}
//#emit STACK 12
// Do ALS just in case (YSI no longer uses this though now).
P:2("Hooks_OnPlayerConnect end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerConnect));
HOOK_RETURN<PlayerConnect>
}
#if defined _ALS_OnPlayerConnect
#undef OnPlayerConnect
#else
#define _ALS_OnPlayerConnect
#endif
#define OnPlayerConnect S@@_OnPlayerConnect
ALS_FORWARD<PlayerConnect>