Advertisement
Y_Less

y_hooks 2

Mar 17th, 2011
1,080
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 67.19 KB | None | 0 0
  1. /*----------------------------------------------------------------------------*-
  2.                     ==============================
  3.                      y_hooks - Hook any callback!
  4.                     ==============================
  5. Description:
  6.     Automatically hooks any callbacks with a very simple syntax.
  7. Legal:
  8.     Version: MPL 1.1
  9.    
  10.     The contents of this file are subject to the Mozilla Public License Version
  11.     1.1 (the "License"); you may not use this file except in compliance with
  12.     the License. You may obtain a copy of the License at
  13.     http://www.mozilla.org/MPL/
  14.    
  15.     Software distributed under the License is distributed on an "AS IS" basis,
  16.     WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
  17.     for the specific language governing rights and limitations under the
  18.     License.
  19.    
  20.     The Original Code is the SA:MP script information include.
  21.    
  22.     The Initial Developer of the Original Code is Alex "Y_Less" Cole.
  23.     Portions created by the Initial Developer are Copyright (C) 2008
  24.     the Initial Developer. All Rights Reserved.
  25.    
  26.     Contributors:
  27.         ZeeX, koolk, JoeBullet/Google63, g_aSlice/Slice
  28.    
  29.     Thanks:
  30.         JoeBullet/Google63 - Handy arbitrary ASM jump code using SCTRL.
  31.         Peter, Cam - Support.
  32.         ZeeX, g_aSlice/Slice, Popz, others - Very productive conversations.
  33.         koolk - IsPlayerinAreaEx code.
  34.         TheAlpha - Danish translation.
  35.         breadfish - German translation.
  36.         Fireburn - Dutch translation.
  37.         yom - French translation.
  38.         50p - Polish translation.
  39.         Zamaroht - Spanish translation.
  40.         Dracoblue, sintax, mabako, Xtreme, other coders - Producing other modes
  41.             for me to strive to better.
  42.         Pixels^ - Running XScripters where the idea was born.
  43.         Matite - Pestering me to release it and using it.
  44.    
  45.     Very special thanks to:
  46.         Thiadmer - PAWN, whose limits continue to amaze me!
  47.         Kye/Kalcor - SA:MP.
  48.         SA:MP Team past, present and future - SA:MP.
  49.    
  50. Version:
  51.     1.0
  52. Changelog:
  53.     17/03/11:
  54.         Second complete re-write using another new technique.  Now VERY fast!
  55.         Updated OnPlayerUpdate code using Google63's SCTRL jump code.
  56.     06/08/10:
  57.         First version
  58. -*----------------------------------------------------------------------------*/
  59.  
  60. #undef _inc_y_hooks
  61.  
  62. // Multiple includes!
  63. #include <YSI\internal\y_unique>
  64.  
  65. #if defined _INC_y_hooks
  66.     #endinput
  67. #endif
  68. // Everything except including "y_unique" is done once only.
  69. #define _INC_y_hooks
  70.  
  71. #include <YSI\internal\y_version>
  72. #include <a_samp>
  73.  
  74. #include <YSI\y_amx>
  75.  
  76. #define ALS_PREFIX S@@
  77.  
  78. #include <YSI\y_als>
  79.  
  80. #include <YSI\internal\y_defines>
  81. #include <YSI\internal\y_scriptinit>
  82.  
  83. #define hook%0On%1(%2) UNIQUE_FUNCTION(@yH_%1,)(%2);public UNIQUE_FUNCTION(@yH_%1,)(%2)
  84. #define Hook:%0On%1(%2) UNIQUE_FUNCTION(@yH_%1,%0)(%2);public UNIQUE_FUNCTION(@yH_%1,%0)(%2)
  85. //hook OnPlayerConnect
  86.  
  87. ALS_DATA<>
  88.  
  89. enum E_FUNC_HOOK_DATA
  90. {
  91.     E_FUNC_HOOK_DATA_START,
  92.     E_FUNC_HOOK_DATA_END
  93. }
  94.  
  95. static stock
  96.     YSI_g_sCallbackAddresses[HOOKS_MAX_UPDATES * _:ALS],
  97.     YSI_g_sCallbackData[ALS][E_FUNC_HOOK_DATA],
  98.     YSI_g_sLastFoundIndex;
  99.  
  100. static stock Hooks_RedirectPublic(from[], to[])
  101. {
  102.     new
  103.         addr;
  104.     if (AMX_GetPublicEntry(0, addr, from))
  105.     {
  106.         new
  107.             pointer;
  108.         if (AMX_GetPublicPointer(0, pointer, to))
  109.         {
  110.             AMX_Write(addr, pointer);
  111.         }
  112.     }
  113. }
  114.  
  115. static Hooks_AddOne(idx, &toaddidx, struc[E_FUNC_HOOK_DATA])
  116. {
  117.     // This is a combination between the count and the end point.
  118.     ++struc[E_FUNC_HOOK_DATA_END];
  119.     if (toaddidx == sizeof (YSI_g_sCallbackAddresses))
  120.     {
  121.         if (struc[E_FUNC_HOOK_DATA_START] != sizeof (YSI_g_sCallbackAddresses))
  122.         {
  123.             YSI_g_sLastFoundIndex = idx;
  124.         }
  125.     }
  126.     else
  127.     {
  128.         new
  129.             addr = (idx - 1) * 8 + AMX_Header[AMX_HEADER_PUBLICS];
  130.         #emit LREF.S.pri addr
  131.         #emit STOR.S.pri addr
  132.         YSI_g_sCallbackAddresses[toaddidx++] = addr;
  133.     }
  134. }
  135.  
  136. static Hooks_FindAll(name[], &toaddidx, struc[E_FUNC_HOOK_DATA], &count)
  137. {
  138.     new
  139.         buffer[32],
  140.         len = strlen(name);
  141.     struc[E_FUNC_HOOK_DATA_START] = toaddidx;
  142.     struc[E_FUNC_HOOK_DATA_END] = toaddidx;
  143.     for (new idx; (idx = AMX_GetPublicNamePrefix(idx, buffer, _A<@yH_>)); )
  144.     {
  145.         if (!strcmp(name, buffer[1], false, len))
  146.         {
  147.             Hooks_AddOne(idx, toaddidx, struc);
  148.         }
  149.     }
  150.     if (struc[E_FUNC_HOOK_DATA_START] < sizeof (YSI_g_sCallbackAddresses) && struc[E_FUNC_HOOK_DATA_END] >= sizeof (YSI_g_sCallbackAddresses))
  151.     {
  152.         printf("*** Internal warning: y_hooks buffer exhausted, resorting to slow method.");
  153.     }
  154.     count = struc[E_FUNC_HOOK_DATA_END] - struc[E_FUNC_HOOK_DATA_START];
  155.     // Don't store the end, if the count goes off the end of the addresses array
  156.     // then we need to just start reading from the AMX directly.
  157. }
  158.  
  159. #define HOOKS_DO_ONE_CALLBACK<%0> ALS_DETECT<%0>Hooks_FindAll(#%0,cidx,YSI_g_sCallbackData[ALS_On%0],count);if(!count)Hooks_RedirectPublic(#On%0,#S@@_On%0);
  160.  
  161. public OnScriptInit()
  162. {
  163.     new
  164.         cidx,
  165.         count;
  166.     HOOKS_DO_ONE_CALLBACK<ScriptInit>
  167.     HOOKS_DO_ONE_CALLBACK<GameModeInit>
  168.     HOOKS_DO_ONE_CALLBACK<GameModeExit>
  169.     HOOKS_DO_ONE_CALLBACK<FilterScriptInit>
  170.     HOOKS_DO_ONE_CALLBACK<FilterScriptExit>
  171.     HOOKS_DO_ONE_CALLBACK<PlayerConnect>
  172.     HOOKS_DO_ONE_CALLBACK<PlayerDisconnect>
  173.     HOOKS_DO_ONE_CALLBACK<PlayerSpawn>
  174.     HOOKS_DO_ONE_CALLBACK<PlayerDeath>
  175.     HOOKS_DO_ONE_CALLBACK<VehicleSpawn>
  176.     HOOKS_DO_ONE_CALLBACK<VehicleDeath>
  177.     HOOKS_DO_ONE_CALLBACK<PlayerText>
  178.     HOOKS_DO_ONE_CALLBACK<PlayerCommandText>
  179.     HOOKS_DO_ONE_CALLBACK<PlayerRequestClass>
  180.     HOOKS_DO_ONE_CALLBACK<PlayerEnterVehicle>
  181.     HOOKS_DO_ONE_CALLBACK<PlayerExitVehicle>
  182.     HOOKS_DO_ONE_CALLBACK<PlayerStateChange>
  183.     HOOKS_DO_ONE_CALLBACK<PlayerEnterCheckpoint>
  184.     HOOKS_DO_ONE_CALLBACK<PlayerLeaveCheckpoint>
  185.     HOOKS_DO_ONE_CALLBACK<PlayerEnterRaceCheckpoint>
  186.     HOOKS_DO_ONE_CALLBACK<PlayerLeaveRaceCheckpoint>
  187.     HOOKS_DO_ONE_CALLBACK<RconCommand>
  188.     HOOKS_DO_ONE_CALLBACK<PlayerRequestSpawn>
  189.     HOOKS_DO_ONE_CALLBACK<ObjectMoved>
  190.     HOOKS_DO_ONE_CALLBACK<PlayerObjectMoved>
  191.     HOOKS_DO_ONE_CALLBACK<PlayerPickUpPickup>
  192.     HOOKS_DO_ONE_CALLBACK<VehicleMod>
  193.     HOOKS_DO_ONE_CALLBACK<EnterExitModShop>
  194.     HOOKS_DO_ONE_CALLBACK<VehiclePaintjob>
  195.     HOOKS_DO_ONE_CALLBACK<VehicleRespray>
  196.     HOOKS_DO_ONE_CALLBACK<VehicleDamageStatusUpdate>
  197.     HOOKS_DO_ONE_CALLBACK<PlayerSelectedMenuRow>
  198.     HOOKS_DO_ONE_CALLBACK<PlayerExitedMenu>
  199.     HOOKS_DO_ONE_CALLBACK<PlayerInteriorChange>
  200.     HOOKS_DO_ONE_CALLBACK<PlayerKeyStateChange>
  201.     HOOKS_DO_ONE_CALLBACK<RconLoginAttempt>
  202.     HOOKS_DO_ONE_CALLBACK<PlayerUpdate>
  203.     HOOKS_DO_ONE_CALLBACK<PlayerStreamIn>
  204.     HOOKS_DO_ONE_CALLBACK<PlayerStreamOut>
  205.     HOOKS_DO_ONE_CALLBACK<VehicleStreamIn>
  206.     HOOKS_DO_ONE_CALLBACK<VehicleStreamOut>
  207.     HOOKS_DO_ONE_CALLBACK<DialogResponse>
  208.     HOOKS_DO_ONE_CALLBACK<PlayerClickPlayer>
  209.     HOOKS_DO_ONE_CALLBACK<PlayerLogin>
  210.     HOOKS_DO_ONE_CALLBACK<PlayerLogout>
  211.     new
  212.         end   = YSI_g_sCallbackData[ALS_OnScriptInit][E_FUNC_HOOK_DATA_END],
  213.         start = YSI_g_sCallbackData[ALS_OnScriptInit][E_FUNC_HOOK_DATA_START],
  214.         pointer,
  215.         idx,
  216.         re = end;
  217.     if (start == end) ALS_CALL<ScriptInit>
  218.     if (end > sizeof (YSI_g_sCallbackAddresses))
  219.     {
  220.         re = sizeof (YSI_g_sCallbackAddresses);
  221.         if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  222.     }
  223.     // Do the initial fast elements.
  224.     while (start != re)
  225.     {
  226.         pointer = YSI_g_sCallbackAddresses[start++];
  227.         #emit PUSH.C     0
  228.         #emit LCTRL      6
  229.         #emit ADD.C      28
  230.         #emit PUSH.pri
  231.         #emit LOAD.S.pri pointer
  232.         #emit SCTRL      6
  233.     }
  234.     // Get any remaining pointers the old way.
  235.     while (start++ != end)
  236.     {
  237.         idx = AMX_GetPublicPointer(idx, pointer, "@yH_ScriptInit");
  238.         #emit PUSH.C     0
  239.         #emit LCTRL      6
  240.         #emit ADD.C      28
  241.         #emit PUSH.pri
  242.         #emit LOAD.S.pri pointer
  243.         #emit SCTRL      6
  244.     }
  245.     // Do ALS just in case (YSI no longer uses this though now).
  246.     ALS_CALL<ScriptInit>
  247. }
  248. #undef OnScriptInit
  249. #define OnScriptInit Command_OnScriptInit
  250. forward OnScriptInit();
  251.  
  252. public OnGameModeInit()
  253. {
  254.     new
  255.         end   = YSI_g_sCallbackData[ALS_OnGameModeInit][E_FUNC_HOOK_DATA_END],
  256.         start = YSI_g_sCallbackData[ALS_OnGameModeInit][E_FUNC_HOOK_DATA_START],
  257.         pointer,
  258.         idx,
  259.         re = end;
  260.     if (start == end) ALS_CALL<GameModeInit>
  261.     if (end > sizeof (YSI_g_sCallbackAddresses))
  262.     {
  263.         re = sizeof (YSI_g_sCallbackAddresses);
  264.         if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  265.     }
  266.     // Do the initial fast elements.
  267.     while (start != re)
  268.     {
  269.         pointer = YSI_g_sCallbackAddresses[start++];
  270.         #emit PUSH.C     0
  271.         #emit LCTRL      6
  272.         #emit ADD.C      28
  273.         #emit PUSH.pri
  274.         #emit LOAD.S.pri pointer
  275.         #emit SCTRL      6
  276.     }
  277.     // Get any remaining pointers the old way.
  278.     while (start++ != end)
  279.     {
  280.         idx = AMX_GetPublicPointer(idx, pointer, "@yH_GameModeInit");
  281.         #emit PUSH.C     0
  282.         #emit LCTRL      6
  283.         #emit ADD.C      28
  284.         #emit PUSH.pri
  285.         #emit LOAD.S.pri pointer
  286.         #emit SCTRL      6
  287.     }
  288.     // Do ALS just in case (YSI no longer uses this though now).
  289.     ALS_CALL<GameModeInit>
  290. }
  291. #if defined _ALS_OnGameModeInit
  292.     #undef OnGameModeInit
  293. #else
  294.     #define _ALS_OnGameModeInit
  295. #endif
  296. #define OnGameModeInit S@@_OnGameModeInit
  297. ALS_FORWARD<GameModeInit>
  298.  
  299. public OnGameModeExit()
  300. {
  301.     new
  302.         end   = YSI_g_sCallbackData[ALS_OnGameModeExit][E_FUNC_HOOK_DATA_END],
  303.         start = YSI_g_sCallbackData[ALS_OnGameModeExit][E_FUNC_HOOK_DATA_START],
  304.         pointer,
  305.         idx,
  306.         re = end;
  307.     if (start == end) ALS_CALL<GameModeExit>
  308.     if (end > sizeof (YSI_g_sCallbackAddresses))
  309.     {
  310.         re = sizeof (YSI_g_sCallbackAddresses);
  311.         if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  312.     }
  313.     // Do the initial fast elements.
  314.     while (start != re)
  315.     {
  316.         pointer = YSI_g_sCallbackAddresses[start++];
  317.         #emit PUSH.C     0
  318.         #emit LCTRL      6
  319.         #emit ADD.C      28
  320.         #emit PUSH.pri
  321.         #emit LOAD.S.pri pointer
  322.         #emit SCTRL      6
  323.     }
  324.     // Get any remaining pointers the old way.
  325.     while (start++ != end)
  326.     {
  327.         idx = AMX_GetPublicPointer(idx, pointer, "@yH_GameModeExit");
  328.         #emit PUSH.C     0
  329.         #emit LCTRL      6
  330.         #emit ADD.C      28
  331.         #emit PUSH.pri
  332.         #emit LOAD.S.pri pointer
  333.         #emit SCTRL      6
  334.     }
  335.     // Do ALS just in case (YSI no longer uses this though now).
  336.     ALS_CALL<GameModeExit>
  337. }
  338. #if defined _ALS_OnGameModeExit
  339.     #undef OnGameModeExit
  340. #else
  341.     #define _ALS_OnGameModeExit
  342. #endif
  343. #define OnGameModeExit S@@_OnGameModeExit
  344. ALS_FORWARD<GameModeExit>
  345.  
  346. public OnFilterScriptInit()
  347. {
  348.     new
  349.         end   = YSI_g_sCallbackData[ALS_OnFilterScriptInit][E_FUNC_HOOK_DATA_END],
  350.         start = YSI_g_sCallbackData[ALS_OnFilterScriptInit][E_FUNC_HOOK_DATA_START],
  351.         pointer,
  352.         idx,
  353.         re = end;
  354.     if (start == end) ALS_CALL<FilterScriptInit>
  355.     if (end > sizeof (YSI_g_sCallbackAddresses))
  356.     {
  357.         re = sizeof (YSI_g_sCallbackAddresses);
  358.         if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  359.     }
  360.     // Do the initial fast elements.
  361.     while (start != re)
  362.     {
  363.         pointer = YSI_g_sCallbackAddresses[start++];
  364.         #emit PUSH.C     0
  365.         #emit LCTRL      6
  366.         #emit ADD.C      28
  367.         #emit PUSH.pri
  368.         #emit LOAD.S.pri pointer
  369.         #emit SCTRL      6
  370.     }
  371.     // Get any remaining pointers the old way.
  372.     while (start++ != end)
  373.     {
  374.         idx = AMX_GetPublicPointer(idx, pointer, "@yH_FilterScriptInit");
  375.         #emit PUSH.C     0
  376.         #emit LCTRL      6
  377.         #emit ADD.C      28
  378.         #emit PUSH.pri
  379.         #emit LOAD.S.pri pointer
  380.         #emit SCTRL      6
  381.     }
  382.     // Do ALS just in case (YSI no longer uses this though now).
  383.     ALS_CALL<FilterScriptInit>
  384. }
  385. #if defined _ALS_OnFilterScriptInit
  386.     #undef OnFilterScriptInit
  387. #else
  388.     #define _ALS_OnFilterScriptInit
  389. #endif
  390. #define OnFilterScriptInit S@@_OnFilterScriptInit
  391. ALS_FORWARD<FilterScriptInit>
  392.  
  393. public OnFilterScriptExit()
  394. {
  395.     new
  396.         end   = YSI_g_sCallbackData[ALS_OnFilterScriptExit][E_FUNC_HOOK_DATA_END],
  397.         start = YSI_g_sCallbackData[ALS_OnFilterScriptExit][E_FUNC_HOOK_DATA_START],
  398.         pointer,
  399.         idx,
  400.         re = end;
  401.     if (start == end) ALS_CALL<FilterScriptExit>
  402.     if (end > sizeof (YSI_g_sCallbackAddresses))
  403.     {
  404.         re = sizeof (YSI_g_sCallbackAddresses);
  405.         if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  406.     }
  407.     // Do the initial fast elements.
  408.     while (start != re)
  409.     {
  410.         pointer = YSI_g_sCallbackAddresses[start++];
  411.         #emit PUSH.C     0
  412.         #emit LCTRL      6
  413.         #emit ADD.C      28
  414.         #emit PUSH.pri
  415.         #emit LOAD.S.pri pointer
  416.         #emit SCTRL      6
  417.     }
  418.     // Get any remaining pointers the old way.
  419.     while (start++ != end)
  420.     {
  421.         idx = AMX_GetPublicPointer(idx, pointer, "@yH_FilterScriptExit");
  422.         #emit PUSH.C     0
  423.         #emit LCTRL      6
  424.         #emit ADD.C      28
  425.         #emit PUSH.pri
  426.         #emit LOAD.S.pri pointer
  427.         #emit SCTRL      6
  428.     }
  429.     // Do ALS just in case (YSI no longer uses this though now).
  430.     ALS_CALL<FilterScriptExit>
  431. }
  432. #if defined _ALS_OnFilterScriptExit
  433.     #undef OnFilterScriptExit
  434. #else
  435.     #define _ALS_OnFilterScriptExit
  436. #endif
  437. #define OnFilterScriptExit S@@_OnFilterScriptExit
  438. ALS_FORWARD<FilterScriptExit>
  439.  
  440. public OnPlayerConnect(playerid)
  441. {
  442.     new
  443.         end   = YSI_g_sCallbackData[ALS_OnPlayerConnect][E_FUNC_HOOK_DATA_END],
  444.         start = YSI_g_sCallbackData[ALS_OnPlayerConnect][E_FUNC_HOOK_DATA_START],
  445.         pointer,
  446.         idx,
  447.         re = end;
  448.     if (start == end) ALS_CALL<PlayerConnect>
  449.     if (end > sizeof (YSI_g_sCallbackAddresses))
  450.     {
  451.         re = sizeof (YSI_g_sCallbackAddresses);
  452.         if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  453.     }
  454.     // Do the initial fast elements.
  455.     while (start != re)
  456.     {
  457.         pointer = YSI_g_sCallbackAddresses[start++];
  458.         #emit PUSH.S playerid
  459.         #emit PUSH.C     4
  460.         #emit LCTRL      6
  461.         #emit ADD.C      28
  462.         #emit PUSH.pri
  463.         #emit LOAD.S.pri pointer
  464.         #emit SCTRL      6
  465.     }
  466.     // Get any remaining pointers the old way.
  467.     while (start++ != end)
  468.     {
  469.         idx = AMX_GetPublicPointer(idx, pointer, "@yH_PlayerConnect");
  470.         #emit PUSH.S playerid
  471.         #emit PUSH.C     4
  472.         #emit LCTRL      6
  473.         #emit ADD.C      28
  474.         #emit PUSH.pri
  475.         #emit LOAD.S.pri pointer
  476.         #emit SCTRL      6
  477.     }
  478.     // Do ALS just in case (YSI no longer uses this though now).
  479.     ALS_CALL<PlayerConnect>
  480. }
  481. #if defined _ALS_OnPlayerConnect
  482.     #undef OnPlayerConnect
  483. #else
  484.     #define _ALS_OnPlayerConnect
  485. #endif
  486. #define OnPlayerConnect S@@_OnPlayerConnect
  487. ALS_FORWARD<PlayerConnect>
  488.  
  489. public OnPlayerDisconnect(playerid, reason)
  490. {
  491.     new
  492.         end   = YSI_g_sCallbackData[ALS_OnPlayerDisconnect][E_FUNC_HOOK_DATA_END],
  493.         start = YSI_g_sCallbackData[ALS_OnPlayerDisconnect][E_FUNC_HOOK_DATA_START],
  494.         pointer,
  495.         idx,
  496.         re = end;
  497.     if (start == end) ALS_CALL<PlayerDisconnect>
  498.     if (end > sizeof (YSI_g_sCallbackAddresses))
  499.     {
  500.         re = sizeof (YSI_g_sCallbackAddresses);
  501.         if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  502.     }
  503.     // Do the initial fast elements.
  504.     while (start != re)
  505.     {
  506.         pointer = YSI_g_sCallbackAddresses[start++];
  507.         #emit PUSH.S reason
  508.         #emit PUSH.S playerid
  509.         #emit PUSH.C     8
  510.         #emit LCTRL      6
  511.         #emit ADD.C      28
  512.         #emit PUSH.pri
  513.         #emit LOAD.S.pri pointer
  514.         #emit SCTRL      6
  515.     }
  516.     // Get any remaining pointers the old way.
  517.     while (start++ != end)
  518.     {
  519.         idx = AMX_GetPublicPointer(idx, pointer, "@yH_PlayerDisconnect");
  520.         #emit PUSH.S reason
  521.         #emit PUSH.S playerid
  522.         #emit PUSH.C     8
  523.         #emit LCTRL      6
  524.         #emit ADD.C      28
  525.         #emit PUSH.pri
  526.         #emit LOAD.S.pri pointer
  527.         #emit SCTRL      6
  528.     }
  529.     // Do ALS just in case (YSI no longer uses this though now).
  530.     ALS_CALL<PlayerDisconnect>
  531. }
  532. #if defined _ALS_OnPlayerDisconnect
  533.     #undef OnPlayerDisconnect
  534. #else
  535.     #define _ALS_OnPlayerDisconnect
  536. #endif
  537. #define OnPlayerDisconnect S@@_OnPlayerDisconnect
  538. ALS_FORWARD<PlayerDisconnect>
  539.  
  540. public OnPlayerSpawn(playerid)
  541. {
  542.     new
  543.         end   = YSI_g_sCallbackData[ALS_OnPlayerSpawn][E_FUNC_HOOK_DATA_END],
  544.         start = YSI_g_sCallbackData[ALS_OnPlayerSpawn][E_FUNC_HOOK_DATA_START],
  545.         pointer,
  546.         idx,
  547.         re = end;
  548.     if (start == end) ALS_CALL<PlayerSpawn>
  549.     if (end > sizeof (YSI_g_sCallbackAddresses))
  550.     {
  551.         re = sizeof (YSI_g_sCallbackAddresses);
  552.         if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  553.     }
  554.     // Do the initial fast elements.
  555.     while (start != re)
  556.     {
  557.         pointer = YSI_g_sCallbackAddresses[start++];
  558.         #emit PUSH.S playerid
  559.         #emit PUSH.C     4
  560.         #emit LCTRL      6
  561.         #emit ADD.C      28
  562.         #emit PUSH.pri
  563.         #emit LOAD.S.pri pointer
  564.         #emit SCTRL      6
  565.     }
  566.     // Get any remaining pointers the old way.
  567.     while (start++ != end)
  568.     {
  569.         idx = AMX_GetPublicPointer(idx, pointer, "@yH_PlayerSpawn");
  570.         #emit PUSH.S playerid
  571.         #emit PUSH.C     4
  572.         #emit LCTRL      6
  573.         #emit ADD.C      28
  574.         #emit PUSH.pri
  575.         #emit LOAD.S.pri pointer
  576.         #emit SCTRL      6
  577.     }
  578.     // Do ALS just in case (YSI no longer uses this though now).
  579.     ALS_CALL<PlayerSpawn>
  580. }
  581. #if defined _ALS_OnPlayerSpawn
  582.     #undef OnPlayerSpawn
  583. #else
  584.     #define _ALS_OnPlayerSpawn
  585. #endif
  586. #define OnPlayerSpawn S@@_OnPlayerSpawn
  587. ALS_FORWARD<PlayerSpawn>
  588.  
  589. public OnPlayerDeath(playerid, killerid, reason)
  590. {
  591.     new
  592.         end   = YSI_g_sCallbackData[ALS_OnPlayerDeath][E_FUNC_HOOK_DATA_END],
  593.         start = YSI_g_sCallbackData[ALS_OnPlayerDeath][E_FUNC_HOOK_DATA_START],
  594.         pointer,
  595.         idx,
  596.         re = end;
  597.     if (start == end) ALS_CALL<PlayerDeath>
  598.     if (end > sizeof (YSI_g_sCallbackAddresses))
  599.     {
  600.         re = sizeof (YSI_g_sCallbackAddresses);
  601.         if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  602.     }
  603.     // Do the initial fast elements.
  604.     while (start != re)
  605.     {
  606.         pointer = YSI_g_sCallbackAddresses[start++];
  607.         #emit PUSH.S reason
  608.         #emit PUSH.S killerid
  609.         #emit PUSH.S playerid
  610.         #emit PUSH.C     12
  611.         #emit LCTRL      6
  612.         #emit ADD.C      28
  613.         #emit PUSH.pri
  614.         #emit LOAD.S.pri pointer
  615.         #emit SCTRL      6
  616.     }
  617.     // Get any remaining pointers the old way.
  618.     while (start++ != end)
  619.     {
  620.         idx = AMX_GetPublicPointer(idx, pointer, "@yH_PlayerDeath");
  621.         #emit PUSH.S reason
  622.         #emit PUSH.S killerid
  623.         #emit PUSH.S playerid
  624.         #emit PUSH.C     12
  625.         #emit LCTRL      6
  626.         #emit ADD.C      28
  627.         #emit PUSH.pri
  628.         #emit LOAD.S.pri pointer
  629.         #emit SCTRL      6
  630.     }
  631.     // Do ALS just in case (YSI no longer uses this though now).
  632.     ALS_CALL<PlayerDeath>
  633. }
  634. #if defined _ALS_OnPlayerDeath
  635.     #undef OnPlayerDeath
  636. #else
  637.     #define _ALS_OnPlayerDeath
  638. #endif
  639. #define OnPlayerDeath S@@_OnPlayerDeath
  640. ALS_FORWARD<PlayerDeath>
  641.  
  642. public OnVehicleSpawn(vehicleid)
  643. {
  644.     new
  645.         end   = YSI_g_sCallbackData[ALS_OnVehicleSpawn][E_FUNC_HOOK_DATA_END],
  646.         start = YSI_g_sCallbackData[ALS_OnVehicleSpawn][E_FUNC_HOOK_DATA_START],
  647.         pointer,
  648.         idx,
  649.         re = end;
  650.     if (start == end) ALS_CALL<VehicleSpawn>
  651.     if (end > sizeof (YSI_g_sCallbackAddresses))
  652.     {
  653.         re = sizeof (YSI_g_sCallbackAddresses);
  654.         if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  655.     }
  656.     // Do the initial fast elements.
  657.     while (start != re)
  658.     {
  659.         pointer = YSI_g_sCallbackAddresses[start++];
  660.         #emit PUSH.S vehicleid
  661.         #emit PUSH.C     4
  662.         #emit LCTRL      6
  663.         #emit ADD.C      28
  664.         #emit PUSH.pri
  665.         #emit LOAD.S.pri pointer
  666.         #emit SCTRL      6
  667.     }
  668.     // Get any remaining pointers the old way.
  669.     while (start++ != end)
  670.     {
  671.         idx = AMX_GetPublicPointer(idx, pointer, "@yH_VehicleSpawn");
  672.         #emit PUSH.S vehicleid
  673.         #emit PUSH.C     4
  674.         #emit LCTRL      6
  675.         #emit ADD.C      28
  676.         #emit PUSH.pri
  677.         #emit LOAD.S.pri pointer
  678.         #emit SCTRL      6
  679.     }
  680.     // Do ALS just in case (YSI no longer uses this though now).
  681.     ALS_CALL<VehicleSpawn>
  682. }
  683. #if defined _ALS_OnVehicleSpawn
  684.     #undef OnVehicleSpawn
  685. #else
  686.     #define _ALS_OnVehicleSpawn
  687. #endif
  688. #define OnVehicleSpawn S@@_OnVehicleSpawn
  689. ALS_FORWARD<VehicleSpawn>
  690.  
  691. public OnVehicleDeath(vehicleid, killerid)
  692. {
  693.     new
  694.         end   = YSI_g_sCallbackData[ALS_OnVehicleDeath][E_FUNC_HOOK_DATA_END],
  695.         start = YSI_g_sCallbackData[ALS_OnVehicleDeath][E_FUNC_HOOK_DATA_START],
  696.         pointer,
  697.         idx,
  698.         re = end;
  699.     if (start == end) ALS_CALL<VehicleDeath>
  700.     if (end > sizeof (YSI_g_sCallbackAddresses))
  701.     {
  702.         re = sizeof (YSI_g_sCallbackAddresses);
  703.         if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  704.     }
  705.     // Do the initial fast elements.
  706.     while (start != re)
  707.     {
  708.         pointer = YSI_g_sCallbackAddresses[start++];
  709.         #emit PUSH.S killerid
  710.         #emit PUSH.S vehicleid
  711.         #emit PUSH.C     8
  712.         #emit LCTRL      6
  713.         #emit ADD.C      28
  714.         #emit PUSH.pri
  715.         #emit LOAD.S.pri pointer
  716.         #emit SCTRL      6
  717.     }
  718.     // Get any remaining pointers the old way.
  719.     while (start++ != end)
  720.     {
  721.         idx = AMX_GetPublicPointer(idx, pointer, "@yH_VehicleDeath");
  722.         #emit PUSH.S killerid
  723.         #emit PUSH.S vehicleid
  724.         #emit PUSH.C     8
  725.         #emit LCTRL      6
  726.         #emit ADD.C      28
  727.         #emit PUSH.pri
  728.         #emit LOAD.S.pri pointer
  729.         #emit SCTRL      6
  730.     }
  731.     // Do ALS just in case (YSI no longer uses this though now).
  732.     ALS_CALL<VehicleDeath>
  733. }
  734. #if defined _ALS_OnVehicleDeath
  735.     #undef OnVehicleDeath
  736. #else
  737.     #define _ALS_OnVehicleDeath
  738. #endif
  739. #define OnVehicleDeath S@@_OnVehicleDeath
  740. ALS_FORWARD<VehicleDeath>
  741.  
  742. public OnPlayerText(playerid, text[])
  743. {
  744.     new
  745.         end   = YSI_g_sCallbackData[ALS_OnPlayerText][E_FUNC_HOOK_DATA_END],
  746.         start = YSI_g_sCallbackData[ALS_OnPlayerText][E_FUNC_HOOK_DATA_START],
  747.         pointer,
  748.         idx,
  749.         re = end;
  750.     if (start == end) ALS_CALL<PlayerText>
  751.     if (end > sizeof (YSI_g_sCallbackAddresses))
  752.     {
  753.         re = sizeof (YSI_g_sCallbackAddresses);
  754.         if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  755.     }
  756.     // Do the initial fast elements.
  757.     while (start != re)
  758.     {
  759.         pointer = YSI_g_sCallbackAddresses[start++];
  760.         #emit PUSH.S text
  761.         #emit PUSH.S playerid
  762.         #emit PUSH.C     8
  763.         #emit LCTRL      6
  764.         #emit ADD.C      28
  765.         #emit PUSH.pri
  766.         #emit LOAD.S.pri pointer
  767.         #emit SCTRL      6
  768.     }
  769.     // Get any remaining pointers the old way.
  770.     while (start++ != end)
  771.     {
  772.         idx = AMX_GetPublicPointer(idx, pointer, "@yH_PlayerText");
  773.         #emit PUSH.S text
  774.         #emit PUSH.S playerid
  775.         #emit PUSH.C     8
  776.         #emit LCTRL      6
  777.         #emit ADD.C      28
  778.         #emit PUSH.pri
  779.         #emit LOAD.S.pri pointer
  780.         #emit SCTRL      6
  781.     }
  782.     // Do ALS just in case (YSI no longer uses this though now).
  783.     ALS_CALL<PlayerText>
  784. }
  785. #if defined _ALS_OnPlayerText
  786.     #undef OnPlayerText
  787. #else
  788.     #define _ALS_OnPlayerText
  789. #endif
  790. #define OnPlayerText S@@_OnPlayerText
  791. ALS_FORWARD<PlayerText>
  792.  
  793. public OnPlayerCommandText(playerid, cmdtext[])
  794. {
  795.     new
  796.         end   = YSI_g_sCallbackData[ALS_OnPlayerCommandText][E_FUNC_HOOK_DATA_END],
  797.         start = YSI_g_sCallbackData[ALS_OnPlayerCommandText][E_FUNC_HOOK_DATA_START],
  798.         pointer,
  799.         idx,
  800.         re = end;
  801.     if (start == end) ALS_CALL<PlayerCommandText>
  802.     if (end > sizeof (YSI_g_sCallbackAddresses))
  803.     {
  804.         re = sizeof (YSI_g_sCallbackAddresses);
  805.         if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  806.     }
  807.     // Do the initial fast elements.
  808.     while (start != re)
  809.     {
  810.         pointer = YSI_g_sCallbackAddresses[start++];
  811.         #emit PUSH.S cmdtext
  812.         #emit PUSH.S playerid
  813.         #emit PUSH.C     8
  814.         #emit LCTRL      6
  815.         #emit ADD.C      28
  816.         #emit PUSH.pri
  817.         #emit LOAD.S.pri pointer
  818.         #emit SCTRL      6
  819.     }
  820.     // Get any remaining pointers the old way.
  821.     while (start++ != end)
  822.     {
  823.         idx = AMX_GetPublicPointer(idx, pointer, "@yH_PlayerCommandText");
  824.         #emit PUSH.S cmdtext
  825.         #emit PUSH.S playerid
  826.         #emit PUSH.C     8
  827.         #emit LCTRL      6
  828.         #emit ADD.C      28
  829.         #emit PUSH.pri
  830.         #emit LOAD.S.pri pointer
  831.         #emit SCTRL      6
  832.     }
  833.     // Do ALS just in case (YSI no longer uses this though now).
  834.     ALS_CALL<PlayerCommandText>
  835. }
  836. #if defined _ALS_OnPlayerCommandText
  837.     #undef OnPlayerCommandText
  838. #else
  839.     #define _ALS_OnPlayerCommandText
  840. #endif
  841. #define OnPlayerCommandText S@@_OnPlayerCommandText
  842. ALS_FORWARD<PlayerCommandText>
  843.  
  844. public OnPlayerRequestClass(playerid, classid)
  845. {
  846.     new
  847.         end   = YSI_g_sCallbackData[ALS_OnPlayerRequestClass][E_FUNC_HOOK_DATA_END],
  848.         start = YSI_g_sCallbackData[ALS_OnPlayerRequestClass][E_FUNC_HOOK_DATA_START],
  849.         pointer,
  850.         idx,
  851.         re = end;
  852.     if (start == end) ALS_CALL<PlayerRequestClass>
  853.     if (end > sizeof (YSI_g_sCallbackAddresses))
  854.     {
  855.         re = sizeof (YSI_g_sCallbackAddresses);
  856.         if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  857.     }
  858.     // Do the initial fast elements.
  859.     while (start != re)
  860.     {
  861.         pointer = YSI_g_sCallbackAddresses[start++];
  862.         #emit PUSH.S classid
  863.         #emit PUSH.S playerid
  864.         #emit PUSH.C     8
  865.         #emit LCTRL      6
  866.         #emit ADD.C      28
  867.         #emit PUSH.pri
  868.         #emit LOAD.S.pri pointer
  869.         #emit SCTRL      6
  870.     }
  871.     // Get any remaining pointers the old way.
  872.     while (start++ != end)
  873.     {
  874.         idx = AMX_GetPublicPointer(idx, pointer, "@yH_PlayerRequestClass");
  875.         #emit PUSH.S classid
  876.         #emit PUSH.S playerid
  877.         #emit PUSH.C     8
  878.         #emit LCTRL      6
  879.         #emit ADD.C      28
  880.         #emit PUSH.pri
  881.         #emit LOAD.S.pri pointer
  882.         #emit SCTRL      6
  883.     }
  884.     // Do ALS just in case (YSI no longer uses this though now).
  885.     ALS_CALL<PlayerRequestClass>
  886. }
  887. #if defined _ALS_OnPlayerRequestClass
  888.     #undef OnPlayerRequestClass
  889. #else
  890.     #define _ALS_OnPlayerRequestClass
  891. #endif
  892. #define OnPlayerRequestClass S@@_OnPlayerRequestClass
  893. ALS_FORWARD<PlayerRequestClass>
  894.  
  895. public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
  896. {
  897.     new
  898.         end   = YSI_g_sCallbackData[ALS_OnPlayerEnterVehicle][E_FUNC_HOOK_DATA_END],
  899.         start = YSI_g_sCallbackData[ALS_OnPlayerEnterVehicle][E_FUNC_HOOK_DATA_START],
  900.         pointer,
  901.         idx,
  902.         re = end;
  903.     if (start == end) ALS_CALL<PlayerEnterVehicle>
  904.     if (end > sizeof (YSI_g_sCallbackAddresses))
  905.     {
  906.         re = sizeof (YSI_g_sCallbackAddresses);
  907.         if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  908.     }
  909.     // Do the initial fast elements.
  910.     while (start != re)
  911.     {
  912.         pointer = YSI_g_sCallbackAddresses[start++];
  913.         #emit PUSH.S ispassenger
  914.         #emit PUSH.S vehicleid
  915.         #emit PUSH.S playerid
  916.         #emit PUSH.C     12
  917.         #emit LCTRL      6
  918.         #emit ADD.C      28
  919.         #emit PUSH.pri
  920.         #emit LOAD.S.pri pointer
  921.         #emit SCTRL      6
  922.     }
  923.     // Get any remaining pointers the old way.
  924.     while (start++ != end)
  925.     {
  926.         idx = AMX_GetPublicPointer(idx, pointer, "@yH_PlayerEnterVehicle");
  927.         #emit PUSH.S ispassenger
  928.         #emit PUSH.S vehicleid
  929.         #emit PUSH.S playerid
  930.         #emit PUSH.C     12
  931.         #emit LCTRL      6
  932.         #emit ADD.C      28
  933.         #emit PUSH.pri
  934.         #emit LOAD.S.pri pointer
  935.         #emit SCTRL      6
  936.     }
  937.     // Do ALS just in case (YSI no longer uses this though now).
  938.     ALS_CALL<PlayerEnterVehicle>
  939. }
  940. #if defined _ALS_OnPlayerEnterVehicle
  941.     #undef OnPlayerEnterVehicle
  942. #else
  943.     #define _ALS_OnPlayerEnterVehicle
  944. #endif
  945. #define OnPlayerEnterVehicle S@@_OnPlayerEnterVehicle
  946. ALS_FORWARD<PlayerEnterVehicle>
  947.  
  948. public OnPlayerExitVehicle(playerid, vehicleid)
  949. {
  950.     new
  951.         end   = YSI_g_sCallbackData[ALS_OnPlayerExitVehicle][E_FUNC_HOOK_DATA_END],
  952.         start = YSI_g_sCallbackData[ALS_OnPlayerExitVehicle][E_FUNC_HOOK_DATA_START],
  953.         pointer,
  954.         idx,
  955.         re = end;
  956.     if (start == end) ALS_CALL<PlayerExitVehicle>
  957.     if (end > sizeof (YSI_g_sCallbackAddresses))
  958.     {
  959.         re = sizeof (YSI_g_sCallbackAddresses);
  960.         if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  961.     }
  962.     // Do the initial fast elements.
  963.     while (start != re)
  964.     {
  965.         pointer = YSI_g_sCallbackAddresses[start++];
  966.         #emit PUSH.S vehicleid
  967.         #emit PUSH.S playerid
  968.         #emit PUSH.C     8
  969.         #emit LCTRL      6
  970.         #emit ADD.C      28
  971.         #emit PUSH.pri
  972.         #emit LOAD.S.pri pointer
  973.         #emit SCTRL      6
  974.     }
  975.     // Get any remaining pointers the old way.
  976.     while (start++ != end)
  977.     {
  978.         idx = AMX_GetPublicPointer(idx, pointer, "@yH_PlayerExitVehicle");
  979.         #emit PUSH.S vehicleid
  980.         #emit PUSH.S playerid
  981.         #emit PUSH.C     8
  982.         #emit LCTRL      6
  983.         #emit ADD.C      28
  984.         #emit PUSH.pri
  985.         #emit LOAD.S.pri pointer
  986.         #emit SCTRL      6
  987.     }
  988.     // Do ALS just in case (YSI no longer uses this though now).
  989.     ALS_CALL<PlayerExitVehicle>
  990. }
  991. #if defined _ALS_OnPlayerExitVehicle
  992.     #undef OnPlayerExitVehicle
  993. #else
  994.     #define _ALS_OnPlayerExitVehicle
  995. #endif
  996. #define OnPlayerExitVehicle S@@_OnPlayerExitVehicle
  997. ALS_FORWARD<PlayerExitVehicle>
  998.  
  999. public OnPlayerStateChange(playerid, newstate, oldstate)
  1000. {
  1001.     new
  1002.         end   = YSI_g_sCallbackData[ALS_OnPlayerStateChange][E_FUNC_HOOK_DATA_END],
  1003.         start = YSI_g_sCallbackData[ALS_OnPlayerStateChange][E_FUNC_HOOK_DATA_START],
  1004.         pointer,
  1005.         idx,
  1006.         re = end;
  1007.     if (start == end) ALS_CALL<PlayerStateChange>
  1008.     if (end > sizeof (YSI_g_sCallbackAddresses))
  1009.     {
  1010.         re = sizeof (YSI_g_sCallbackAddresses);
  1011.         if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  1012.     }
  1013.     // Do the initial fast elements.
  1014.     while (start != re)
  1015.     {
  1016.         pointer = YSI_g_sCallbackAddresses[start++];
  1017.         #emit PUSH.S oldstate
  1018.         #emit PUSH.S newstate
  1019.         #emit PUSH.S playerid
  1020.         #emit PUSH.C     12
  1021.         #emit LCTRL      6
  1022.         #emit ADD.C      28
  1023.         #emit PUSH.pri
  1024.         #emit LOAD.S.pri pointer
  1025.         #emit SCTRL      6
  1026.     }
  1027.     // Get any remaining pointers the old way.
  1028.     while (start++ != end)
  1029.     {
  1030.         idx = AMX_GetPublicPointer(idx, pointer, "@yH_PlayerStateChange");
  1031.         #emit PUSH.S oldstate
  1032.         #emit PUSH.S newstate
  1033.         #emit PUSH.S playerid
  1034.         #emit PUSH.C     12
  1035.         #emit LCTRL      6
  1036.         #emit ADD.C      28
  1037.         #emit PUSH.pri
  1038.         #emit LOAD.S.pri pointer
  1039.         #emit SCTRL      6
  1040.     }
  1041.     // Do ALS just in case (YSI no longer uses this though now).
  1042.     ALS_CALL<PlayerStateChange>
  1043. }
  1044. #if defined _ALS_OnPlayerStateChange
  1045.     #undef OnPlayerStateChange
  1046. #else
  1047.     #define _ALS_OnPlayerStateChange
  1048. #endif
  1049. #define OnPlayerStateChange S@@_OnPlayerStateChange
  1050. ALS_FORWARD<PlayerStateChange>
  1051.  
  1052. public OnPlayerEnterCheckpoint(playerid)
  1053. {
  1054.     new
  1055.         end   = YSI_g_sCallbackData[ALS_OnPlayerEnterCheckpoint][E_FUNC_HOOK_DATA_END],
  1056.         start = YSI_g_sCallbackData[ALS_OnPlayerEnterCheckpoint][E_FUNC_HOOK_DATA_START],
  1057.         pointer,
  1058.         idx,
  1059.         re = end;
  1060.     if (start == end) ALS_CALL<PlayerEnterCheckpoint>
  1061.     if (end > sizeof (YSI_g_sCallbackAddresses))
  1062.     {
  1063.         re = sizeof (YSI_g_sCallbackAddresses);
  1064.         if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  1065.     }
  1066.     // Do the initial fast elements.
  1067.     while (start != re)
  1068.     {
  1069.         pointer = YSI_g_sCallbackAddresses[start++];
  1070.         #emit PUSH.S playerid
  1071.         #emit PUSH.C     4
  1072.         #emit LCTRL      6
  1073.         #emit ADD.C      28
  1074.         #emit PUSH.pri
  1075.         #emit LOAD.S.pri pointer
  1076.         #emit SCTRL      6
  1077.     }
  1078.     // Get any remaining pointers the old way.
  1079.     while (start++ != end)
  1080.     {
  1081.         idx = AMX_GetPublicPointer(idx, pointer, "@yH_PlayerEnterCheckpoint");
  1082.         #emit PUSH.S playerid
  1083.         #emit PUSH.C     4
  1084.         #emit LCTRL      6
  1085.         #emit ADD.C      28
  1086.         #emit PUSH.pri
  1087.         #emit LOAD.S.pri pointer
  1088.         #emit SCTRL      6
  1089.     }
  1090.     // Do ALS just in case (YSI no longer uses this though now).
  1091.     ALS_CALL<PlayerEnterCheckpoint>
  1092. }
  1093. #if defined _ALS_OnPlayerEnterCheckpoint
  1094.     #undef OnPlayerEnterCheckpoint
  1095. #else
  1096.     #define _ALS_OnPlayerEnterCheckpoint
  1097. #endif
  1098. #define OnPlayerEnterCheckpoint S@@_OnPlayerEnterCheckpoint
  1099. ALS_FORWARD<PlayerEnterCheckpoint>
  1100.  
  1101. public OnPlayerLeaveCheckpoint(playerid)
  1102. {
  1103.     new
  1104.         end   = YSI_g_sCallbackData[ALS_OnPlayerLeaveCheckpoint][E_FUNC_HOOK_DATA_END],
  1105.         start = YSI_g_sCallbackData[ALS_OnPlayerLeaveCheckpoint][E_FUNC_HOOK_DATA_START],
  1106.         pointer,
  1107.         idx,
  1108.         re = end;
  1109.     if (start == end) ALS_CALL<PlayerLeaveCheckpoint>
  1110.     if (end > sizeof (YSI_g_sCallbackAddresses))
  1111.     {
  1112.         re = sizeof (YSI_g_sCallbackAddresses);
  1113.         if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  1114.     }
  1115.     // Do the initial fast elements.
  1116.     while (start != re)
  1117.     {
  1118.         pointer = YSI_g_sCallbackAddresses[start++];
  1119.         #emit PUSH.S playerid
  1120.         #emit PUSH.C     4
  1121.         #emit LCTRL      6
  1122.         #emit ADD.C      28
  1123.         #emit PUSH.pri
  1124.         #emit LOAD.S.pri pointer
  1125.         #emit SCTRL      6
  1126.     }
  1127.     // Get any remaining pointers the old way.
  1128.     while (start++ != end)
  1129.     {
  1130.         idx = AMX_GetPublicPointer(idx, pointer, "@yH_PlayerLeaveCheckpoint");
  1131.         #emit PUSH.S playerid
  1132.         #emit PUSH.C     4
  1133.         #emit LCTRL      6
  1134.         #emit ADD.C      28
  1135.         #emit PUSH.pri
  1136.         #emit LOAD.S.pri pointer
  1137.         #emit SCTRL      6
  1138.     }
  1139.     // Do ALS just in case (YSI no longer uses this though now).
  1140.     ALS_CALL<PlayerLeaveCheckpoint>
  1141. }
  1142. #if defined _ALS_OnPlayerLeaveCheckpoint
  1143.     #undef OnPlayerLeaveCheckpoint
  1144. #else
  1145.     #define _ALS_OnPlayerLeaveCheckpoint
  1146. #endif
  1147. #define OnPlayerLeaveCheckpoint S@@_OnPlayerLeaveCheckpoint
  1148. ALS_FORWARD<PlayerLeaveCheckpoint>
  1149.  
  1150. public OnPlayerEnterRaceCheckpoint(playerid)
  1151. {
  1152.     new
  1153.         end   = YSI_g_sCallbackData[ALS_OnPlayerEnterRaceCheckpoint][E_FUNC_HOOK_DATA_END],
  1154.         start = YSI_g_sCallbackData[ALS_OnPlayerEnterRaceCheckpoint][E_FUNC_HOOK_DATA_START],
  1155.         pointer,
  1156.         idx,
  1157.         re = end;
  1158.     if (start == end) ALS_CALL<PlayerEnterRaceCheckpoint>
  1159.     if (end > sizeof (YSI_g_sCallbackAddresses))
  1160.     {
  1161.         re = sizeof (YSI_g_sCallbackAddresses);
  1162.         if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  1163.     }
  1164.     // Do the initial fast elements.
  1165.     while (start != re)
  1166.     {
  1167.         pointer = YSI_g_sCallbackAddresses[start++];
  1168.         #emit PUSH.S playerid
  1169.         #emit PUSH.C     4
  1170.         #emit LCTRL      6
  1171.         #emit ADD.C      28
  1172.         #emit PUSH.pri
  1173.         #emit LOAD.S.pri pointer
  1174.         #emit SCTRL      6
  1175.     }
  1176.     // Get any remaining pointers the old way.
  1177.     while (start++ != end)
  1178.     {
  1179.         idx = AMX_GetPublicPointer(idx, pointer, "@yH_PlayerEnterRaceCheckpoint");
  1180.         #emit PUSH.S playerid
  1181.         #emit PUSH.C     4
  1182.         #emit LCTRL      6
  1183.         #emit ADD.C      28
  1184.         #emit PUSH.pri
  1185.         #emit LOAD.S.pri pointer
  1186.         #emit SCTRL      6
  1187.     }
  1188.     // Do ALS just in case (YSI no longer uses this though now).
  1189.     ALS_CALL<PlayerEnterRaceCheckpoint>
  1190. }
  1191. #if defined _ALS_OnPlayerEnterRaceCP
  1192.     #undef OnPlayerEnterRaceCheckpoint
  1193. #else
  1194.     #define _ALS_OnPlayerEnterRaceCP
  1195. #endif
  1196. #define OnPlayerEnterRaceCheckpoint S@@_OnPlayerEnterRaceCheckpoint
  1197. ALS_FORWARD<PlayerEnterRaceCheckpoint>
  1198.  
  1199. public OnPlayerLeaveRaceCheckpoint(playerid)
  1200. {
  1201.     new
  1202.         end   = YSI_g_sCallbackData[ALS_OnPlayerLeaveRaceCheckpoint][E_FUNC_HOOK_DATA_END],
  1203.         start = YSI_g_sCallbackData[ALS_OnPlayerLeaveRaceCheckpoint][E_FUNC_HOOK_DATA_START],
  1204.         pointer,
  1205.         idx,
  1206.         re = end;
  1207.     if (start == end) ALS_CALL<PlayerLeaveRaceCheckpoint>
  1208.     if (end > sizeof (YSI_g_sCallbackAddresses))
  1209.     {
  1210.         re = sizeof (YSI_g_sCallbackAddresses);
  1211.         if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  1212.     }
  1213.     // Do the initial fast elements.
  1214.     while (start != re)
  1215.     {
  1216.         pointer = YSI_g_sCallbackAddresses[start++];
  1217.         #emit PUSH.S playerid
  1218.         #emit PUSH.C     4
  1219.         #emit LCTRL      6
  1220.         #emit ADD.C      28
  1221.         #emit PUSH.pri
  1222.         #emit LOAD.S.pri pointer
  1223.         #emit SCTRL      6
  1224.     }
  1225.     // Get any remaining pointers the old way.
  1226.     while (start++ != end)
  1227.     {
  1228.         idx = AMX_GetPublicPointer(idx, pointer, "@yH_PlayerLeaveRaceCheckpoint");
  1229.         #emit PUSH.S playerid
  1230.         #emit PUSH.C     4
  1231.         #emit LCTRL      6
  1232.         #emit ADD.C      28
  1233.         #emit PUSH.pri
  1234.         #emit LOAD.S.pri pointer
  1235.         #emit SCTRL      6
  1236.     }
  1237.     // Do ALS just in case (YSI no longer uses this though now).
  1238.     ALS_CALL<PlayerLeaveRaceCheckpoint>
  1239. }
  1240. #if defined _ALS_OnPlayerLeaveRaceCP
  1241.     #undef OnPlayerLeaveRaceCheckpoint
  1242. #else
  1243.     #define _ALS_OnPlayerLeaveRaceCP
  1244. #endif
  1245. #define OnPlayerLeaveRaceCheckpoint S@@_OnPlayerLeaveRaceCheckpoint
  1246. ALS_FORWARD<PlayerLeaveRaceCheckpoint>
  1247.  
  1248. public OnRconCommand(cmd[])
  1249. {
  1250.     new
  1251.         end   = YSI_g_sCallbackData[ALS_OnRconCommand][E_FUNC_HOOK_DATA_END],
  1252.         start = YSI_g_sCallbackData[ALS_OnRconCommand][E_FUNC_HOOK_DATA_START],
  1253.         pointer,
  1254.         idx,
  1255.         re = end;
  1256.     if (start == end) ALS_CALL<RconCommand>
  1257.     if (end > sizeof (YSI_g_sCallbackAddresses))
  1258.     {
  1259.         re = sizeof (YSI_g_sCallbackAddresses);
  1260.         if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  1261.     }
  1262.     // Do the initial fast elements.
  1263.     while (start != re)
  1264.     {
  1265.         pointer = YSI_g_sCallbackAddresses[start++];
  1266.         #emit PUSH.S cmd
  1267.         #emit PUSH.C     4
  1268.         #emit LCTRL      6
  1269.         #emit ADD.C      28
  1270.         #emit PUSH.pri
  1271.         #emit LOAD.S.pri pointer
  1272.         #emit SCTRL      6
  1273.     }
  1274.     // Get any remaining pointers the old way.
  1275.     while (start++ != end)
  1276.     {
  1277.         idx = AMX_GetPublicPointer(idx, pointer, "@yH_RconCommand");
  1278.         #emit PUSH.S cmd
  1279.         #emit PUSH.C     4
  1280.         #emit LCTRL      6
  1281.         #emit ADD.C      28
  1282.         #emit PUSH.pri
  1283.         #emit LOAD.S.pri pointer
  1284.         #emit SCTRL      6
  1285.     }
  1286.     // Do ALS just in case (YSI no longer uses this though now).
  1287.     ALS_CALL<RconCommand>
  1288. }
  1289. #if defined _ALS_OnRconCommand
  1290.     #undef OnRconCommand
  1291. #else
  1292.     #define _ALS_OnRconCommand
  1293. #endif
  1294. #define OnRconCommand S@@_OnRconCommand
  1295. ALS_FORWARD<RconCommand>
  1296.  
  1297. public OnPlayerRequestSpawn(playerid)
  1298. {
  1299.     new
  1300.         end   = YSI_g_sCallbackData[ALS_OnPlayerRequestSpawn][E_FUNC_HOOK_DATA_END],
  1301.         start = YSI_g_sCallbackData[ALS_OnPlayerRequestSpawn][E_FUNC_HOOK_DATA_START],
  1302.         pointer,
  1303.         idx,
  1304.         re = end;
  1305.     if (start == end) ALS_CALL<PlayerRequestSpawn>
  1306.     if (end > sizeof (YSI_g_sCallbackAddresses))
  1307.     {
  1308.         re = sizeof (YSI_g_sCallbackAddresses);
  1309.         if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  1310.     }
  1311.     // Do the initial fast elements.
  1312.     while (start != re)
  1313.     {
  1314.         pointer = YSI_g_sCallbackAddresses[start++];
  1315.         #emit PUSH.S playerid
  1316.         #emit PUSH.C     4
  1317.         #emit LCTRL      6
  1318.         #emit ADD.C      28
  1319.         #emit PUSH.pri
  1320.         #emit LOAD.S.pri pointer
  1321.         #emit SCTRL      6
  1322.     }
  1323.     // Get any remaining pointers the old way.
  1324.     while (start++ != end)
  1325.     {
  1326.         idx = AMX_GetPublicPointer(idx, pointer, "@yH_PlayerRequestSpawn");
  1327.         #emit PUSH.S playerid
  1328.         #emit PUSH.C     4
  1329.         #emit LCTRL      6
  1330.         #emit ADD.C      28
  1331.         #emit PUSH.pri
  1332.         #emit LOAD.S.pri pointer
  1333.         #emit SCTRL      6
  1334.     }
  1335.     // Do ALS just in case (YSI no longer uses this though now).
  1336.     ALS_CALL<PlayerRequestSpawn>
  1337. }
  1338. #if defined _ALS_OnPlayerRequestSpawn
  1339.     #undef OnPlayerRequestSpawn
  1340. #else
  1341.     #define _ALS_OnPlayerRequestSpawn
  1342. #endif
  1343. #define OnPlayerRequestSpawn S@@_OnPlayerRequestSpawn
  1344. ALS_FORWARD<PlayerRequestSpawn>
  1345.  
  1346. public OnObjectMoved(objectid)
  1347. {
  1348.     new
  1349.         end   = YSI_g_sCallbackData[ALS_OnObjectMoved][E_FUNC_HOOK_DATA_END],
  1350.         start = YSI_g_sCallbackData[ALS_OnObjectMoved][E_FUNC_HOOK_DATA_START],
  1351.         pointer,
  1352.         idx,
  1353.         re = end;
  1354.     if (start == end) ALS_CALL<ObjectMoved>
  1355.     if (end > sizeof (YSI_g_sCallbackAddresses))
  1356.     {
  1357.         re = sizeof (YSI_g_sCallbackAddresses);
  1358.         if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  1359.     }
  1360.     // Do the initial fast elements.
  1361.     while (start != re)
  1362.     {
  1363.         pointer = YSI_g_sCallbackAddresses[start++];
  1364.         #emit PUSH.S objectid
  1365.         #emit PUSH.C     4
  1366.         #emit LCTRL      6
  1367.         #emit ADD.C      28
  1368.         #emit PUSH.pri
  1369.         #emit LOAD.S.pri pointer
  1370.         #emit SCTRL      6
  1371.     }
  1372.     // Get any remaining pointers the old way.
  1373.     while (start++ != end)
  1374.     {
  1375.         idx = AMX_GetPublicPointer(idx, pointer, "@yH_ObjectMoved");
  1376.         #emit PUSH.S objectid
  1377.         #emit PUSH.C     4
  1378.         #emit LCTRL      6
  1379.         #emit ADD.C      28
  1380.         #emit PUSH.pri
  1381.         #emit LOAD.S.pri pointer
  1382.         #emit SCTRL      6
  1383.     }
  1384.     // Do ALS just in case (YSI no longer uses this though now).
  1385.     ALS_CALL<ObjectMoved>
  1386. }
  1387. #if defined _ALS_OnObjectMoved
  1388.     #undef OnObjectMoved
  1389. #else
  1390.     #define _ALS_OnObjectMoved
  1391. #endif
  1392. #define OnObjectMoved S@@_OnObjectMoved
  1393. ALS_FORWARD<ObjectMoved>
  1394.  
  1395. public OnPlayerObjectMoved(playerid, objectid)
  1396. {
  1397.     new
  1398.         end   = YSI_g_sCallbackData[ALS_OnPlayerObjectMoved][E_FUNC_HOOK_DATA_END],
  1399.         start = YSI_g_sCallbackData[ALS_OnPlayerObjectMoved][E_FUNC_HOOK_DATA_START],
  1400.         pointer,
  1401.         idx,
  1402.         re = end;
  1403.     if (start == end) ALS_CALL<PlayerObjectMoved>
  1404.     if (end > sizeof (YSI_g_sCallbackAddresses))
  1405.     {
  1406.         re = sizeof (YSI_g_sCallbackAddresses);
  1407.         if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  1408.     }
  1409.     // Do the initial fast elements.
  1410.     while (start != re)
  1411.     {
  1412.         pointer = YSI_g_sCallbackAddresses[start++];
  1413.         #emit PUSH.S objectid
  1414.         #emit PUSH.S playerid
  1415.         #emit PUSH.C     8
  1416.         #emit LCTRL      6
  1417.         #emit ADD.C      28
  1418.         #emit PUSH.pri
  1419.         #emit LOAD.S.pri pointer
  1420.         #emit SCTRL      6
  1421.     }
  1422.     // Get any remaining pointers the old way.
  1423.     while (start++ != end)
  1424.     {
  1425.         idx = AMX_GetPublicPointer(idx, pointer, "@yH_PlayerObjectMoved");
  1426.         #emit PUSH.S objectid
  1427.         #emit PUSH.S playerid
  1428.         #emit PUSH.C     8
  1429.         #emit LCTRL      6
  1430.         #emit ADD.C      28
  1431.         #emit PUSH.pri
  1432.         #emit LOAD.S.pri pointer
  1433.         #emit SCTRL      6
  1434.     }
  1435.     // Do ALS just in case (YSI no longer uses this though now).
  1436.     ALS_CALL<PlayerObjectMoved>
  1437. }
  1438. #if defined _ALS_OnPlayerObjectMoved
  1439.     #undef OnPlayerObjectMoved
  1440. #else
  1441.     #define _ALS_OnPlayerObjectMoved
  1442. #endif
  1443. #define OnPlayerObjectMoved S@@_OnPlayerObjectMoved
  1444. ALS_FORWARD<PlayerObjectMoved>
  1445.  
  1446. public OnPlayerPickUpPickup(playerid, pickupid)
  1447. {
  1448.     new
  1449.         end   = YSI_g_sCallbackData[ALS_OnPlayerPickUpPickup][E_FUNC_HOOK_DATA_END],
  1450.         start = YSI_g_sCallbackData[ALS_OnPlayerPickUpPickup][E_FUNC_HOOK_DATA_START],
  1451.         pointer,
  1452.         idx,
  1453.         re = end;
  1454.     if (start == end) ALS_CALL<PlayerPickUpPickup>
  1455.     if (end > sizeof (YSI_g_sCallbackAddresses))
  1456.     {
  1457.         re = sizeof (YSI_g_sCallbackAddresses);
  1458.         if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  1459.     }
  1460.     // Do the initial fast elements.
  1461.     while (start != re)
  1462.     {
  1463.         pointer = YSI_g_sCallbackAddresses[start++];
  1464.         #emit PUSH.S pickupid
  1465.         #emit PUSH.S playerid
  1466.         #emit PUSH.C     8
  1467.         #emit LCTRL      6
  1468.         #emit ADD.C      28
  1469.         #emit PUSH.pri
  1470.         #emit LOAD.S.pri pointer
  1471.         #emit SCTRL      6
  1472.     }
  1473.     // Get any remaining pointers the old way.
  1474.     while (start++ != end)
  1475.     {
  1476.         idx = AMX_GetPublicPointer(idx, pointer, "@yH_PlayerPickUpPickup");
  1477.         #emit PUSH.S pickupid
  1478.         #emit PUSH.S playerid
  1479.         #emit PUSH.C     8
  1480.         #emit LCTRL      6
  1481.         #emit ADD.C      28
  1482.         #emit PUSH.pri
  1483.         #emit LOAD.S.pri pointer
  1484.         #emit SCTRL      6
  1485.     }
  1486.     // Do ALS just in case (YSI no longer uses this though now).
  1487.     ALS_CALL<PlayerPickUpPickup>
  1488. }
  1489. #if defined _ALS_OnPlayerPickUpPickup
  1490.     #undef OnPlayerPickUpPickup
  1491. #else
  1492.     #define _ALS_OnPlayerPickUpPickup
  1493. #endif
  1494. #define OnPlayerPickUpPickup S@@_OnPlayerPickUpPickup
  1495. ALS_FORWARD<PlayerPickUpPickup>
  1496.  
  1497. public OnVehicleMod(playerid, vehicleid, componentid)
  1498. {
  1499.     new
  1500.         end   = YSI_g_sCallbackData[ALS_OnVehicleMod][E_FUNC_HOOK_DATA_END],
  1501.         start = YSI_g_sCallbackData[ALS_OnVehicleMod][E_FUNC_HOOK_DATA_START],
  1502.         pointer,
  1503.         idx,
  1504.         re = end;
  1505.     if (start == end) ALS_CALL<VehicleMod>
  1506.     if (end > sizeof (YSI_g_sCallbackAddresses))
  1507.     {
  1508.         re = sizeof (YSI_g_sCallbackAddresses);
  1509.         if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  1510.     }
  1511.     // Do the initial fast elements.
  1512.     while (start != re)
  1513.     {
  1514.         pointer = YSI_g_sCallbackAddresses[start++];
  1515.         #emit PUSH.S componentid
  1516.         #emit PUSH.S vehicleid
  1517.         #emit PUSH.S playerid
  1518.         #emit PUSH.C     12
  1519.         #emit LCTRL      6
  1520.         #emit ADD.C      28
  1521.         #emit PUSH.pri
  1522.         #emit LOAD.S.pri pointer
  1523.         #emit SCTRL      6
  1524.     }
  1525.     // Get any remaining pointers the old way.
  1526.     while (start++ != end)
  1527.     {
  1528.         idx = AMX_GetPublicPointer(idx, pointer, "@yH_VehicleMod");
  1529.         #emit PUSH.S componentid
  1530.         #emit PUSH.S vehicleid
  1531.         #emit PUSH.S playerid
  1532.         #emit PUSH.C     12
  1533.         #emit LCTRL      6
  1534.         #emit ADD.C      28
  1535.         #emit PUSH.pri
  1536.         #emit LOAD.S.pri pointer
  1537.         #emit SCTRL      6
  1538.     }
  1539.     // Do ALS just in case (YSI no longer uses this though now).
  1540.     ALS_CALL<VehicleMod>
  1541. }
  1542. #if defined _ALS_OnVehicleMod
  1543.     #undef OnVehicleMod
  1544. #else
  1545.     #define _ALS_OnVehicleMod
  1546. #endif
  1547. #define OnVehicleMod S@@_OnVehicleMod
  1548. ALS_FORWARD<VehicleMod>
  1549.  
  1550. public OnEnterExitModShop(playerid, enterexit, interiorid)
  1551. {
  1552.     new
  1553.         end   = YSI_g_sCallbackData[ALS_OnEnterExitModShop][E_FUNC_HOOK_DATA_END],
  1554.         start = YSI_g_sCallbackData[ALS_OnEnterExitModShop][E_FUNC_HOOK_DATA_START],
  1555.         pointer,
  1556.         idx,
  1557.         re = end;
  1558.     if (start == end) ALS_CALL<EnterExitModShop>
  1559.     if (end > sizeof (YSI_g_sCallbackAddresses))
  1560.     {
  1561.         re = sizeof (YSI_g_sCallbackAddresses);
  1562.         if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  1563.     }
  1564.     // Do the initial fast elements.
  1565.     while (start != re)
  1566.     {
  1567.         pointer = YSI_g_sCallbackAddresses[start++];
  1568.         #emit PUSH.S interiorid
  1569.         #emit PUSH.S enterexit
  1570.         #emit PUSH.S playerid
  1571.         #emit PUSH.C     12
  1572.         #emit LCTRL      6
  1573.         #emit ADD.C      28
  1574.         #emit PUSH.pri
  1575.         #emit LOAD.S.pri pointer
  1576.         #emit SCTRL      6
  1577.     }
  1578.     // Get any remaining pointers the old way.
  1579.     while (start++ != end)
  1580.     {
  1581.         idx = AMX_GetPublicPointer(idx, pointer, "@yH_EnterExitModShop");
  1582.         #emit PUSH.S interiorid
  1583.         #emit PUSH.S enterexit
  1584.         #emit PUSH.S playerid
  1585.         #emit PUSH.C     12
  1586.         #emit LCTRL      6
  1587.         #emit ADD.C      28
  1588.         #emit PUSH.pri
  1589.         #emit LOAD.S.pri pointer
  1590.         #emit SCTRL      6
  1591.     }
  1592.     // Do ALS just in case (YSI no longer uses this though now).
  1593.     ALS_CALL<EnterExitModShop>
  1594. }
  1595. #if defined _ALS_OnEnterExitModShop
  1596.     #undef OnEnterExitModShop
  1597. #else
  1598.     #define _ALS_OnEnterExitModShop
  1599. #endif
  1600. #define OnEnterExitModShop S@@_OnEnterExitModShop
  1601. ALS_FORWARD<EnterExitModShop>
  1602.  
  1603. public OnVehiclePaintjob(playerid, vehicleid, paintjobid)
  1604. {
  1605.     new
  1606.         end   = YSI_g_sCallbackData[ALS_OnVehiclePaintjob][E_FUNC_HOOK_DATA_END],
  1607.         start = YSI_g_sCallbackData[ALS_OnVehiclePaintjob][E_FUNC_HOOK_DATA_START],
  1608.         pointer,
  1609.         idx,
  1610.         re = end;
  1611.     if (start == end) ALS_CALL<VehiclePaintjob>
  1612.     if (end > sizeof (YSI_g_sCallbackAddresses))
  1613.     {
  1614.         re = sizeof (YSI_g_sCallbackAddresses);
  1615.         if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  1616.     }
  1617.     // Do the initial fast elements.
  1618.     while (start != re)
  1619.     {
  1620.         pointer = YSI_g_sCallbackAddresses[start++];
  1621.         #emit PUSH.S paintjobid
  1622.         #emit PUSH.S vehicleid
  1623.         #emit PUSH.S playerid
  1624.         #emit PUSH.C     12
  1625.         #emit LCTRL      6
  1626.         #emit ADD.C      28
  1627.         #emit PUSH.pri
  1628.         #emit LOAD.S.pri pointer
  1629.         #emit SCTRL      6
  1630.     }
  1631.     // Get any remaining pointers the old way.
  1632.     while (start++ != end)
  1633.     {
  1634.         idx = AMX_GetPublicPointer(idx, pointer, "@yH_VehiclePaintjob");
  1635.         #emit PUSH.S paintjobid
  1636.         #emit PUSH.S vehicleid
  1637.         #emit PUSH.S playerid
  1638.         #emit PUSH.C     12
  1639.         #emit LCTRL      6
  1640.         #emit ADD.C      28
  1641.         #emit PUSH.pri
  1642.         #emit LOAD.S.pri pointer
  1643.         #emit SCTRL      6
  1644.     }
  1645.     // Do ALS just in case (YSI no longer uses this though now).
  1646.     ALS_CALL<VehiclePaintjob>
  1647. }
  1648. #if defined _ALS_OnVehiclePaintjob
  1649.     #undef OnVehiclePaintjob
  1650. #else
  1651.     #define _ALS_OnVehiclePaintjob
  1652. #endif
  1653. #define OnVehiclePaintjob S@@_OnVehiclePaintjob
  1654. ALS_FORWARD<VehiclePaintjob>
  1655.  
  1656. public OnVehicleRespray(playerid, vehicleid, color1, color2)
  1657. {
  1658.     new
  1659.         end   = YSI_g_sCallbackData[ALS_OnVehicleRespray][E_FUNC_HOOK_DATA_END],
  1660.         start = YSI_g_sCallbackData[ALS_OnVehicleRespray][E_FUNC_HOOK_DATA_START],
  1661.         pointer,
  1662.         idx,
  1663.         re = end;
  1664.     if (start == end) ALS_CALL<VehicleRespray>
  1665.     if (end > sizeof (YSI_g_sCallbackAddresses))
  1666.     {
  1667.         re = sizeof (YSI_g_sCallbackAddresses);
  1668.         if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  1669.     }
  1670.     // Do the initial fast elements.
  1671.     while (start != re)
  1672.     {
  1673.         pointer = YSI_g_sCallbackAddresses[start++];
  1674.         #emit PUSH.S color2
  1675.         #emit PUSH.S color1
  1676.         #emit PUSH.S vehicleid
  1677.         #emit PUSH.S playerid
  1678.         #emit PUSH.C     16
  1679.         #emit LCTRL      6
  1680.         #emit ADD.C      28
  1681.         #emit PUSH.pri
  1682.         #emit LOAD.S.pri pointer
  1683.         #emit SCTRL      6
  1684.     }
  1685.     // Get any remaining pointers the old way.
  1686.     while (start++ != end)
  1687.     {
  1688.         idx = AMX_GetPublicPointer(idx, pointer, "@yH_VehicleRespray");
  1689.         #emit PUSH.S color2
  1690.         #emit PUSH.S color1
  1691.         #emit PUSH.S vehicleid
  1692.         #emit PUSH.S playerid
  1693.         #emit PUSH.C     16
  1694.         #emit LCTRL      6
  1695.         #emit ADD.C      28
  1696.         #emit PUSH.pri
  1697.         #emit LOAD.S.pri pointer
  1698.         #emit SCTRL      6
  1699.     }
  1700.     // Do ALS just in case (YSI no longer uses this though now).
  1701.     ALS_CALL<VehicleRespray>
  1702. }
  1703. #if defined _ALS_OnVehicleRespray
  1704.     #undef OnVehicleRespray
  1705. #else
  1706.     #define _ALS_OnVehicleRespray
  1707. #endif
  1708. #define OnVehicleRespray S@@_OnVehicleRespray
  1709. ALS_FORWARD<VehicleRespray>
  1710.  
  1711. public OnVehicleDamageStatusUpdate(vehicleid, playerid)
  1712. {
  1713.     new
  1714.         end   = YSI_g_sCallbackData[ALS_OnVehicleDamageStatusUpdate][E_FUNC_HOOK_DATA_END],
  1715.         start = YSI_g_sCallbackData[ALS_OnVehicleDamageStatusUpdate][E_FUNC_HOOK_DATA_START],
  1716.         pointer,
  1717.         idx,
  1718.         re = end;
  1719.     if (start == end) ALS_CALL<VehicleDamageStatusUpdate>
  1720.     if (end > sizeof (YSI_g_sCallbackAddresses))
  1721.     {
  1722.         re = sizeof (YSI_g_sCallbackAddresses);
  1723.         if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  1724.     }
  1725.     // Do the initial fast elements.
  1726.     while (start != re)
  1727.     {
  1728.         pointer = YSI_g_sCallbackAddresses[start++];
  1729.         #emit PUSH.S playerid
  1730.         #emit PUSH.S vehicleid
  1731.         #emit PUSH.C     8
  1732.         #emit LCTRL      6
  1733.         #emit ADD.C      28
  1734.         #emit PUSH.pri
  1735.         #emit LOAD.S.pri pointer
  1736.         #emit SCTRL      6
  1737.     }
  1738.     // Get any remaining pointers the old way.
  1739.     while (start++ != end)
  1740.     {
  1741.         idx = AMX_GetPublicPointer(idx, pointer, "@yH_VehicleDamageStatusUpdate");
  1742.         #emit PUSH.S playerid
  1743.         #emit PUSH.S vehicleid
  1744.         #emit PUSH.C     8
  1745.         #emit LCTRL      6
  1746.         #emit ADD.C      28
  1747.         #emit PUSH.pri
  1748.         #emit LOAD.S.pri pointer
  1749.         #emit SCTRL      6
  1750.     }
  1751.     // Do ALS just in case (YSI no longer uses this though now).
  1752.     ALS_CALL<VehicleDamageStatusUpdate>
  1753. }
  1754. #if defined _ALS_OnVehicleDamageStatusUpd
  1755.     #undef OnVehicleDamageStatusUpdate
  1756. #else
  1757.     #define _ALS_OnVehicleDamageStatusUpd
  1758. #endif
  1759. #define OnVehicleDamageStatusUpdate S@@_OnVehicleDamageStatusUpdate
  1760. ALS_FORWARD<VehicleDamageStatusUpdate>
  1761.  
  1762. public OnPlayerSelectedMenuRow(playerid, row)
  1763. {
  1764.     new
  1765.         end   = YSI_g_sCallbackData[ALS_OnPlayerSelectedMenuRow][E_FUNC_HOOK_DATA_END],
  1766.         start = YSI_g_sCallbackData[ALS_OnPlayerSelectedMenuRow][E_FUNC_HOOK_DATA_START],
  1767.         pointer,
  1768.         idx,
  1769.         re = end;
  1770.     if (start == end) ALS_CALL<PlayerSelectedMenuRow>
  1771.     if (end > sizeof (YSI_g_sCallbackAddresses))
  1772.     {
  1773.         re = sizeof (YSI_g_sCallbackAddresses);
  1774.         if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  1775.     }
  1776.     // Do the initial fast elements.
  1777.     while (start != re)
  1778.     {
  1779.         pointer = YSI_g_sCallbackAddresses[start++];
  1780.         #emit PUSH.S row
  1781.         #emit PUSH.S playerid
  1782.         #emit PUSH.C     8
  1783.         #emit LCTRL      6
  1784.         #emit ADD.C      28
  1785.         #emit PUSH.pri
  1786.         #emit LOAD.S.pri pointer
  1787.         #emit SCTRL      6
  1788.     }
  1789.     // Get any remaining pointers the old way.
  1790.     while (start++ != end)
  1791.     {
  1792.         idx = AMX_GetPublicPointer(idx, pointer, "@yH_PlayerSelectedMenuRow");
  1793.         #emit PUSH.S row
  1794.         #emit PUSH.S playerid
  1795.         #emit PUSH.C     8
  1796.         #emit LCTRL      6
  1797.         #emit ADD.C      28
  1798.         #emit PUSH.pri
  1799.         #emit LOAD.S.pri pointer
  1800.         #emit SCTRL      6
  1801.     }
  1802.     // Do ALS just in case (YSI no longer uses this though now).
  1803.     ALS_CALL<PlayerSelectedMenuRow>
  1804. }
  1805. #if defined _ALS_OnPlayerSelectedMenuRow
  1806.     #undef OnPlayerSelectedMenuRow
  1807. #else
  1808.     #define _ALS_OnPlayerSelectedMenuRow
  1809. #endif
  1810. #define OnPlayerSelectedMenuRow S@@_OnPlayerSelectedMenuRow
  1811. ALS_FORWARD<PlayerSelectedMenuRow>
  1812.  
  1813. public OnPlayerExitedMenu(playerid)
  1814. {
  1815.     new
  1816.         end   = YSI_g_sCallbackData[ALS_OnPlayerExitedMenu][E_FUNC_HOOK_DATA_END],
  1817.         start = YSI_g_sCallbackData[ALS_OnPlayerExitedMenu][E_FUNC_HOOK_DATA_START],
  1818.         pointer,
  1819.         idx,
  1820.         re = end;
  1821.     if (start == end) ALS_CALL<PlayerExitedMenu>
  1822.     if (end > sizeof (YSI_g_sCallbackAddresses))
  1823.     {
  1824.         re = sizeof (YSI_g_sCallbackAddresses);
  1825.         if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  1826.     }
  1827.     // Do the initial fast elements.
  1828.     while (start != re)
  1829.     {
  1830.         pointer = YSI_g_sCallbackAddresses[start++];
  1831.         #emit PUSH.S playerid
  1832.         #emit PUSH.C     4
  1833.         #emit LCTRL      6
  1834.         #emit ADD.C      28
  1835.         #emit PUSH.pri
  1836.         #emit LOAD.S.pri pointer
  1837.         #emit SCTRL      6
  1838.     }
  1839.     // Get any remaining pointers the old way.
  1840.     while (start++ != end)
  1841.     {
  1842.         idx = AMX_GetPublicPointer(idx, pointer, "@yH_PlayerExitedMenu");
  1843.         #emit PUSH.S playerid
  1844.         #emit PUSH.C     4
  1845.         #emit LCTRL      6
  1846.         #emit ADD.C      28
  1847.         #emit PUSH.pri
  1848.         #emit LOAD.S.pri pointer
  1849.         #emit SCTRL      6
  1850.     }
  1851.     // Do ALS just in case (YSI no longer uses this though now).
  1852.     ALS_CALL<PlayerExitedMenu>
  1853. }
  1854. #if defined _ALS_OnPlayerExitedMenu
  1855.     #undef OnPlayerExitedMenu
  1856. #else
  1857.     #define _ALS_OnPlayerExitedMenu
  1858. #endif
  1859. #define OnPlayerExitedMenu S@@_OnPlayerExitedMenu
  1860. ALS_FORWARD<PlayerExitedMenu>
  1861.  
  1862. public OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid)
  1863. {
  1864.     new
  1865.         end   = YSI_g_sCallbackData[ALS_OnPlayerInteriorChange][E_FUNC_HOOK_DATA_END],
  1866.         start = YSI_g_sCallbackData[ALS_OnPlayerInteriorChange][E_FUNC_HOOK_DATA_START],
  1867.         pointer,
  1868.         idx,
  1869.         re = end;
  1870.     if (start == end) ALS_CALL<PlayerInteriorChange>
  1871.     if (end > sizeof (YSI_g_sCallbackAddresses))
  1872.     {
  1873.         re = sizeof (YSI_g_sCallbackAddresses);
  1874.         if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  1875.     }
  1876.     // Do the initial fast elements.
  1877.     while (start != re)
  1878.     {
  1879.         pointer = YSI_g_sCallbackAddresses[start++];
  1880.         #emit PUSH.S oldinteriorid
  1881.         #emit PUSH.S newinteriorid
  1882.         #emit PUSH.S playerid
  1883.         #emit PUSH.C     12
  1884.         #emit LCTRL      6
  1885.         #emit ADD.C      28
  1886.         #emit PUSH.pri
  1887.         #emit LOAD.S.pri pointer
  1888.         #emit SCTRL      6
  1889.     }
  1890.     // Get any remaining pointers the old way.
  1891.     while (start++ != end)
  1892.     {
  1893.         idx = AMX_GetPublicPointer(idx, pointer, "@yH_PlayerInteriorChange");
  1894.         #emit PUSH.S oldinteriorid
  1895.         #emit PUSH.S newinteriorid
  1896.         #emit PUSH.S playerid
  1897.         #emit PUSH.C     12
  1898.         #emit LCTRL      6
  1899.         #emit ADD.C      28
  1900.         #emit PUSH.pri
  1901.         #emit LOAD.S.pri pointer
  1902.         #emit SCTRL      6
  1903.     }
  1904.     // Do ALS just in case (YSI no longer uses this though now).
  1905.     ALS_CALL<PlayerInteriorChange>
  1906. }
  1907. #if defined _ALS_OnPlayerInteriorChange
  1908.     #undef OnPlayerInteriorChange
  1909. #else
  1910.     #define _ALS_OnPlayerInteriorChange
  1911. #endif
  1912. #define OnPlayerInteriorChange S@@_OnPlayerInteriorChange
  1913. ALS_FORWARD<PlayerInteriorChange>
  1914.  
  1915. public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
  1916. {
  1917.     new
  1918.         end   = YSI_g_sCallbackData[ALS_OnPlayerKeyStateChange][E_FUNC_HOOK_DATA_END],
  1919.         start = YSI_g_sCallbackData[ALS_OnPlayerKeyStateChange][E_FUNC_HOOK_DATA_START],
  1920.         pointer,
  1921.         idx,
  1922.         re = end;
  1923.     if (start == end) ALS_CALL<PlayerKeyStateChange>
  1924.     if (end > sizeof (YSI_g_sCallbackAddresses))
  1925.     {
  1926.         re = sizeof (YSI_g_sCallbackAddresses);
  1927.         if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  1928.     }
  1929.     // Do the initial fast elements.
  1930.     while (start != re)
  1931.     {
  1932.         pointer = YSI_g_sCallbackAddresses[start++];
  1933.         #emit PUSH.S oldkeys
  1934.         #emit PUSH.S newkeys
  1935.         #emit PUSH.S playerid
  1936.         #emit PUSH.C     12
  1937.         #emit LCTRL      6
  1938.         #emit ADD.C      28
  1939.         #emit PUSH.pri
  1940.         #emit LOAD.S.pri pointer
  1941.         #emit SCTRL      6
  1942.     }
  1943.     // Get any remaining pointers the old way.
  1944.     while (start++ != end)
  1945.     {
  1946.         idx = AMX_GetPublicPointer(idx, pointer, "@yH_PlayerKeyStateChange");
  1947.         #emit PUSH.S oldkeys
  1948.         #emit PUSH.S newkeys
  1949.         #emit PUSH.S playerid
  1950.         #emit PUSH.C     12
  1951.         #emit LCTRL      6
  1952.         #emit ADD.C      28
  1953.         #emit PUSH.pri
  1954.         #emit LOAD.S.pri pointer
  1955.         #emit SCTRL      6
  1956.     }
  1957.     // Do ALS just in case (YSI no longer uses this though now).
  1958.     ALS_CALL<PlayerKeyStateChange>
  1959. }
  1960. #if defined _ALS_OnPlayerKeyStateChange
  1961.     #undef OnPlayerKeyStateChange
  1962. #else
  1963.     #define _ALS_OnPlayerKeyStateChange
  1964. #endif
  1965. #define OnPlayerKeyStateChange S@@_OnPlayerKeyStateChange
  1966. ALS_FORWARD<PlayerKeyStateChange>
  1967.  
  1968. public OnRconLoginAttempt(ip[], password[], success)
  1969. {
  1970.     new
  1971.         end   = YSI_g_sCallbackData[ALS_OnRconLoginAttempt][E_FUNC_HOOK_DATA_END],
  1972.         start = YSI_g_sCallbackData[ALS_OnRconLoginAttempt][E_FUNC_HOOK_DATA_START],
  1973.         pointer,
  1974.         idx,
  1975.         re = end;
  1976.     if (start == end) ALS_CALL<RconLoginAttempt>
  1977.     if (end > sizeof (YSI_g_sCallbackAddresses))
  1978.     {
  1979.         re = sizeof (YSI_g_sCallbackAddresses);
  1980.         if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  1981.     }
  1982.     // Do the initial fast elements.
  1983.     while (start != re)
  1984.     {
  1985.         pointer = YSI_g_sCallbackAddresses[start++];
  1986.         #emit PUSH.S success
  1987.         #emit PUSH.S password
  1988.         #emit PUSH.S ip
  1989.         #emit PUSH.C     12
  1990.         #emit LCTRL      6
  1991.         #emit ADD.C      28
  1992.         #emit PUSH.pri
  1993.         #emit LOAD.S.pri pointer
  1994.         #emit SCTRL      6
  1995.     }
  1996.     // Get any remaining pointers the old way.
  1997.     while (start++ != end)
  1998.     {
  1999.         idx = AMX_GetPublicPointer(idx, pointer, "@yH_RconLoginAttempt");
  2000.         #emit PUSH.S success
  2001.         #emit PUSH.S password
  2002.         #emit PUSH.S ip
  2003.         #emit PUSH.C     12
  2004.         #emit LCTRL      6
  2005.         #emit ADD.C      28
  2006.         #emit PUSH.pri
  2007.         #emit LOAD.S.pri pointer
  2008.         #emit SCTRL      6
  2009.     }
  2010.     // Do ALS just in case (YSI no longer uses this though now).
  2011.     ALS_CALL<RconLoginAttempt>
  2012. }
  2013. #if defined _ALS_OnRconLoginAttempt
  2014.     #undef OnRconLoginAttempt
  2015. #else
  2016.     #define _ALS_OnRconLoginAttempt
  2017. #endif
  2018. #define OnRconLoginAttempt S@@_OnRconLoginAttempt
  2019. ALS_FORWARD<RconLoginAttempt>
  2020.  
  2021. public OnPlayerUpdate(playerid)
  2022. {
  2023.     new
  2024.         end   = YSI_g_sCallbackData[ALS_OnPlayerUpdate][E_FUNC_HOOK_DATA_END],
  2025.         start = YSI_g_sCallbackData[ALS_OnPlayerUpdate][E_FUNC_HOOK_DATA_START],
  2026.         pointer,
  2027.         idx,
  2028.         re = end;
  2029.     if (start == end) ALS_CALL<PlayerUpdate>
  2030.     if (end > sizeof (YSI_g_sCallbackAddresses))
  2031.     {
  2032.         re = sizeof (YSI_g_sCallbackAddresses);
  2033.         if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  2034.     }
  2035.     // Do the initial fast elements.
  2036.     while (start != re)
  2037.     {
  2038.         pointer = YSI_g_sCallbackAddresses[start++];
  2039.         #emit PUSH.S playerid
  2040.         #emit PUSH.C     4
  2041.         #emit LCTRL      6
  2042.         #emit ADD.C      28
  2043.         #emit PUSH.pri
  2044.         #emit LOAD.S.pri pointer
  2045.         #emit SCTRL      6
  2046.     }
  2047.     // Get any remaining pointers the old way.
  2048.     while (start++ != end)
  2049.     {
  2050.         idx = AMX_GetPublicPointer(idx, pointer, "@yH_PlayerUpdate");
  2051.         #emit PUSH.S playerid
  2052.         #emit PUSH.C     4
  2053.         #emit LCTRL      6
  2054.         #emit ADD.C      28
  2055.         #emit PUSH.pri
  2056.         #emit LOAD.S.pri pointer
  2057.         #emit SCTRL      6
  2058.     }
  2059.     // Do ALS just in case (YSI no longer uses this though now).
  2060.     ALS_CALL<PlayerUpdate>
  2061. }
  2062. #if defined _ALS_OnPlayerUpdate
  2063.     #undef OnPlayerUpdate
  2064. #else
  2065.     #define _ALS_OnPlayerUpdate
  2066. #endif
  2067. #define OnPlayerUpdate S@@_OnPlayerUpdate
  2068. ALS_FORWARD<PlayerUpdate>
  2069.  
  2070. public OnPlayerStreamIn(playerid, forplayerid)
  2071. {
  2072.     new
  2073.         end   = YSI_g_sCallbackData[ALS_OnPlayerStreamIn][E_FUNC_HOOK_DATA_END],
  2074.         start = YSI_g_sCallbackData[ALS_OnPlayerStreamIn][E_FUNC_HOOK_DATA_START],
  2075.         pointer,
  2076.         idx,
  2077.         re = end;
  2078.     if (start == end) ALS_CALL<PlayerStreamIn>
  2079.     if (end > sizeof (YSI_g_sCallbackAddresses))
  2080.     {
  2081.         re = sizeof (YSI_g_sCallbackAddresses);
  2082.         if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  2083.     }
  2084.     // Do the initial fast elements.
  2085.     while (start != re)
  2086.     {
  2087.         pointer = YSI_g_sCallbackAddresses[start++];
  2088.         #emit PUSH.S forplayerid
  2089.         #emit PUSH.S playerid
  2090.         #emit PUSH.C     8
  2091.         #emit LCTRL      6
  2092.         #emit ADD.C      28
  2093.         #emit PUSH.pri
  2094.         #emit LOAD.S.pri pointer
  2095.         #emit SCTRL      6
  2096.     }
  2097.     // Get any remaining pointers the old way.
  2098.     while (start++ != end)
  2099.     {
  2100.         idx = AMX_GetPublicPointer(idx, pointer, "@yH_PlayerStreamIn");
  2101.         #emit PUSH.S forplayerid
  2102.         #emit PUSH.S playerid
  2103.         #emit PUSH.C     8
  2104.         #emit LCTRL      6
  2105.         #emit ADD.C      28
  2106.         #emit PUSH.pri
  2107.         #emit LOAD.S.pri pointer
  2108.         #emit SCTRL      6
  2109.     }
  2110.     // Do ALS just in case (YSI no longer uses this though now).
  2111.     ALS_CALL<PlayerStreamIn>
  2112. }
  2113. #if defined _ALS_OnPlayerStreamIn
  2114.     #undef OnPlayerStreamIn
  2115. #else
  2116.     #define _ALS_OnPlayerStreamIn
  2117. #endif
  2118. #define OnPlayerStreamIn S@@_OnPlayerStreamIn
  2119. ALS_FORWARD<PlayerStreamIn>
  2120.  
  2121. public OnPlayerStreamOut(playerid, forplayerid)
  2122. {
  2123.     new
  2124.         end   = YSI_g_sCallbackData[ALS_OnPlayerStreamOut][E_FUNC_HOOK_DATA_END],
  2125.         start = YSI_g_sCallbackData[ALS_OnPlayerStreamOut][E_FUNC_HOOK_DATA_START],
  2126.         pointer,
  2127.         idx,
  2128.         re = end;
  2129.     if (start == end) ALS_CALL<PlayerStreamOut>
  2130.     if (end > sizeof (YSI_g_sCallbackAddresses))
  2131.     {
  2132.         re = sizeof (YSI_g_sCallbackAddresses);
  2133.         if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  2134.     }
  2135.     // Do the initial fast elements.
  2136.     while (start != re)
  2137.     {
  2138.         pointer = YSI_g_sCallbackAddresses[start++];
  2139.         #emit PUSH.S forplayerid
  2140.         #emit PUSH.S playerid
  2141.         #emit PUSH.C     8
  2142.         #emit LCTRL      6
  2143.         #emit ADD.C      28
  2144.         #emit PUSH.pri
  2145.         #emit LOAD.S.pri pointer
  2146.         #emit SCTRL      6
  2147.     }
  2148.     // Get any remaining pointers the old way.
  2149.     while (start++ != end)
  2150.     {
  2151.         idx = AMX_GetPublicPointer(idx, pointer, "@yH_PlayerStreamOut");
  2152.         #emit PUSH.S forplayerid
  2153.         #emit PUSH.S playerid
  2154.         #emit PUSH.C     8
  2155.         #emit LCTRL      6
  2156.         #emit ADD.C      28
  2157.         #emit PUSH.pri
  2158.         #emit LOAD.S.pri pointer
  2159.         #emit SCTRL      6
  2160.     }
  2161.     // Do ALS just in case (YSI no longer uses this though now).
  2162.     ALS_CALL<PlayerStreamOut>
  2163. }
  2164. #if defined _ALS_OnPlayerStreamOut
  2165.     #undef OnPlayerStreamOut
  2166. #else
  2167.     #define _ALS_OnPlayerStreamOut
  2168. #endif
  2169. #define OnPlayerStreamOut S@@_OnPlayerStreamOut
  2170. ALS_FORWARD<PlayerStreamOut>
  2171.  
  2172. public OnVehicleStreamIn(vehicleid, forplayerid)
  2173. {
  2174.     new
  2175.         end   = YSI_g_sCallbackData[ALS_OnVehicleStreamIn][E_FUNC_HOOK_DATA_END],
  2176.         start = YSI_g_sCallbackData[ALS_OnVehicleStreamIn][E_FUNC_HOOK_DATA_START],
  2177.         pointer,
  2178.         idx,
  2179.         re = end;
  2180.     if (start == end) ALS_CALL<VehicleStreamIn>
  2181.     if (end > sizeof (YSI_g_sCallbackAddresses))
  2182.     {
  2183.         re = sizeof (YSI_g_sCallbackAddresses);
  2184.         if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  2185.     }
  2186.     // Do the initial fast elements.
  2187.     while (start != re)
  2188.     {
  2189.         pointer = YSI_g_sCallbackAddresses[start++];
  2190.         #emit PUSH.S forplayerid
  2191.         #emit PUSH.S vehicleid
  2192.         #emit PUSH.C     8
  2193.         #emit LCTRL      6
  2194.         #emit ADD.C      28
  2195.         #emit PUSH.pri
  2196.         #emit LOAD.S.pri pointer
  2197.         #emit SCTRL      6
  2198.     }
  2199.     // Get any remaining pointers the old way.
  2200.     while (start++ != end)
  2201.     {
  2202.         idx = AMX_GetPublicPointer(idx, pointer, "@yH_VehicleStreamIn");
  2203.         #emit PUSH.S forplayerid
  2204.         #emit PUSH.S vehicleid
  2205.         #emit PUSH.C     8
  2206.         #emit LCTRL      6
  2207.         #emit ADD.C      28
  2208.         #emit PUSH.pri
  2209.         #emit LOAD.S.pri pointer
  2210.         #emit SCTRL      6
  2211.     }
  2212.     // Do ALS just in case (YSI no longer uses this though now).
  2213.     ALS_CALL<VehicleStreamIn>
  2214. }
  2215. #if defined _ALS_OnVehicleStreamIn
  2216.     #undef OnVehicleStreamIn
  2217. #else
  2218.     #define _ALS_OnVehicleStreamIn
  2219. #endif
  2220. #define OnVehicleStreamIn S@@_OnVehicleStreamIn
  2221. ALS_FORWARD<VehicleStreamIn>
  2222.  
  2223. public OnVehicleStreamOut(vehicleid, forplayerid)
  2224. {
  2225.     new
  2226.         end   = YSI_g_sCallbackData[ALS_OnVehicleStreamOut][E_FUNC_HOOK_DATA_END],
  2227.         start = YSI_g_sCallbackData[ALS_OnVehicleStreamOut][E_FUNC_HOOK_DATA_START],
  2228.         pointer,
  2229.         idx,
  2230.         re = end;
  2231.     if (start == end) ALS_CALL<VehicleStreamOut>
  2232.     if (end > sizeof (YSI_g_sCallbackAddresses))
  2233.     {
  2234.         re = sizeof (YSI_g_sCallbackAddresses);
  2235.         if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  2236.     }
  2237.     // Do the initial fast elements.
  2238.     while (start != re)
  2239.     {
  2240.         pointer = YSI_g_sCallbackAddresses[start++];
  2241.         #emit PUSH.S forplayerid
  2242.         #emit PUSH.S vehicleid
  2243.         #emit PUSH.C     8
  2244.         #emit LCTRL      6
  2245.         #emit ADD.C      28
  2246.         #emit PUSH.pri
  2247.         #emit LOAD.S.pri pointer
  2248.         #emit SCTRL      6
  2249.     }
  2250.     // Get any remaining pointers the old way.
  2251.     while (start++ != end)
  2252.     {
  2253.         idx = AMX_GetPublicPointer(idx, pointer, "@yH_VehicleStreamOut");
  2254.         #emit PUSH.S forplayerid
  2255.         #emit PUSH.S vehicleid
  2256.         #emit PUSH.C     8
  2257.         #emit LCTRL      6
  2258.         #emit ADD.C      28
  2259.         #emit PUSH.pri
  2260.         #emit LOAD.S.pri pointer
  2261.         #emit SCTRL      6
  2262.     }
  2263.     // Do ALS just in case (YSI no longer uses this though now).
  2264.     ALS_CALL<VehicleStreamOut>
  2265. }
  2266. #if defined _ALS_OnVehicleStreamOut
  2267.     #undef OnVehicleStreamOut
  2268. #else
  2269.     #define _ALS_OnVehicleStreamOut
  2270. #endif
  2271. #define OnVehicleStreamOut S@@_OnVehicleStreamOut
  2272. ALS_FORWARD<VehicleStreamOut>
  2273.  
  2274. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  2275. {
  2276.     new
  2277.         end   = YSI_g_sCallbackData[ALS_OnDialogResponse][E_FUNC_HOOK_DATA_END],
  2278.         start = YSI_g_sCallbackData[ALS_OnDialogResponse][E_FUNC_HOOK_DATA_START],
  2279.         pointer,
  2280.         idx,
  2281.         re = end;
  2282.     if (start == end) ALS_CALL<DialogResponse>
  2283.     if (end > sizeof (YSI_g_sCallbackAddresses))
  2284.     {
  2285.         re = sizeof (YSI_g_sCallbackAddresses);
  2286.         if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  2287.     }
  2288.     // Do the initial fast elements.
  2289.     while (start != re)
  2290.     {
  2291.         pointer = YSI_g_sCallbackAddresses[start++];
  2292.         #emit PUSH.S inputtext
  2293.         #emit PUSH.S listitem
  2294.         #emit PUSH.S response
  2295.         #emit PUSH.S dialogid
  2296.         #emit PUSH.S playerid
  2297.         #emit PUSH.C     20
  2298.         #emit LCTRL      6
  2299.         #emit ADD.C      28
  2300.         #emit PUSH.pri
  2301.         #emit LOAD.S.pri pointer
  2302.         #emit SCTRL      6
  2303.     }
  2304.     // Get any remaining pointers the old way.
  2305.     while (start++ != end)
  2306.     {
  2307.         idx = AMX_GetPublicPointer(idx, pointer, "@yH_DialogResponse");
  2308.         #emit PUSH.S inputtext
  2309.         #emit PUSH.S listitem
  2310.         #emit PUSH.S response
  2311.         #emit PUSH.S dialogid
  2312.         #emit PUSH.S playerid
  2313.         #emit PUSH.C     20
  2314.         #emit LCTRL      6
  2315.         #emit ADD.C      28
  2316.         #emit PUSH.pri
  2317.         #emit LOAD.S.pri pointer
  2318.         #emit SCTRL      6
  2319.     }
  2320.     // Do ALS just in case (YSI no longer uses this though now).
  2321.     ALS_CALL<DialogResponse>
  2322. }
  2323. #if defined _ALS_OnDialogResponse
  2324.     #undef OnDialogResponse
  2325. #else
  2326.     #define _ALS_OnDialogResponse
  2327. #endif
  2328. #define OnDialogResponse S@@_OnDialogResponse
  2329. ALS_FORWARD<DialogResponse>
  2330.  
  2331. public OnPlayerClickPlayer(playerid, clickedplayerid, source)
  2332. {
  2333.     new
  2334.         end   = YSI_g_sCallbackData[ALS_OnPlayerClickPlayer][E_FUNC_HOOK_DATA_END],
  2335.         start = YSI_g_sCallbackData[ALS_OnPlayerClickPlayer][E_FUNC_HOOK_DATA_START],
  2336.         pointer,
  2337.         idx,
  2338.         re = end;
  2339.     if (start == end) ALS_CALL<PlayerClickPlayer>
  2340.     if (end > sizeof (YSI_g_sCallbackAddresses))
  2341.     {
  2342.         re = sizeof (YSI_g_sCallbackAddresses);
  2343.         if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  2344.     }
  2345.     // Do the initial fast elements.
  2346.     while (start != re)
  2347.     {
  2348.         pointer = YSI_g_sCallbackAddresses[start++];
  2349.         #emit PUSH.S source
  2350.         #emit PUSH.S clickedplayerid
  2351.         #emit PUSH.S playerid
  2352.         #emit PUSH.C     12
  2353.         #emit LCTRL      6
  2354.         #emit ADD.C      28
  2355.         #emit PUSH.pri
  2356.         #emit LOAD.S.pri pointer
  2357.         #emit SCTRL      6
  2358.     }
  2359.     // Get any remaining pointers the old way.
  2360.     while (start++ != end)
  2361.     {
  2362.         idx = AMX_GetPublicPointer(idx, pointer, "@yH_PlayerClickPlayer");
  2363.         #emit PUSH.S source
  2364.         #emit PUSH.S clickedplayerid
  2365.         #emit PUSH.S playerid
  2366.         #emit PUSH.C     12
  2367.         #emit LCTRL      6
  2368.         #emit ADD.C      28
  2369.         #emit PUSH.pri
  2370.         #emit LOAD.S.pri pointer
  2371.         #emit SCTRL      6
  2372.     }
  2373.     // Do ALS just in case (YSI no longer uses this though now).
  2374.     ALS_CALL<PlayerClickPlayer>
  2375. }
  2376. #if defined _ALS_OnPlayerClickPlayer
  2377.     #undef OnPlayerClickPlayer
  2378. #else
  2379.     #define _ALS_OnPlayerClickPlayer
  2380. #endif
  2381. #define OnPlayerClickPlayer S@@_OnPlayerClickPlayer
  2382. ALS_FORWARD<PlayerClickPlayer>
  2383.  
  2384. /*public OnPlayerLogin(playerid, uid)
  2385. {
  2386.     new
  2387.         end   = YSI_g_sCallbackData[ALS_OnPlayerLogin][E_FUNC_HOOK_DATA_END],
  2388.         start = YSI_g_sCallbackData[ALS_OnPlayerLogin][E_FUNC_HOOK_DATA_START],
  2389.         pointer,
  2390.         idx,
  2391.         re = end;
  2392.     if (start == end) ALS_CALL<PlayerLogin>
  2393.     if (end > sizeof (YSI_g_sCallbackAddresses))
  2394.     {
  2395.         re = sizeof (YSI_g_sCallbackAddresses);
  2396.         if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  2397.     }
  2398.     // Do the initial fast elements.
  2399.     while (start != re)
  2400.     {
  2401.         pointer = YSI_g_sCallbackAddresses[start++];
  2402.         #emit PUSH.S uid
  2403.         #emit PUSH.S playerid
  2404.         #emit PUSH.C     8
  2405.         #emit LCTRL      6
  2406.         #emit ADD.C      28
  2407.         #emit PUSH.pri
  2408.         #emit LOAD.S.pri pointer
  2409.         #emit SCTRL      6
  2410.     }
  2411.     // Get any remaining pointers the old way.
  2412.     while (start++ != end)
  2413.     {
  2414.         idx = AMX_GetPublicPointer(idx, pointer, "@yH_PlayerLogin");
  2415.         #emit PUSH.S uid
  2416.         #emit PUSH.S playerid
  2417.         #emit PUSH.C     8
  2418.         #emit LCTRL      6
  2419.         #emit ADD.C      28
  2420.         #emit PUSH.pri
  2421.         #emit LOAD.S.pri pointer
  2422.         #emit SCTRL      6
  2423.     }
  2424.     // Do ALS just in case (YSI no longer uses this though now).
  2425.     ALS_CALL<PlayerLogin>
  2426. }
  2427. #if defined _ALS_OnPlayerLogin
  2428.     #undef OnPlayerLogin
  2429. #else
  2430.     #define _ALS_OnPlayerLogin
  2431. #endif
  2432. #define OnPlayerLogin S@@_OnPlayerLogin
  2433. ALS_FORWARD<PlayerLogin>
  2434.  
  2435. public OnPlayerLogout(playerid, uid)
  2436. {
  2437.     new
  2438.         end   = YSI_g_sCallbackData[ALS_OnPlayerLogout][E_FUNC_HOOK_DATA_END],
  2439.         start = YSI_g_sCallbackData[ALS_OnPlayerLogout][E_FUNC_HOOK_DATA_START],
  2440.         pointer,
  2441.         idx,
  2442.         re = end;
  2443.     if (start == end) ALS_CALL<PlayerLogout>
  2444.     if (end > sizeof (YSI_g_sCallbackAddresses))
  2445.     {
  2446.         re = sizeof (YSI_g_sCallbackAddresses);
  2447.         if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  2448.     }
  2449.     // Do the initial fast elements.
  2450.     while (start != re)
  2451.     {
  2452.         pointer = YSI_g_sCallbackAddresses[start++];
  2453.         #emit PUSH.S uid
  2454.         #emit PUSH.S playerid
  2455.         #emit PUSH.C     8
  2456.         #emit LCTRL      6
  2457.         #emit ADD.C      28
  2458.         #emit PUSH.pri
  2459.         #emit LOAD.S.pri pointer
  2460.         #emit SCTRL      6
  2461.     }
  2462.     // Get any remaining pointers the old way.
  2463.     while (start++ != end)
  2464.     {
  2465.         idx = AMX_GetPublicPointer(idx, pointer, "@yH_PlayerLogout");
  2466.         #emit PUSH.S uid
  2467.         #emit PUSH.S playerid
  2468.         #emit PUSH.C     8
  2469.         #emit LCTRL      6
  2470.         #emit ADD.C      28
  2471.         #emit PUSH.pri
  2472.         #emit LOAD.S.pri pointer
  2473.         #emit SCTRL      6
  2474.     }
  2475.     // Do ALS just in case (YSI no longer uses this though now).
  2476.     ALS_CALL<PlayerLogout>
  2477. }
  2478. #if defined _ALS_OnPlayerLogout
  2479.     #undef OnPlayerLogout
  2480. #else
  2481.     #define _ALS_OnPlayerLogout
  2482. #endif
  2483. #define OnPlayerLogout S@@_OnPlayerlogout
  2484. ALS_FORWARD<PlayerLogout>*/
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement