Advertisement
Guest User

Untitled

a guest
Apr 27th, 2012
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 111.63 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 callback hooks 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. 2.0
  52. Changelog:
  53. 14/04/12:
  54. Added crash fix from Slice, now returning correct values.
  55. Fixed ALS detection of mode callbacks.
  56. 25/02/12:
  57. Extracted most of the code to a separate file.
  58. 17/03/11:
  59. Second complete re-write using another new technique. Now VERY fast!
  60. Updated OnPlayerUpdate code using Google63's SCTRL jump code.
  61. 06/08/10:
  62. First version
  63. \*----------------------------------------------------------------------------*/
  64.  
  65. #include "y_version"
  66. #include <a_samp>
  67. #include "..\y_debug"
  68.  
  69. #include "..\y_amx"
  70.  
  71. #define ALS_PREFIX S@@
  72.  
  73. #if !defined YSI_FILTERSCRIPT
  74. new
  75. bool:YSI_FILTERSCRIPT = false;
  76. #endif
  77.  
  78. #define hook%0On%1(%2) UNIQUE_FUNCTION<@yH_%1...>(%2);UNIQUE_FUNCTION<@yH_%1...>(%2)
  79. //#define master_hook%0On%1(%2) UNIQUE_FUNCTION<@yH_%1...>(%2);UNIQUE_FUNCTION<@yH_%1...>(%2)<>{return ALS_R_%1;}UNIQUE_FUNCTION<@yH_%1...>(%2)<_YCM:y>
  80. #define rehook%0On%1(%2) UNIQUE_FUNCTION<@yH_%1...>(%2)
  81.  
  82. #define Hook:%0On%1(%2) UNIQUE_FUNCTION<@yH_%1...%0>(%2);UNIQUE_FUNCTION<@yH_%1...%0>(%2)
  83.  
  84. #include "..\y_als"
  85.  
  86. /*#if !defined OnPlayerLogin
  87. #endif
  88.  
  89. #if !defined OnPlayerLogout
  90. #endif*/
  91.  
  92. //forward Hooks_OnPlayerLogin(playerid, yid);
  93.  
  94. //forward Hooks_OnPlayerLogout(playerid, yid);
  95.  
  96. //hook OnPlayerConnect
  97.  
  98. #if !defined HOOKS_MAX_UPDATES
  99. // Slight increase from the previous version.
  100. #define HOOKS_MAX_UPDATES (8)
  101. #endif
  102.  
  103. // One of the few places where this is still used.
  104. ALS_DATA<>
  105.  
  106. // These defines now use the much more generic ALS code so that the list of
  107. // callbacks is only done in one place.
  108. #define HOOK_R_INT<%0,%2>(%3) return Bit_GetBit(Bit:gs_ALS,_:ALS_On%0)?P@(#ALS_PREFIX"_On"#%0,#%2#q,ALS_RS_%3):ret;
  109. #define HOOK_RETURN<%0> ALS_DO:HOOK_R_INT<%0>
  110.  
  111. #define HOOK_C_INT<%0,%2>(%3) if(Bit_GetBit(Bit:gs_ALS,_:ALS_On%0))return P@(#ALS_PREFIX"_On"#%0,#%2#q,ALS_RS_%3);hooks_do_hooks_call_no_als:return ret;
  112. #define HOOK_CALL<%0> ALS_DO:HOOK_C_INT<%0>
  113.  
  114.  
  115. enum E_FUNC_HOOK_DATA
  116. {
  117. E_FUNC_HOOK_DATA_START,
  118. E_FUNC_HOOK_DATA_END
  119. }
  120.  
  121. static stock
  122. YSI_g_sCallbackAddresses[HOOKS_MAX_UPDATES * _:ALS],
  123. YSI_g_sCallbackData[ALS][E_FUNC_HOOK_DATA],
  124. YSI_g_sLastFoundIndex;
  125.  
  126. static Hooks_Blank_Return1N()
  127. {
  128. // Bug fix from Slice.
  129. return -1;
  130. }
  131.  
  132. static Hooks_Blank_Return0()
  133. {
  134. return 0;
  135. }
  136.  
  137. static Hooks_Blank_Return1()
  138. {
  139. return 1;
  140. }
  141.  
  142. Hooks_RedirectPublic(from[], to[], final = 1)
  143. {
  144. P:4("Hooks_RedirectPublic called: \"%s\", \"%s\"", from, to);
  145. new
  146. addr;
  147. if (AMX_GetPublicEntry(0, addr, from))
  148. {
  149. new
  150. pointer,
  151. ret = AMX_Read(addr);
  152. if (AMX_GetPublicPointer(0, pointer, to))
  153. {
  154. AMX_Write(addr, pointer);
  155. }
  156. else
  157. {
  158. // Can't find the next element, just remove this callback entirely.
  159. // Note that in some cases the previous ALS include will have
  160. // already (due to the constant chaining order) determined that
  161. // there IS a next callback for this type (because there is) and set
  162. // some internal variable stating this fact. When it comes to call
  163. // it, however, the callback will no longer exist (unless PAWN
  164. // buffers callbacks in an efficient structure, which is possible).
  165. // UPDATE: Clearly not.
  166. //AMX_Write(addr, -1);
  167. switch (final)
  168. {
  169. case 0:
  170. {
  171. #emit CONST.pri Hooks_Blank_Return0
  172. #emit STOR.S.pri pointer
  173. }
  174. case -1:
  175. {
  176. #emit CONST.pri Hooks_Blank_Return1N
  177. #emit STOR.S.pri pointer
  178. }
  179. default:
  180. {
  181. #emit CONST.pri Hooks_Blank_Return1
  182. #emit STOR.S.pri pointer
  183. }
  184. }
  185. AMX_Write(addr, pointer);
  186. }
  187. return ret;
  188. }
  189. return 0;
  190. }
  191.  
  192. static Hooks_AddOne(idx, &toaddidx, struc[E_FUNC_HOOK_DATA])
  193. {
  194. // This is a combination between the count and the end point.
  195. ++struc[E_FUNC_HOOK_DATA_END];
  196. if (toaddidx == sizeof (YSI_g_sCallbackAddresses))
  197. {
  198. if (struc[E_FUNC_HOOK_DATA_START] != sizeof (YSI_g_sCallbackAddresses))
  199. {
  200. YSI_g_sLastFoundIndex = idx;
  201. }
  202. }
  203. else
  204. {
  205. new
  206. addr = (idx - 1) * 8 + AMX_HEADER_PUBLICS;
  207. #emit LREF.S.pri addr
  208. #emit STOR.S.pri addr
  209. YSI_g_sCallbackAddresses[toaddidx++] = addr;
  210. }
  211. }
  212.  
  213. static Hooks_FindAll(name[], &toaddidx, struc[E_FUNC_HOOK_DATA]) //, &count)
  214. {
  215. P:4("Hooks_FindAll called: %s %d", name, toaddidx);
  216. new
  217. buffer[32],
  218. len = strlen(name);
  219. struc[E_FUNC_HOOK_DATA_START] = toaddidx;
  220. struc[E_FUNC_HOOK_DATA_END] = toaddidx;
  221. for (new idx; (idx = AMX_GetPublicNamePrefix(idx, buffer, _A<@yH_>)); )
  222. {
  223. if (!strcmp(name, buffer[1], false, len))
  224. {
  225. Hooks_AddOne(idx, toaddidx, struc);
  226. }
  227. }
  228. if (struc[E_FUNC_HOOK_DATA_START] < sizeof (YSI_g_sCallbackAddresses) && struc[E_FUNC_HOOK_DATA_END] >= sizeof (YSI_g_sCallbackAddresses))
  229. {
  230. P:W("y_hooks buffer exhausted, resorting to slow method.");
  231. }
  232. // Don't store the end, if the count goes off the end of the addresses array
  233. // then we need to just start reading from the AMX directly.
  234. P:4("Hooks_FindAll end: %s %d %d", name, toaddidx, struc[E_FUNC_HOOK_DATA_END] - struc[E_FUNC_HOOK_DATA_START]);
  235. //count = struc[E_FUNC_HOOK_DATA_END] - struc[E_FUNC_HOOK_DATA_START];
  236. return struc[E_FUNC_HOOK_DATA_END] - struc[E_FUNC_HOOK_DATA_START];
  237. }
  238.  
  239. #define HOOKS_DO_ONE_CALLBACK<%0> ALS_DETECT<%0>if(!Hooks_FindAll(#%0,cidx,YSI_g_sCallbackData[ALS_On%0]))Hooks_RedirectPublic(#On%0,#S@@_On%0,ALS_R_%0);
  240. #define HOOKS_DO_ONE_SPECIAL<%0> if(Hooks_FindAll(#%0,cidx,YSI_g_sCallbackData[ALS_On%0]))state y_hooks_%0 : y_hooks_%0_some;else state y_hooks_%0 : y_hooks_%0_none;
  241.  
  242. static Hooks_OnScriptInit()
  243. {
  244. P:2("Hooks_OnScriptInit called");
  245. new
  246. cidx;
  247. //HOOKS_DO_ONE_CALLBACK<AnyScriptInit>
  248. //HOOKS_DO_ONE_CALLBACK<AnyScriptExit>
  249. //HOOKS_DO_ONE_CALLBACK<ScriptInit>
  250. //HOOKS_DO_ONE_CALLBACK<ScriptExit>
  251. //HOOKS_DO_ONE_CALLBACK<GameModeInit>
  252. //HOOKS_DO_ONE_CALLBACK<GameModeExit>
  253. //HOOKS_DO_ONE_CALLBACK<FilterScriptInit>
  254. //HOOKS_DO_ONE_CALLBACK<FilterScriptExit>
  255. ALS_DETECT<ScriptInit>
  256. ALS_DETECT<ScriptExit>
  257. ALS_DETECT<GameModeInit>
  258. ALS_DETECT<GameModeExit>
  259. ALS_DETECT<FilterScriptInit>
  260. ALS_DETECT<FilterScriptExit>
  261. Hooks_FindAll(#ScriptInit, cidx, YSI_g_sCallbackData[ALS_OnScriptInit]);
  262. if (YSI_FILTERSCRIPT)
  263. {
  264. if (!(Hooks_FindAll(#FilterScriptExit, cidx, YSI_g_sCallbackData[ALS_OnFilterScriptExit]) + Hooks_FindAll(#ScriptExit, cidx, YSI_g_sCallbackData[ALS_OnScriptExit])))
  265. {
  266. Hooks_RedirectPublic(#OnFilterScriptExit, #S@@_OnFilterScriptExit);
  267. }
  268. //HOOKS_DO_ONE_CALLBACK<FilterScriptInit>
  269. Hooks_FindAll(#FilterScriptInit, cidx, YSI_g_sCallbackData[ALS_OnFilterScriptInit]);
  270. HOOKS_DO_ONE_CALLBACK<GameModeInit>
  271. HOOKS_DO_ONE_CALLBACK<GameModeExit>
  272. //Hooks_FindAll(#FilterScriptExit, cidx, YSI_g_sCallbackData[ALS_OnFilterScriptExit], count);
  273. }
  274. else
  275. {
  276. if (!(Hooks_FindAll(#GameModeExit, cidx, YSI_g_sCallbackData[ALS_OnGameModeExit]) + Hooks_FindAll(#ScriptExit, cidx, YSI_g_sCallbackData[ALS_OnScriptExit])))
  277. {
  278. Hooks_RedirectPublic(#OnGameModeExit, #S@@_OnGameModeExit);
  279. }
  280. Hooks_FindAll(#GameModeInit, cidx, YSI_g_sCallbackData[ALS_OnGameModeInit]);
  281. //Hooks_RedirectPublic(#OnGameModeInit, #S@@_OnGameModeInit);
  282. Hooks_RedirectPublic(#OnFilterScriptInit, #S@@_OnFilterScriptInit);
  283. Hooks_RedirectPublic(#OnFilterScriptExit, #S@@_OnFilterScriptExit);
  284. }
  285. HOOKS_DO_ONE_CALLBACK<PlayerConnect>
  286. HOOKS_DO_ONE_CALLBACK<PlayerDisconnect>
  287. HOOKS_DO_ONE_CALLBACK<PlayerSpawn>
  288. HOOKS_DO_ONE_CALLBACK<PlayerDeath>
  289. HOOKS_DO_ONE_CALLBACK<VehicleSpawn>
  290. HOOKS_DO_ONE_CALLBACK<VehicleDeath>
  291. HOOKS_DO_ONE_CALLBACK<PlayerText>
  292. HOOKS_DO_ONE_CALLBACK<PlayerCommandText>
  293. HOOKS_DO_ONE_CALLBACK<PlayerRequestClass>
  294. HOOKS_DO_ONE_CALLBACK<PlayerEnterVehicle>
  295. HOOKS_DO_ONE_CALLBACK<PlayerExitVehicle>
  296. HOOKS_DO_ONE_CALLBACK<PlayerStateChange>
  297. HOOKS_DO_ONE_CALLBACK<PlayerEnterCheckpoint>
  298. HOOKS_DO_ONE_CALLBACK<PlayerLeaveCheckpoint>
  299. HOOKS_DO_ONE_CALLBACK<PlayerEnterRaceCheckpoint>
  300. HOOKS_DO_ONE_CALLBACK<PlayerLeaveRaceCheckpoint>
  301. HOOKS_DO_ONE_CALLBACK<RconCommand>
  302. HOOKS_DO_ONE_CALLBACK<PlayerRequestSpawn>
  303. HOOKS_DO_ONE_CALLBACK<ObjectMoved>
  304. HOOKS_DO_ONE_CALLBACK<PlayerObjectMoved>
  305. HOOKS_DO_ONE_CALLBACK<PlayerPickUpPickup>
  306. HOOKS_DO_ONE_CALLBACK<VehicleMod>
  307. HOOKS_DO_ONE_CALLBACK<EnterExitModShop>
  308. HOOKS_DO_ONE_CALLBACK<VehiclePaintjob>
  309. HOOKS_DO_ONE_CALLBACK<VehicleRespray>
  310. HOOKS_DO_ONE_CALLBACK<VehicleDamageStatusUpdate>
  311. HOOKS_DO_ONE_CALLBACK<PlayerSelectedMenuRow>
  312. HOOKS_DO_ONE_CALLBACK<PlayerExitedMenu>
  313. HOOKS_DO_ONE_CALLBACK<PlayerInteriorChange>
  314. HOOKS_DO_ONE_CALLBACK<PlayerKeyStateChange>
  315. HOOKS_DO_ONE_CALLBACK<RconLoginAttempt>
  316. HOOKS_DO_ONE_CALLBACK<PlayerUpdate>
  317. HOOKS_DO_ONE_CALLBACK<PlayerStreamIn>
  318. HOOKS_DO_ONE_CALLBACK<PlayerStreamOut>
  319. HOOKS_DO_ONE_CALLBACK<VehicleStreamIn>
  320. HOOKS_DO_ONE_CALLBACK<VehicleStreamOut>
  321. HOOKS_DO_ONE_CALLBACK<DialogResponse>
  322. HOOKS_DO_ONE_CALLBACK<PlayerClickPlayer>
  323. HOOKS_DO_ONE_CALLBACK<PlayerGiveDamage>
  324. HOOKS_DO_ONE_CALLBACK<PlayerTakeDamage>
  325. HOOKS_DO_ONE_CALLBACK<PlayerClickMap>
  326. HOOKS_DO_ONE_CALLBACK<UnoccupiedVehicleUpdate>
  327. // YSI callbacks.
  328. HOOKS_DO_ONE_SPECIAL<PlayerLogin>
  329. HOOKS_DO_ONE_SPECIAL<PlayerLogout>
  330. //ALS_DETECT<%0>Hooks_FindAll(#%0,cidx,YSI_g_sCallbackData[ALS_On%0],count);if(!count)Hooks_RedirectPublic(#On%0,#S@@_On%0);
  331. //ALS_DETECT<%0>Hooks_FindAll(#%0,cidx,YSI_g_sCallbackData[ALS_On%0],count);if(!count)Hooks_RedirectPublic(#On%0,#S@@_On%0);
  332. #if defined YSI_LOCK_MODE
  333. YSI_gLockData[1] = floatround(floatlog(_LOCK_LEN_0 + 1), floatround_ceil);
  334. YSI_gLockData[0] = 5 + YSI_gLockData[1];
  335. YSI_gLockData[2] = YSI_gLockData[0] - 5;
  336. if (~strval(YSI_gLockData[5]) != ~_LOCK_IP_0)
  337. {
  338. y_lock 2;
  339. }
  340. YSI_gLockData[2] -= YSI_gLockData[1];
  341. YSI_gLockData[YSI_gLockData[2] + 1] -= YSI_gLockData[0];
  342. YSI_gLockData[1] += '.' + 5;
  343. /*if (~strval(YSI_gLockData[5]) != 0xFFFFFF80)
  344. {
  345. y_lock 3;
  346. }*/
  347. #endif
  348. new
  349. end = YSI_g_sCallbackData[ALS_OnScriptInit][E_FUNC_HOOK_DATA_END],
  350. start = YSI_g_sCallbackData[ALS_OnScriptInit][E_FUNC_HOOK_DATA_START],
  351. ret = ALS_R_ScriptInit;
  352. if (start == end)
  353. {
  354. // We need to use this version of the return code instead of jumping to
  355. // the end of the function because "#emit" can only see labels BEFORE
  356. // where it is in the code. This is quite annoying but can be worked
  357. // around in this case.
  358. P:2("Hooks_OnScriptInit end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnScriptInit));
  359. hooks_do_hooks_call_no_als:
  360. return;
  361. }
  362. new
  363. idx,
  364. pointer,
  365. re = end;
  366. if (end > sizeof (YSI_g_sCallbackAddresses))
  367. {
  368. re = sizeof (YSI_g_sCallbackAddresses);
  369. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  370. }
  371. // Do the initial fast elements.
  372. while (start != re)
  373. {
  374. pointer = YSI_g_sCallbackAddresses[start++];
  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. //#emit CONST.alt 0xFFFFFFFF
  382. //#emit PUSH.alt
  383. /*#emit HEAP 4
  384. #emit STOR.I
  385. #emit PUSH.alt
  386. printf("%d");
  387. #emit STACK 4
  388. #emit HEAP 0xFFFFFFFC*/
  389. #emit CONST.alt 0xFFFFFFFF
  390. #emit STOR.S.pri ret
  391. #emit JEQ hooks_do_hooks_call_no_als
  392. }
  393. // Get any remaining pointers the old way.
  394. while (start++ != end)
  395. {
  396. idx = AMX_GetPublicPointer(idx, pointer, "@yH_ScriptInit");
  397. #emit PUSH.C 0
  398. #emit LCTRL 6
  399. #emit ADD.C 28
  400. #emit PUSH.pri
  401. #emit LOAD.S.pri pointer
  402. #emit SCTRL 6
  403. #emit CONST.alt 0xFFFFFFFF
  404. #emit STOR.S.pri ret
  405. #emit JEQ hooks_do_hooks_call_no_als
  406. }
  407. // Do ALS just in case (YSI no longer uses this though now).
  408. P:2("Hooks_OnScriptInit end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnScriptInit));
  409. }
  410.  
  411. static Hooks_OnScriptExit()
  412. {
  413. P:2("Hooks_OnScriptExit called");
  414. new
  415. end = YSI_g_sCallbackData[ALS_OnScriptExit][E_FUNC_HOOK_DATA_END],
  416. start = YSI_g_sCallbackData[ALS_OnScriptExit][E_FUNC_HOOK_DATA_START],
  417. ret = ALS_R_ScriptExit;
  418. if (start == end)
  419. {
  420. P:2("Hooks_OnScriptExit end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnScriptExit));
  421. hooks_do_hooks_call_no_als:
  422. return;
  423. }
  424. new
  425. idx,
  426. pointer,
  427. re = end;
  428. if (end > sizeof (YSI_g_sCallbackAddresses))
  429. {
  430. re = sizeof (YSI_g_sCallbackAddresses);
  431. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  432. }
  433. // Do the initial fast elements.
  434. while (start != re)
  435. {
  436. pointer = YSI_g_sCallbackAddresses[start++];
  437. #emit PUSH.C 0
  438. #emit LCTRL 6
  439. #emit ADD.C 28
  440. #emit PUSH.pri
  441. #emit LOAD.S.pri pointer
  442. #emit SCTRL 6
  443. #emit CONST.alt 0xFFFFFFFF
  444. #emit STOR.S.pri ret
  445. #emit JEQ hooks_do_hooks_call_no_als
  446. }
  447. // Get any remaining pointers the old way.
  448. while (start++ != end)
  449. {
  450. idx = AMX_GetPublicPointer(idx, pointer, "@yH_ScriptExit");
  451. #emit PUSH.C 0
  452. #emit LCTRL 6
  453. #emit ADD.C 28
  454. #emit PUSH.pri
  455. #emit LOAD.S.pri pointer
  456. #emit SCTRL 6
  457. #emit CONST.alt 0xFFFFFFFF
  458. #emit STOR.S.pri ret
  459. #emit JEQ hooks_do_hooks_call_no_als
  460. }
  461. // Do ALS just in case (YSI no longer uses this though now).
  462. P:2("Hooks_OnScriptExit end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnScriptExit));
  463. }
  464.  
  465. public OnGameModeInit()
  466. {
  467. P:2("Hooks_OnGameModeInit called: %d", YSI_FILTERSCRIPT);
  468. if (!YSI_FILTERSCRIPT)
  469. {
  470. Hooks_OnScriptInit();
  471. //Hooks_OnAnyScriptInit();
  472. #if defined YSI_LOCK_MODE
  473. //if (strval(YSI_gLockData[9]) + strval(YSI_gLockData[11]) + strval(YSI_gLockData[13]) != 1)
  474. if (strval(YSI_gLockData[strfind(YSI_gLockData[5], YSI_gLockData[1])]) | strval(YSI_gLockData[strfind(YSI_gLockData[YSI_gLockData[0]], YSI_gLockData[1], _, 1)]) << 8 != _LOCK_IP_1 | _LOCK_IP_2 << 8)
  475. {
  476. y_lock 4;
  477. }
  478. #endif
  479. }
  480. new
  481. end = YSI_g_sCallbackData[ALS_OnGameModeInit][E_FUNC_HOOK_DATA_END],
  482. start = YSI_g_sCallbackData[ALS_OnGameModeInit][E_FUNC_HOOK_DATA_START],
  483. ret = ALS_R_GameModeInit;
  484. if (start == end)
  485. {
  486. P:2("Hooks_OnGameModeInit end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnGameModeInit));
  487. //printf("%d", ret);
  488. //printf("%d", Bit_GetBit(Bit:gs_ALS, _:ALS_OnGameModeInit));
  489. //printf("%d", P@("S@@_OnGameModeInit", ""));
  490. HOOK_CALL<GameModeInit>
  491. //hooks_do_hooks_call_no_als:
  492. //printf("end 2");
  493. //return 1;
  494. }
  495. new
  496. idx,
  497. pointer,
  498. re = end;
  499. if (end > sizeof (YSI_g_sCallbackAddresses))
  500. {
  501. re = sizeof (YSI_g_sCallbackAddresses);
  502. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  503. }
  504. // Do the initial fast elements.
  505. while (start != re)
  506. {
  507. pointer = YSI_g_sCallbackAddresses[start++];
  508. #emit PUSH.C 0
  509. #emit LCTRL 6
  510. #emit ADD.C 28
  511. #emit PUSH.pri
  512. #emit LOAD.S.pri pointer
  513. #emit SCTRL 6
  514. #emit CONST.alt 0xFFFFFFFF
  515. // Note that this label is embedded in the "HOOK_CALL" macro above.
  516. #emit STOR.S.pri ret
  517. #emit JEQ hooks_do_hooks_call_no_als
  518. }
  519. // Get any remaining pointers the old way.
  520. while (start++ != end)
  521. {
  522. idx = AMX_GetPublicPointer(idx, pointer, "@yH_GameModeInit");
  523. #emit PUSH.C 0
  524. #emit LCTRL 6
  525. #emit ADD.C 28
  526. #emit PUSH.pri
  527. #emit LOAD.S.pri pointer
  528. #emit SCTRL 6
  529. #emit CONST.alt 0xFFFFFFFF
  530. #emit STOR.S.pri ret
  531. #emit JEQ hooks_do_hooks_call_no_als
  532. }
  533. // Do ALS just in case (YSI no longer uses this though now).
  534. P:2("Hooks_OnGameModeInit end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnGameModeInit));
  535. HOOK_RETURN<GameModeInit>
  536. //return 1;
  537. }
  538. #if defined _ALS_OnGameModeInit
  539. #undef OnGameModeInit
  540. #else
  541. #define _ALS_OnGameModeInit
  542. #endif
  543. #define OnGameModeInit S@@_OnGameModeInit
  544. ALS_FORWARD<GameModeInit>
  545.  
  546. public OnGameModeExit()
  547. {
  548. P:2("Hooks_OnGameModeExit called");
  549. if (!YSI_FILTERSCRIPT)
  550. {
  551. Hooks_OnScriptExit();
  552. //Hooks_OnAnyScriptExit();
  553. }
  554. new
  555. end = YSI_g_sCallbackData[ALS_OnGameModeExit][E_FUNC_HOOK_DATA_END],
  556. start = YSI_g_sCallbackData[ALS_OnGameModeExit][E_FUNC_HOOK_DATA_START],
  557. ret = ALS_R_GameModeExit;
  558. if (start == end)
  559. {
  560. P:2("Hooks_OnGameModeExit end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnGameModeExit));
  561. HOOK_CALL<GameModeExit>
  562. }
  563. new
  564. idx,
  565. pointer,
  566. re = end;
  567. if (end > sizeof (YSI_g_sCallbackAddresses))
  568. {
  569. re = sizeof (YSI_g_sCallbackAddresses);
  570. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  571. }
  572. // Do the initial fast elements.
  573. while (start != re)
  574. {
  575. pointer = YSI_g_sCallbackAddresses[start++];
  576. #emit PUSH.C 0
  577. #emit LCTRL 6
  578. #emit ADD.C 28
  579. #emit PUSH.pri
  580. #emit LOAD.S.pri pointer
  581. #emit SCTRL 6
  582. #emit CONST.alt 0xFFFFFFFF
  583. #emit STOR.S.pri ret
  584. #emit JEQ hooks_do_hooks_call_no_als
  585. }
  586. // Get any remaining pointers the old way.
  587. while (start++ != end)
  588. {
  589. idx = AMX_GetPublicPointer(idx, pointer, "@yH_GameModeExit");
  590. #emit PUSH.C 0
  591. #emit LCTRL 6
  592. #emit ADD.C 28
  593. #emit PUSH.pri
  594. #emit LOAD.S.pri pointer
  595. #emit SCTRL 6
  596. #emit CONST.alt 0xFFFFFFFF
  597. #emit STOR.S.pri ret
  598. #emit JEQ hooks_do_hooks_call_no_als
  599. }
  600. // Do ALS just in case (YSI no longer uses this though now).
  601. P:2("Hooks_OnGameModeExit end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnGameModeExit));
  602. HOOK_RETURN<GameModeExit>
  603. }
  604. #if defined _ALS_OnGameModeExit
  605. #undef OnGameModeExit
  606. #else
  607. #define _ALS_OnGameModeExit
  608. #endif
  609. #define OnGameModeExit S@@_OnGameModeExit
  610. ALS_FORWARD<GameModeExit>
  611.  
  612. /*static Hooks_OnAnyScriptInit()
  613. {
  614. P:2("Hooks_OnAnyScriptInit called");
  615. new
  616. end = YSI_g_sCallbackData[ALS_OnAnyScriptInit][E_FUNC_HOOK_DATA_END],
  617. start = YSI_g_sCallbackData[ALS_OnAnyScriptInit][E_FUNC_HOOK_DATA_START],
  618. ret = ALS_R_PlayerCommandText;
  619. if (start == end)
  620. {
  621. P:2("Hooks_OnAnyScriptInit end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnAnyScriptInit));
  622. //HOOK_CALL<AnyScriptInit>
  623. hooks_do_hooks_call_no_als:
  624. return;
  625. }
  626. new
  627. idx,
  628. pointer,
  629. re = end;
  630. if (end > sizeof (YSI_g_sCallbackAddresses))
  631. {
  632. re = sizeof (YSI_g_sCallbackAddresses);
  633. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  634. }
  635. // Do the initial fast elements.
  636. while (start != re)
  637. {
  638. pointer = YSI_g_sCallbackAddresses[start++];
  639. #emit PUSH.C 0
  640. #emit LCTRL 6
  641. #emit ADD.C 28
  642. #emit PUSH.pri
  643. #emit LOAD.S.pri pointer
  644. #emit SCTRL 6
  645. #emit CONST.alt 0xFFFFFFFF
  646. // Note that this label is embedded in the "HOOK_CALL" macro above.
  647. #emit STOR.S.pri ret
  648. #emit JEQ hooks_do_hooks_call_no_als
  649. }
  650. // Get any remaining pointers the old way.
  651. while (start++ != end)
  652. {
  653. idx = AMX_GetPublicPointer(idx, pointer, "@yH_AnyScriptInit");
  654. #emit PUSH.C 0
  655. #emit LCTRL 6
  656. #emit ADD.C 28
  657. #emit PUSH.pri
  658. #emit LOAD.S.pri pointer
  659. #emit SCTRL 6
  660. #emit CONST.alt 0xFFFFFFFF
  661. #emit STOR.S.pri ret
  662. #emit JEQ hooks_do_hooks_call_no_als
  663. }
  664. // Do ALS just in case (YSI no longer uses this though now).
  665. P:2("Hooks_OnAnyScriptInit end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnAnyScriptInit));
  666. //HOOK_RETURN<AnyScriptInit>
  667. }
  668.  
  669. static Hooks_OnAnyScriptExit()
  670. {
  671. P:2("Hooks_OnAnyScriptExit called");
  672. new
  673. end = YSI_g_sCallbackData[ALS_OnAnyScriptExit][E_FUNC_HOOK_DATA_END],
  674. start = YSI_g_sCallbackData[ALS_OnAnyScriptExit][E_FUNC_HOOK_DATA_START],
  675. ret = ALS_R_PlayerCommandText;
  676. if (start == end)
  677. {
  678. P:2("Hooks_OnAnyScriptExit end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnAnyScriptExit));
  679. //HOOK_CALL<AnyScriptExit>
  680. hooks_do_hooks_call_no_als:
  681. return;
  682. }
  683. new
  684. idx,
  685. pointer,
  686. re = end;
  687. if (end > sizeof (YSI_g_sCallbackAddresses))
  688. {
  689. re = sizeof (YSI_g_sCallbackAddresses);
  690. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  691. }
  692. // Do the initial fast elements.
  693. while (start != re)
  694. {
  695. pointer = YSI_g_sCallbackAddresses[start++];
  696. #emit PUSH.C 0
  697. #emit LCTRL 6
  698. #emit ADD.C 28
  699. #emit PUSH.pri
  700. #emit LOAD.S.pri pointer
  701. #emit SCTRL 6
  702. #emit CONST.alt 0xFFFFFFFF
  703. #emit STOR.S.pri ret
  704. #emit JEQ hooks_do_hooks_call_no_als
  705. }
  706. // Get any remaining pointers the old way.
  707. while (start++ != end)
  708. {
  709. idx = AMX_GetPublicPointer(idx, pointer, "@yH_AnyScriptExit");
  710. #emit PUSH.C 0
  711. #emit LCTRL 6
  712. #emit ADD.C 28
  713. #emit PUSH.pri
  714. #emit LOAD.S.pri pointer
  715. #emit SCTRL 6
  716. #emit CONST.alt 0xFFFFFFFF
  717. #emit STOR.S.pri ret
  718. #emit JEQ hooks_do_hooks_call_no_als
  719. }
  720. // Do ALS just in case (YSI no longer uses this though now).
  721. P:2("Hooks_OnAnyScriptExit end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnAnyScriptExit));
  722. //HOOK_RETURN<AnyScriptExit>
  723. }*/
  724.  
  725. public OnFilterScriptInit()
  726. {
  727. P:2("Hooks_OnFilterScriptInit called");
  728. Hooks_OnScriptInit();
  729. #if defined YSI_LOCK_MODE
  730. if (strval(YSI_gLockData[strfind(YSI_gLockData[5], YSI_gLockData[1])]) | strval(YSI_gLockData[strfind(YSI_gLockData[YSI_gLockData[0]], YSI_gLockData[1], _, 1)]) << 8 != _LOCK_IP_1 | _LOCK_IP_2 << 8)
  731. {
  732. y_lock 4;
  733. }
  734. /*if (strval(YSI_gLockData[9]) + strval(YSI_gLockData[11]) + strval(YSI_gLockData[13]) != 1)
  735. {
  736. y_lock 5;
  737. }*/
  738. #endif
  739. //Hooks_OnAnyScriptInit();
  740. YSI_FILTERSCRIPT = true;
  741. new
  742. end = YSI_g_sCallbackData[ALS_OnFilterScriptInit][E_FUNC_HOOK_DATA_END],
  743. start = YSI_g_sCallbackData[ALS_OnFilterScriptInit][E_FUNC_HOOK_DATA_START],
  744. ret = ALS_R_FilterScriptInit;
  745. if (start == end)
  746. {
  747. P:2("Hooks_OnFilterScriptInit end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnFilterScriptInit));
  748. HOOK_CALL<FilterScriptInit>
  749. }
  750. new
  751. idx,
  752. pointer,
  753. re = end;
  754. if (end > sizeof (YSI_g_sCallbackAddresses))
  755. {
  756. re = sizeof (YSI_g_sCallbackAddresses);
  757. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  758. }
  759. // Do the initial fast elements.
  760. while (start != re)
  761. {
  762. pointer = YSI_g_sCallbackAddresses[start++];
  763. #emit PUSH.C 0
  764. #emit LCTRL 6
  765. #emit ADD.C 28
  766. #emit PUSH.pri
  767. #emit LOAD.S.pri pointer
  768. #emit SCTRL 6
  769. #emit CONST.alt 0xFFFFFFFF
  770. #emit STOR.S.pri ret
  771. #emit JEQ hooks_do_hooks_call_no_als
  772. }
  773. // Get any remaining pointers the old way.
  774. while (start++ != end)
  775. {
  776. idx = AMX_GetPublicPointer(idx, pointer, "@yH_FilterScriptInit");
  777. #emit PUSH.C 0
  778. #emit LCTRL 6
  779. #emit ADD.C 28
  780. #emit PUSH.pri
  781. #emit LOAD.S.pri pointer
  782. #emit SCTRL 6
  783. #emit CONST.alt 0xFFFFFFFF
  784. #emit STOR.S.pri ret
  785. #emit JEQ hooks_do_hooks_call_no_als
  786. }
  787. // Do ALS just in case (YSI no longer uses this though now).
  788. P:2("Hooks_OnFilterScriptInit end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnFilterScriptInit));
  789. HOOK_RETURN<FilterScriptInit>
  790. }
  791. #if defined _ALS_OnFilterScriptInit
  792. #undef OnFilterScriptInit
  793. #else
  794. #define _ALS_OnFilterScriptInit
  795. #endif
  796. #define OnFilterScriptInit S@@_OnFilterScriptInit
  797. ALS_FORWARD<FilterScriptInit>
  798.  
  799. public OnFilterScriptExit()
  800. {
  801. P:2("Hooks_OnFilterScriptExit called");
  802. Hooks_OnScriptExit();
  803. //Hooks_OnAnyScriptExit();
  804. new
  805. end = YSI_g_sCallbackData[ALS_OnFilterScriptExit][E_FUNC_HOOK_DATA_END],
  806. start = YSI_g_sCallbackData[ALS_OnFilterScriptExit][E_FUNC_HOOK_DATA_START],
  807. ret = ALS_R_FilterScriptExit;
  808. if (start == end)
  809. {
  810. P:2("Hooks_OnFilterScriptExit end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnFilterScriptExit));
  811. HOOK_CALL<FilterScriptExit>
  812. }
  813. new
  814. idx,
  815. pointer,
  816. re = end;
  817. if (end > sizeof (YSI_g_sCallbackAddresses))
  818. {
  819. re = sizeof (YSI_g_sCallbackAddresses);
  820. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  821. }
  822. // Do the initial fast elements.
  823. while (start != re)
  824. {
  825. pointer = YSI_g_sCallbackAddresses[start++];
  826. #emit PUSH.C 0
  827. #emit LCTRL 6
  828. #emit ADD.C 28
  829. #emit PUSH.pri
  830. #emit LOAD.S.pri pointer
  831. #emit SCTRL 6
  832. #emit CONST.alt 0xFFFFFFFF
  833. #emit STOR.S.pri ret
  834. #emit JEQ hooks_do_hooks_call_no_als
  835. }
  836. // Get any remaining pointers the old way.
  837. while (start++ != end)
  838. {
  839. idx = AMX_GetPublicPointer(idx, pointer, "@yH_FilterScriptExit");
  840. #emit PUSH.C 0
  841. #emit LCTRL 6
  842. #emit ADD.C 28
  843. #emit PUSH.pri
  844. #emit LOAD.S.pri pointer
  845. #emit SCTRL 6
  846. #emit CONST.alt 0xFFFFFFFF
  847. #emit STOR.S.pri ret
  848. #emit JEQ hooks_do_hooks_call_no_als
  849. }
  850. // Do ALS just in case (YSI no longer uses this though now).
  851. P:2("Hooks_OnFilterScriptExit end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnFilterScriptExit));
  852. HOOK_RETURN<FilterScriptExit>
  853. }
  854. #if defined _ALS_OnFilterScriptExit
  855. #undef OnFilterScriptExit
  856. #else
  857. #define _ALS_OnFilterScriptExit
  858. #endif
  859. #define OnFilterScriptExit S@@_OnFilterScriptExit
  860. ALS_FORWARD<FilterScriptExit>
  861.  
  862. public OnPlayerConnect(playerid)
  863. {
  864. P:2("Hooks_OnPlayerConnect called: %d", playerid);
  865. new
  866. end = YSI_g_sCallbackData[ALS_OnPlayerConnect][E_FUNC_HOOK_DATA_END],
  867. start = YSI_g_sCallbackData[ALS_OnPlayerConnect][E_FUNC_HOOK_DATA_START],
  868. ret = ALS_R_PlayerConnect;
  869. if (start == end)
  870. {
  871. P:2("Hooks_OnPlayerConnect end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerConnect));
  872. HOOK_CALL<PlayerConnect>
  873. }
  874. new
  875. pointer,
  876. idx,
  877. re = end;
  878. if (end > sizeof (YSI_g_sCallbackAddresses))
  879. {
  880. re = sizeof (YSI_g_sCallbackAddresses);
  881. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  882. }
  883. // Do the initial fast elements. This was an experiment to play with the
  884. // stack so we only ever need to push the parameters and return address once
  885. // and do the loop using the return address! Shame I've not got it working
  886. // yet really!
  887. /*#emit PUSH.S playerid
  888. #emit PUSH.C 4
  889. #emit LCTRL 6
  890. #emit ADD.C 20
  891. #emit PUSH.pri
  892. // This is done twice so that the second time the loop runs (which isn't
  893. // actually done by "while" anymore, the loop is hidden) the code's correct.
  894. #emit STACK 12
  895. // This is where the code above makes the SCTRL call return to!
  896. #emit STACK 0xFFFFFFF4
  897. //while (start != re)
  898. // NOTE: THIS IS A LOOP! I know it doesn't look like one but it is!
  899. if (start != re)*/
  900. while (start != re)
  901. {
  902. pointer = YSI_g_sCallbackAddresses[start++];
  903. #emit PUSH.S playerid
  904. #emit PUSH.C 4
  905. #emit LCTRL 6
  906. #emit ADD.C 28
  907. #emit PUSH.pri
  908. #emit LOAD.S.pri pointer
  909. #emit SCTRL 6
  910. #emit CONST.alt 0xFFFFFFFF
  911. #emit STOR.S.pri ret
  912. #emit JEQ hooks_do_hooks_call_no_als
  913. }
  914. // Clean up the stack.
  915. // Get any remaining pointers the old way.
  916. while (start++ != end)
  917. {
  918. idx = AMX_GetPublicPointer(idx, pointer, "@yH_PlayerConnect");
  919. #emit PUSH.S playerid
  920. #emit PUSH.C 4
  921. #emit LCTRL 6
  922. #emit ADD.C 28
  923. #emit PUSH.pri
  924. #emit LOAD.S.pri pointer
  925. #emit SCTRL 6
  926. #emit CONST.alt 0xFFFFFFFF
  927. #emit STOR.S.pri ret
  928. #emit JEQ hooks_do_hooks_call_no_als
  929. }
  930. //#emit STACK 12
  931. // Do ALS just in case (YSI no longer uses this though now).
  932. P:2("Hooks_OnPlayerConnect end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerConnect));
  933. HOOK_RETURN<PlayerConnect>
  934. }
  935. #if defined _ALS_OnPlayerConnect
  936. #undef OnPlayerConnect
  937. #else
  938. #define _ALS_OnPlayerConnect
  939. #endif
  940. #define OnPlayerConnect S@@_OnPlayerConnect
  941. ALS_FORWARD<PlayerConnect>
  942.  
  943. public OnPlayerDisconnect(playerid, reason)
  944. {
  945. P:2("Hooks_OnPlayerDisconnect called: %d, %d", playerid, reason);
  946. new
  947. end = YSI_g_sCallbackData[ALS_OnPlayerDisconnect][E_FUNC_HOOK_DATA_END],
  948. start = YSI_g_sCallbackData[ALS_OnPlayerDisconnect][E_FUNC_HOOK_DATA_START],
  949. ret = ALS_R_PlayerDisconnect;
  950. if (start == end)
  951. {
  952. P:2("Hooks_OnPlayerDisconnect end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerDisconnect));
  953. HOOK_CALL<PlayerDisconnect>
  954. }
  955. new
  956. idx,
  957. pointer,
  958. re = end;
  959. if (end > sizeof (YSI_g_sCallbackAddresses))
  960. {
  961. re = sizeof (YSI_g_sCallbackAddresses);
  962. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  963. }
  964. // Do the initial fast elements.
  965. while (start != re)
  966. {
  967. pointer = YSI_g_sCallbackAddresses[start++];
  968. #emit PUSH.S reason
  969. #emit PUSH.S playerid
  970. #emit PUSH.C 8
  971. #emit LCTRL 6
  972. #emit ADD.C 28
  973. #emit PUSH.pri
  974. #emit LOAD.S.pri pointer
  975. #emit SCTRL 6
  976. #emit CONST.alt 0xFFFFFFFF
  977. #emit STOR.S.pri ret
  978. #emit JEQ hooks_do_hooks_call_no_als
  979. }
  980. // Get any remaining pointers the old way.
  981. while (start++ != end)
  982. {
  983. idx = AMX_GetPublicPointer(idx, pointer, "@yH_PlayerDisconnect");
  984. #emit PUSH.S reason
  985. #emit PUSH.S playerid
  986. #emit PUSH.C 8
  987. #emit LCTRL 6
  988. #emit ADD.C 28
  989. #emit PUSH.pri
  990. #emit LOAD.S.pri pointer
  991. #emit SCTRL 6
  992. #emit CONST.alt 0xFFFFFFFF
  993. #emit STOR.S.pri ret
  994. #emit JEQ hooks_do_hooks_call_no_als
  995. }
  996. // Do ALS just in case (YSI no longer uses this though now).
  997. P:2("Hooks_OnPlayerDisconnect end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerDisconnect));
  998. HOOK_RETURN<PlayerDisconnect>
  999. }
  1000. #if defined _ALS_OnPlayerDisconnect
  1001. #undef OnPlayerDisconnect
  1002. #else
  1003. #define _ALS_OnPlayerDisconnect
  1004. #endif
  1005. #define OnPlayerDisconnect S@@_OnPlayerDisconnect
  1006. ALS_FORWARD<PlayerDisconnect>
  1007.  
  1008. public OnPlayerSpawn(playerid)
  1009. {
  1010. P:2("Hooks_OnPlayerSpawn called: %d", playerid);
  1011. new
  1012. end = YSI_g_sCallbackData[ALS_OnPlayerSpawn][E_FUNC_HOOK_DATA_END],
  1013. start = YSI_g_sCallbackData[ALS_OnPlayerSpawn][E_FUNC_HOOK_DATA_START],
  1014. ret = ALS_R_PlayerSpawn;
  1015. if (start == end)
  1016. {
  1017. P:2("Hooks_OnPlayerSpawn end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerSpawn));
  1018. HOOK_CALL<PlayerSpawn>
  1019. }
  1020. new
  1021. idx,
  1022. pointer,
  1023. re = end;
  1024. if (end > sizeof (YSI_g_sCallbackAddresses))
  1025. {
  1026. re = sizeof (YSI_g_sCallbackAddresses);
  1027. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  1028. }
  1029. // Do the initial fast elements.
  1030. while (start != re)
  1031. {
  1032. pointer = YSI_g_sCallbackAddresses[start++];
  1033. #emit PUSH.S playerid
  1034. #emit PUSH.C 4
  1035. #emit LCTRL 6
  1036. #emit ADD.C 28
  1037. #emit PUSH.pri
  1038. #emit LOAD.S.pri pointer
  1039. #emit SCTRL 6
  1040. #emit CONST.alt 0xFFFFFFFF
  1041. #emit STOR.S.pri ret
  1042. #emit JEQ hooks_do_hooks_call_no_als
  1043. }
  1044. // Get any remaining pointers the old way.
  1045. while (start++ != end)
  1046. {
  1047. idx = AMX_GetPublicPointer(idx, pointer, "@yH_PlayerSpawn");
  1048. #emit PUSH.S playerid
  1049. #emit PUSH.C 4
  1050. #emit LCTRL 6
  1051. #emit ADD.C 28
  1052. #emit PUSH.pri
  1053. #emit LOAD.S.pri pointer
  1054. #emit SCTRL 6
  1055. #emit CONST.alt 0xFFFFFFFF
  1056. #emit STOR.S.pri ret
  1057. #emit JEQ hooks_do_hooks_call_no_als
  1058. }
  1059. // Do ALS just in case (YSI no longer uses this though now).
  1060. P:2("Hooks_OnPlayerSpawn end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerSpawn));
  1061. HOOK_RETURN<PlayerSpawn>
  1062. }
  1063. #if defined _ALS_OnPlayerSpawn
  1064. #undef OnPlayerSpawn
  1065. #else
  1066. #define _ALS_OnPlayerSpawn
  1067. #endif
  1068. #define OnPlayerSpawn S@@_OnPlayerSpawn
  1069. ALS_FORWARD<PlayerSpawn>
  1070.  
  1071. public OnPlayerDeath(playerid, killerid, reason)
  1072. {
  1073. P:2("Hooks_OnPlayerDeath called: %d, %d, %d", playerid, killerid, reason);
  1074. new
  1075. end = YSI_g_sCallbackData[ALS_OnPlayerDeath][E_FUNC_HOOK_DATA_END],
  1076. start = YSI_g_sCallbackData[ALS_OnPlayerDeath][E_FUNC_HOOK_DATA_START],
  1077. ret = ALS_R_PlayerDeath;
  1078. if (start == end)
  1079. {
  1080. P:2("Hooks_OnPlayerDeath end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerDeath));
  1081. HOOK_CALL<PlayerDeath>
  1082. }
  1083. new
  1084. idx,
  1085. pointer,
  1086. re = end;
  1087. if (end > sizeof (YSI_g_sCallbackAddresses))
  1088. {
  1089. re = sizeof (YSI_g_sCallbackAddresses);
  1090. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  1091. }
  1092. // Do the initial fast elements.
  1093. while (start != re)
  1094. {
  1095. pointer = YSI_g_sCallbackAddresses[start++];
  1096. #emit PUSH.S reason
  1097. #emit PUSH.S killerid
  1098. #emit PUSH.S playerid
  1099. #emit PUSH.C 12
  1100. #emit LCTRL 6
  1101. #emit ADD.C 28
  1102. #emit PUSH.pri
  1103. #emit LOAD.S.pri pointer
  1104. #emit SCTRL 6
  1105. #emit CONST.alt 0xFFFFFFFF
  1106. #emit STOR.S.pri ret
  1107. #emit JEQ hooks_do_hooks_call_no_als
  1108. }
  1109. // Get any remaining pointers the old way.
  1110. while (start++ != end)
  1111. {
  1112. idx = AMX_GetPublicPointer(idx, pointer, "@yH_PlayerDeath");
  1113. #emit PUSH.S reason
  1114. #emit PUSH.S killerid
  1115. #emit PUSH.S playerid
  1116. #emit PUSH.C 12
  1117. #emit LCTRL 6
  1118. #emit ADD.C 28
  1119. #emit PUSH.pri
  1120. #emit LOAD.S.pri pointer
  1121. #emit SCTRL 6
  1122. #emit CONST.alt 0xFFFFFFFF
  1123. #emit STOR.S.pri ret
  1124. #emit JEQ hooks_do_hooks_call_no_als
  1125. }
  1126. // Do ALS just in case (YSI no longer uses this though now).
  1127. P:2("Hooks_OnPlayerDeath end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerDeath));
  1128. HOOK_RETURN<PlayerDeath>
  1129. }
  1130. #if defined _ALS_OnPlayerDeath
  1131. #undef OnPlayerDeath
  1132. #else
  1133. #define _ALS_OnPlayerDeath
  1134. #endif
  1135. #define OnPlayerDeath S@@_OnPlayerDeath
  1136. ALS_FORWARD<PlayerDeath>
  1137.  
  1138. public OnVehicleSpawn(vehicleid)
  1139. {
  1140. P:2("Hooks_OnVehicleSpawn called: %d", vehicleid);
  1141. new
  1142. end = YSI_g_sCallbackData[ALS_OnVehicleSpawn][E_FUNC_HOOK_DATA_END],
  1143. start = YSI_g_sCallbackData[ALS_OnVehicleSpawn][E_FUNC_HOOK_DATA_START],
  1144. ret = ALS_R_VehicleSpawn;
  1145. if (start == end)
  1146. {
  1147. P:2("Hooks_OnVehicleSpawn end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnVehicleSpawn));
  1148. HOOK_CALL<VehicleSpawn>
  1149. }
  1150. new
  1151. idx,
  1152. pointer,
  1153. re = end;
  1154. if (end > sizeof (YSI_g_sCallbackAddresses))
  1155. {
  1156. re = sizeof (YSI_g_sCallbackAddresses);
  1157. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  1158. }
  1159. // Do the initial fast elements.
  1160. while (start != re)
  1161. {
  1162. pointer = YSI_g_sCallbackAddresses[start++];
  1163. #emit PUSH.S vehicleid
  1164. #emit PUSH.C 4
  1165. #emit LCTRL 6
  1166. #emit ADD.C 28
  1167. #emit PUSH.pri
  1168. #emit LOAD.S.pri pointer
  1169. #emit SCTRL 6
  1170. #emit CONST.alt 0xFFFFFFFF
  1171. #emit STOR.S.pri ret
  1172. #emit JEQ hooks_do_hooks_call_no_als
  1173. }
  1174. // Get any remaining pointers the old way.
  1175. while (start++ != end)
  1176. {
  1177. idx = AMX_GetPublicPointer(idx, pointer, "@yH_VehicleSpawn");
  1178. #emit PUSH.S vehicleid
  1179. #emit PUSH.C 4
  1180. #emit LCTRL 6
  1181. #emit ADD.C 28
  1182. #emit PUSH.pri
  1183. #emit LOAD.S.pri pointer
  1184. #emit SCTRL 6
  1185. #emit CONST.alt 0xFFFFFFFF
  1186. #emit STOR.S.pri ret
  1187. #emit JEQ hooks_do_hooks_call_no_als
  1188. }
  1189. // Do ALS just in case (YSI no longer uses this though now).
  1190. P:2("Hooks_OnVehicleSpawn end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnVehicleSpawn));
  1191. HOOK_RETURN<VehicleSpawn>
  1192. }
  1193. #if defined _ALS_OnVehicleSpawn
  1194. #undef OnVehicleSpawn
  1195. #else
  1196. #define _ALS_OnVehicleSpawn
  1197. #endif
  1198. #define OnVehicleSpawn S@@_OnVehicleSpawn
  1199. ALS_FORWARD<VehicleSpawn>
  1200.  
  1201. public OnVehicleDeath(vehicleid, killerid)
  1202. {
  1203. P:2("Hooks_OnVehicleDeath called: %d, %d", vehicleid, killerid);
  1204. new
  1205. end = YSI_g_sCallbackData[ALS_OnVehicleDeath][E_FUNC_HOOK_DATA_END],
  1206. start = YSI_g_sCallbackData[ALS_OnVehicleDeath][E_FUNC_HOOK_DATA_START],
  1207. ret = ALS_R_VehicleDeath;
  1208. if (start == end)
  1209. {
  1210. P:2("Hooks_OnVehicleDeath end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnVehicleDeath));
  1211. HOOK_CALL<VehicleDeath>
  1212. }
  1213. new
  1214. idx,
  1215. pointer,
  1216. re = end;
  1217. if (end > sizeof (YSI_g_sCallbackAddresses))
  1218. {
  1219. re = sizeof (YSI_g_sCallbackAddresses);
  1220. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  1221. }
  1222. // Do the initial fast elements.
  1223. while (start != re)
  1224. {
  1225. pointer = YSI_g_sCallbackAddresses[start++];
  1226. #emit PUSH.S killerid
  1227. #emit PUSH.S vehicleid
  1228. #emit PUSH.C 8
  1229. #emit LCTRL 6
  1230. #emit ADD.C 28
  1231. #emit PUSH.pri
  1232. #emit LOAD.S.pri pointer
  1233. #emit SCTRL 6
  1234. #emit CONST.alt 0xFFFFFFFF
  1235. #emit STOR.S.pri ret
  1236. #emit JEQ hooks_do_hooks_call_no_als
  1237. }
  1238. // Get any remaining pointers the old way.
  1239. while (start++ != end)
  1240. {
  1241. idx = AMX_GetPublicPointer(idx, pointer, "@yH_VehicleDeath");
  1242. #emit PUSH.S killerid
  1243. #emit PUSH.S vehicleid
  1244. #emit PUSH.C 8
  1245. #emit LCTRL 6
  1246. #emit ADD.C 28
  1247. #emit PUSH.pri
  1248. #emit LOAD.S.pri pointer
  1249. #emit SCTRL 6
  1250. #emit CONST.alt 0xFFFFFFFF
  1251. #emit STOR.S.pri ret
  1252. #emit JEQ hooks_do_hooks_call_no_als
  1253. }
  1254. // Do ALS just in case (YSI no longer uses this though now).
  1255. P:2("Hooks_OnVehicleDeath end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnVehicleDeath));
  1256. HOOK_RETURN<VehicleDeath>
  1257. }
  1258. #if defined _ALS_OnVehicleDeath
  1259. #undef OnVehicleDeath
  1260. #else
  1261. #define _ALS_OnVehicleDeath
  1262. #endif
  1263. #define OnVehicleDeath S@@_OnVehicleDeath
  1264. ALS_FORWARD<VehicleDeath>
  1265.  
  1266. public OnPlayerText(playerid, text[])
  1267. {
  1268. P:2("Hooks_OnPlayerText called: %d, \"%s\"", playerid, text);
  1269. new
  1270. end = YSI_g_sCallbackData[ALS_OnPlayerText][E_FUNC_HOOK_DATA_END],
  1271. start = YSI_g_sCallbackData[ALS_OnPlayerText][E_FUNC_HOOK_DATA_START],
  1272. ret = ALS_R_PlayerText;
  1273. if (start == end)
  1274. {
  1275. P:2("Hooks_OnPlayerText end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerText));
  1276. HOOK_CALL<PlayerText>
  1277. }
  1278. new
  1279. idx,
  1280. pointer,
  1281. re = end;
  1282. if (end > sizeof (YSI_g_sCallbackAddresses))
  1283. {
  1284. re = sizeof (YSI_g_sCallbackAddresses);
  1285. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  1286. }
  1287. // Do the initial fast elements.
  1288. while (start != re)
  1289. {
  1290. pointer = YSI_g_sCallbackAddresses[start++];
  1291. #emit PUSH.S text
  1292. #emit PUSH.S playerid
  1293. #emit PUSH.C 8
  1294. #emit LCTRL 6
  1295. #emit ADD.C 28
  1296. #emit PUSH.pri
  1297. #emit LOAD.S.pri pointer
  1298. #emit SCTRL 6
  1299. #emit CONST.alt 0xFFFFFFFF
  1300. #emit STOR.S.pri ret
  1301. #emit JEQ hooks_do_hooks_call_no_als
  1302. }
  1303. // Get any remaining pointers the old way.
  1304. while (start++ != end)
  1305. {
  1306. idx = AMX_GetPublicPointer(idx, pointer, "@yH_PlayerText");
  1307. #emit PUSH.S text
  1308. #emit PUSH.S playerid
  1309. #emit PUSH.C 8
  1310. #emit LCTRL 6
  1311. #emit ADD.C 28
  1312. #emit PUSH.pri
  1313. #emit LOAD.S.pri pointer
  1314. #emit SCTRL 6
  1315. #emit CONST.alt 0xFFFFFFFF
  1316. #emit STOR.S.pri ret
  1317. #emit JEQ hooks_do_hooks_call_no_als
  1318. }
  1319. // Do ALS just in case (YSI no longer uses this though now).
  1320. P:2("Hooks_OnPlayerText end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerText));
  1321. HOOK_RETURN<PlayerText>
  1322. }
  1323. #if defined _ALS_OnPlayerText
  1324. #undef OnPlayerText
  1325. #else
  1326. #define _ALS_OnPlayerText
  1327. #endif
  1328. #define OnPlayerText S@@_OnPlayerText
  1329. ALS_FORWARD<PlayerText>
  1330.  
  1331. public OnPlayerCommandText(playerid, cmdtext[])
  1332. {
  1333. P:2("Hooks_OnPlayerCommandText called: %d, \"%s\"", playerid, cmdtext);
  1334. new
  1335. end = YSI_g_sCallbackData[ALS_OnPlayerCommandText][E_FUNC_HOOK_DATA_END],
  1336. start = YSI_g_sCallbackData[ALS_OnPlayerCommandText][E_FUNC_HOOK_DATA_START],
  1337. ret = ALS_R_PlayerCommandText;
  1338. if (start == end)
  1339. {
  1340. P:2("Hooks_OnPlayerCommandText end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerCommandText));
  1341. HOOK_CALL<PlayerCommandText>
  1342. }
  1343. new
  1344. idx,
  1345. pointer,
  1346. re = end;
  1347. if (end > sizeof (YSI_g_sCallbackAddresses))
  1348. {
  1349. re = sizeof (YSI_g_sCallbackAddresses);
  1350. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  1351. }
  1352. // Do the initial fast elements.
  1353. while (start != re)
  1354. {
  1355. pointer = YSI_g_sCallbackAddresses[start++];
  1356. #emit PUSH.S cmdtext
  1357. #emit PUSH.S playerid
  1358. #emit PUSH.C 8
  1359. #emit LCTRL 6
  1360. #emit ADD.C 28
  1361. #emit PUSH.pri
  1362. #emit LOAD.S.pri pointer
  1363. #emit SCTRL 6
  1364. #emit CONST.alt 0xFFFFFFFF
  1365. #emit STOR.S.pri ret
  1366. #emit JEQ hooks_do_hooks_call_no_als
  1367. }
  1368. // Get any remaining pointers the old way.
  1369. while (start++ != end)
  1370. {
  1371. idx = AMX_GetPublicPointer(idx, pointer, "@yH_PlayerCommandText");
  1372. #emit PUSH.S cmdtext
  1373. #emit PUSH.S playerid
  1374. #emit PUSH.C 8
  1375. #emit LCTRL 6
  1376. #emit ADD.C 28
  1377. #emit PUSH.pri
  1378. #emit LOAD.S.pri pointer
  1379. #emit SCTRL 6
  1380. #emit CONST.alt 0xFFFFFFFF
  1381. #emit STOR.S.pri ret
  1382. #emit JEQ hooks_do_hooks_call_no_als
  1383. }
  1384. // Do ALS just in case (YSI no longer uses this though now).
  1385. P:2("Hooks_OnPlayerCommandText end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerCommandText));
  1386. HOOK_RETURN<PlayerCommandText>
  1387. }
  1388.  
  1389. #if defined _ALS_OnPlayerCommandText
  1390. #undef OnPlayerCommandText
  1391. #else
  1392. #define _ALS_OnPlayerCommandText
  1393. #endif
  1394. #define OnPlayerCommandText S@@_OnPlayerCommandText
  1395. ALS_FORWARD<PlayerCommandText>
  1396.  
  1397. public OnPlayerRequestClass(playerid, classid)
  1398. {
  1399. P:2("Hooks_OnPlayerRequestClass called: %d, %d", playerid, classid);
  1400. new
  1401. end = YSI_g_sCallbackData[ALS_OnPlayerRequestClass][E_FUNC_HOOK_DATA_END],
  1402. start = YSI_g_sCallbackData[ALS_OnPlayerRequestClass][E_FUNC_HOOK_DATA_START],
  1403. ret = ALS_R_PlayerRequestClass;
  1404. if (start == end)
  1405. {
  1406. P:2("Hooks_OnPlayerRequestClass end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerRequestClass));
  1407. HOOK_CALL<PlayerRequestClass>
  1408. }
  1409. new
  1410. idx,
  1411. pointer,
  1412. re = end;
  1413. if (end > sizeof (YSI_g_sCallbackAddresses))
  1414. {
  1415. re = sizeof (YSI_g_sCallbackAddresses);
  1416. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  1417. }
  1418. // Do the initial fast elements.
  1419. while (start != re)
  1420. {
  1421. pointer = YSI_g_sCallbackAddresses[start++];
  1422. #emit PUSH.S classid
  1423. #emit PUSH.S playerid
  1424. #emit PUSH.C 8
  1425. #emit LCTRL 6
  1426. #emit ADD.C 28
  1427. #emit PUSH.pri
  1428. #emit LOAD.S.pri pointer
  1429. #emit SCTRL 6
  1430. #emit CONST.alt 0xFFFFFFFF
  1431. #emit STOR.S.pri ret
  1432. #emit JEQ hooks_do_hooks_call_no_als
  1433. }
  1434. // Get any remaining pointers the old way.
  1435. while (start++ != end)
  1436. {
  1437. idx = AMX_GetPublicPointer(idx, pointer, "@yH_PlayerRequestClass");
  1438. #emit PUSH.S classid
  1439. #emit PUSH.S playerid
  1440. #emit PUSH.C 8
  1441. #emit LCTRL 6
  1442. #emit ADD.C 28
  1443. #emit PUSH.pri
  1444. #emit LOAD.S.pri pointer
  1445. #emit SCTRL 6
  1446. #emit CONST.alt 0xFFFFFFFF
  1447. #emit STOR.S.pri ret
  1448. #emit JEQ hooks_do_hooks_call_no_als
  1449. }
  1450. // Do ALS just in case (YSI no longer uses this though now).
  1451. P:2("Hooks_OnPlayerRequestClass end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerRequestClass));
  1452. HOOK_RETURN<PlayerRequestClass>
  1453. }
  1454. #if defined _ALS_OnPlayerRequestClass
  1455. #undef OnPlayerRequestClass
  1456. #else
  1457. #define _ALS_OnPlayerRequestClass
  1458. #endif
  1459. #define OnPlayerRequestClass S@@_OnPlayerRequestClass
  1460. ALS_FORWARD<PlayerRequestClass>
  1461.  
  1462. public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
  1463. {
  1464. P:2("Hooks_OnPlayerEnterVehicle called: %d, %d, %d", playerid, vehicleid, ispassenger);
  1465. new
  1466. end = YSI_g_sCallbackData[ALS_OnPlayerEnterVehicle][E_FUNC_HOOK_DATA_END],
  1467. start = YSI_g_sCallbackData[ALS_OnPlayerEnterVehicle][E_FUNC_HOOK_DATA_START],
  1468. ret = ALS_R_PlayerEnterVehicle;
  1469. if (start == end)
  1470. {
  1471. P:2("Hooks_OnPlayerEnterVehicle end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerEnterVehicle));
  1472. HOOK_CALL<PlayerEnterVehicle>
  1473. }
  1474. new
  1475. idx,
  1476. pointer,
  1477. re = end;
  1478. if (end > sizeof (YSI_g_sCallbackAddresses))
  1479. {
  1480. re = sizeof (YSI_g_sCallbackAddresses);
  1481. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  1482. }
  1483. // Do the initial fast elements.
  1484. while (start != re)
  1485. {
  1486. pointer = YSI_g_sCallbackAddresses[start++];
  1487. #emit PUSH.S ispassenger
  1488. #emit PUSH.S vehicleid
  1489. #emit PUSH.S playerid
  1490. #emit PUSH.C 12
  1491. #emit LCTRL 6
  1492. #emit ADD.C 28
  1493. #emit PUSH.pri
  1494. #emit LOAD.S.pri pointer
  1495. #emit SCTRL 6
  1496. #emit CONST.alt 0xFFFFFFFF
  1497. #emit STOR.S.pri ret
  1498. #emit JEQ hooks_do_hooks_call_no_als
  1499. }
  1500. // Get any remaining pointers the old way.
  1501. while (start++ != end)
  1502. {
  1503. idx = AMX_GetPublicPointer(idx, pointer, "@yH_PlayerEnterVehicle");
  1504. #emit PUSH.S ispassenger
  1505. #emit PUSH.S vehicleid
  1506. #emit PUSH.S playerid
  1507. #emit PUSH.C 12
  1508. #emit LCTRL 6
  1509. #emit ADD.C 28
  1510. #emit PUSH.pri
  1511. #emit LOAD.S.pri pointer
  1512. #emit SCTRL 6
  1513. #emit CONST.alt 0xFFFFFFFF
  1514. #emit STOR.S.pri ret
  1515. #emit JEQ hooks_do_hooks_call_no_als
  1516. }
  1517. // Do ALS just in case (YSI no longer uses this though now).
  1518. P:2("Hooks_OnPlayerEnterVehicle end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerEnterVehicle));
  1519. HOOK_RETURN<PlayerEnterVehicle>
  1520. }
  1521. #if defined _ALS_OnPlayerEnterVehicle
  1522. #undef OnPlayerEnterVehicle
  1523. #else
  1524. #define _ALS_OnPlayerEnterVehicle
  1525. #endif
  1526. #define OnPlayerEnterVehicle S@@_OnPlayerEnterVehicle
  1527. ALS_FORWARD<PlayerEnterVehicle>
  1528.  
  1529. public OnPlayerExitVehicle(playerid, vehicleid)
  1530. {
  1531. P:2("Hooks_OnPlayerExitVehicle called: %d, %d", playerid, vehicleid);
  1532. new
  1533. end = YSI_g_sCallbackData[ALS_OnPlayerExitVehicle][E_FUNC_HOOK_DATA_END],
  1534. start = YSI_g_sCallbackData[ALS_OnPlayerExitVehicle][E_FUNC_HOOK_DATA_START],
  1535. ret = ALS_R_PlayerExitVehicle;
  1536. if (start == end)
  1537. {
  1538. P:2("Hooks_OnPlayerExitVehicle end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerExitVehicle));
  1539. HOOK_CALL<PlayerExitVehicle>
  1540. }
  1541. new
  1542. idx,
  1543. pointer,
  1544. re = end;
  1545. if (end > sizeof (YSI_g_sCallbackAddresses))
  1546. {
  1547. re = sizeof (YSI_g_sCallbackAddresses);
  1548. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  1549. }
  1550. // Do the initial fast elements.
  1551. while (start != re)
  1552. {
  1553. pointer = YSI_g_sCallbackAddresses[start++];
  1554. #emit PUSH.S vehicleid
  1555. #emit PUSH.S playerid
  1556. #emit PUSH.C 8
  1557. #emit LCTRL 6
  1558. #emit ADD.C 28
  1559. #emit PUSH.pri
  1560. #emit LOAD.S.pri pointer
  1561. #emit SCTRL 6
  1562. #emit CONST.alt 0xFFFFFFFF
  1563. #emit STOR.S.pri ret
  1564. #emit JEQ hooks_do_hooks_call_no_als
  1565. }
  1566. // Get any remaining pointers the old way.
  1567. while (start++ != end)
  1568. {
  1569. idx = AMX_GetPublicPointer(idx, pointer, "@yH_PlayerExitVehicle");
  1570. #emit PUSH.S vehicleid
  1571. #emit PUSH.S playerid
  1572. #emit PUSH.C 8
  1573. #emit LCTRL 6
  1574. #emit ADD.C 28
  1575. #emit PUSH.pri
  1576. #emit LOAD.S.pri pointer
  1577. #emit SCTRL 6
  1578. #emit CONST.alt 0xFFFFFFFF
  1579. #emit STOR.S.pri ret
  1580. #emit JEQ hooks_do_hooks_call_no_als
  1581. }
  1582. // Do ALS just in case (YSI no longer uses this though now).
  1583. P:2("Hooks_OnPlayerExitVehicle end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerExitVehicle));
  1584. HOOK_RETURN<PlayerExitVehicle>
  1585. }
  1586. #if defined _ALS_OnPlayerExitVehicle
  1587. #undef OnPlayerExitVehicle
  1588. #else
  1589. #define _ALS_OnPlayerExitVehicle
  1590. #endif
  1591. #define OnPlayerExitVehicle S@@_OnPlayerExitVehicle
  1592. ALS_FORWARD<PlayerExitVehicle>
  1593.  
  1594. public OnPlayerStateChange(playerid, newstate, oldstate)
  1595. {
  1596. P:2("Hooks_OnPlayerStateChange called: %d, %d, %d", playerid, newstate, oldstate);
  1597. new
  1598. end = YSI_g_sCallbackData[ALS_OnPlayerStateChange][E_FUNC_HOOK_DATA_END],
  1599. start = YSI_g_sCallbackData[ALS_OnPlayerStateChange][E_FUNC_HOOK_DATA_START],
  1600. ret = ALS_R_PlayerStateChange;
  1601. if (start == end)
  1602. {
  1603. P:2("Hooks_OnPlayerStateChange end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerStateChange));
  1604. HOOK_CALL<PlayerStateChange>
  1605. }
  1606. new
  1607. idx,
  1608. pointer,
  1609. re = end;
  1610. if (end > sizeof (YSI_g_sCallbackAddresses))
  1611. {
  1612. re = sizeof (YSI_g_sCallbackAddresses);
  1613. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  1614. }
  1615. // Do the initial fast elements.
  1616. while (start != re)
  1617. {
  1618. pointer = YSI_g_sCallbackAddresses[start++];
  1619. #emit PUSH.S oldstate
  1620. #emit PUSH.S newstate
  1621. #emit PUSH.S playerid
  1622. #emit PUSH.C 12
  1623. #emit LCTRL 6
  1624. #emit ADD.C 28
  1625. #emit PUSH.pri
  1626. #emit LOAD.S.pri pointer
  1627. #emit SCTRL 6
  1628. #emit CONST.alt 0xFFFFFFFF
  1629. #emit STOR.S.pri ret
  1630. #emit JEQ hooks_do_hooks_call_no_als
  1631. }
  1632. // Get any remaining pointers the old way.
  1633. while (start++ != end)
  1634. {
  1635. idx = AMX_GetPublicPointer(idx, pointer, "@yH_PlayerStateChange");
  1636. #emit PUSH.S oldstate
  1637. #emit PUSH.S newstate
  1638. #emit PUSH.S playerid
  1639. #emit PUSH.C 12
  1640. #emit LCTRL 6
  1641. #emit ADD.C 28
  1642. #emit PUSH.pri
  1643. #emit LOAD.S.pri pointer
  1644. #emit SCTRL 6
  1645. #emit CONST.alt 0xFFFFFFFF
  1646. #emit STOR.S.pri ret
  1647. #emit JEQ hooks_do_hooks_call_no_als
  1648. }
  1649. // Do ALS just in case (YSI no longer uses this though now).
  1650. P:2("Hooks_OnPlayerStateChange end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerStateChange));
  1651. HOOK_RETURN<PlayerStateChange>
  1652. }
  1653. #if defined _ALS_OnPlayerStateChange
  1654. #undef OnPlayerStateChange
  1655. #else
  1656. #define _ALS_OnPlayerStateChange
  1657. #endif
  1658. #define OnPlayerStateChange S@@_OnPlayerStateChange
  1659. ALS_FORWARD<PlayerStateChange>
  1660.  
  1661. public OnPlayerEnterCheckpoint(playerid)
  1662. {
  1663. P:2("Hooks_OnPlayerEnterCheckpoint called: %d", playerid);
  1664. new
  1665. end = YSI_g_sCallbackData[ALS_OnPlayerEnterCheckpoint][E_FUNC_HOOK_DATA_END],
  1666. start = YSI_g_sCallbackData[ALS_OnPlayerEnterCheckpoint][E_FUNC_HOOK_DATA_START],
  1667. ret = ALS_R_PlayerEnterCheckpoint;
  1668. if (start == end)
  1669. {
  1670. P:2("Hooks_OnPlayerEnterCheckpoint end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerEnterCheckpoint));
  1671. HOOK_CALL<PlayerEnterCheckpoint>
  1672. }
  1673. new
  1674. idx,
  1675. pointer,
  1676. re = end;
  1677. if (end > sizeof (YSI_g_sCallbackAddresses))
  1678. {
  1679. re = sizeof (YSI_g_sCallbackAddresses);
  1680. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  1681. }
  1682. // Do the initial fast elements.
  1683. while (start != re)
  1684. {
  1685. pointer = YSI_g_sCallbackAddresses[start++];
  1686. #emit PUSH.S playerid
  1687. #emit PUSH.C 4
  1688. #emit LCTRL 6
  1689. #emit ADD.C 28
  1690. #emit PUSH.pri
  1691. #emit LOAD.S.pri pointer
  1692. #emit SCTRL 6
  1693. #emit CONST.alt 0xFFFFFFFF
  1694. #emit STOR.S.pri ret
  1695. #emit JEQ hooks_do_hooks_call_no_als
  1696. }
  1697. // Get any remaining pointers the old way.
  1698. while (start++ != end)
  1699. {
  1700. idx = AMX_GetPublicPointer(idx, pointer, "@yH_PlayerEnterCheckpoint");
  1701. #emit PUSH.S playerid
  1702. #emit PUSH.C 4
  1703. #emit LCTRL 6
  1704. #emit ADD.C 28
  1705. #emit PUSH.pri
  1706. #emit LOAD.S.pri pointer
  1707. #emit SCTRL 6
  1708. #emit CONST.alt 0xFFFFFFFF
  1709. #emit STOR.S.pri ret
  1710. #emit JEQ hooks_do_hooks_call_no_als
  1711. }
  1712. // Do ALS just in case (YSI no longer uses this though now).
  1713. P:2("Hooks_OnPlayerEnterCheckpoint end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerEnterCheckpoint));
  1714. HOOK_RETURN<PlayerEnterCheckpoint>
  1715. }
  1716. #if defined _ALS_OnPlayerEnterCheckpoint
  1717. #undef OnPlayerEnterCheckpoint
  1718. #else
  1719. #define _ALS_OnPlayerEnterCheckpoint
  1720. #endif
  1721. #define OnPlayerEnterCheckpoint S@@_OnPlayerEnterCheckpoint
  1722. ALS_FORWARD<PlayerEnterCheckpoint>
  1723.  
  1724. public OnPlayerLeaveCheckpoint(playerid)
  1725. {
  1726. P:2("Hooks_OnPlayerLeaveCheckpoint called: %d", playerid);
  1727. new
  1728. end = YSI_g_sCallbackData[ALS_OnPlayerLeaveCheckpoint][E_FUNC_HOOK_DATA_END],
  1729. start = YSI_g_sCallbackData[ALS_OnPlayerLeaveCheckpoint][E_FUNC_HOOK_DATA_START],
  1730. ret = ALS_R_PlayerLeaveCheckpoint;
  1731. if (start == end)
  1732. {
  1733. P:2("Hooks_OnPlayerLeaveCheckpoint end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerLeaveCheckpoint));
  1734. HOOK_CALL<PlayerLeaveCheckpoint>
  1735. }
  1736. new
  1737. idx,
  1738. pointer,
  1739. re = end;
  1740. if (end > sizeof (YSI_g_sCallbackAddresses))
  1741. {
  1742. re = sizeof (YSI_g_sCallbackAddresses);
  1743. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  1744. }
  1745. // Do the initial fast elements.
  1746. while (start != re)
  1747. {
  1748. pointer = YSI_g_sCallbackAddresses[start++];
  1749. #emit PUSH.S playerid
  1750. #emit PUSH.C 4
  1751. #emit LCTRL 6
  1752. #emit ADD.C 28
  1753. #emit PUSH.pri
  1754. #emit LOAD.S.pri pointer
  1755. #emit SCTRL 6
  1756. #emit CONST.alt 0xFFFFFFFF
  1757. #emit STOR.S.pri ret
  1758. #emit JEQ hooks_do_hooks_call_no_als
  1759. }
  1760. // Get any remaining pointers the old way.
  1761. while (start++ != end)
  1762. {
  1763. idx = AMX_GetPublicPointer(idx, pointer, "@yH_PlayerLeaveCheckpoint");
  1764. #emit PUSH.S playerid
  1765. #emit PUSH.C 4
  1766. #emit LCTRL 6
  1767. #emit ADD.C 28
  1768. #emit PUSH.pri
  1769. #emit LOAD.S.pri pointer
  1770. #emit SCTRL 6
  1771. #emit CONST.alt 0xFFFFFFFF
  1772. #emit STOR.S.pri ret
  1773. #emit JEQ hooks_do_hooks_call_no_als
  1774. }
  1775. // Do ALS just in case (YSI no longer uses this though now).
  1776. P:2("Hooks_OnPlayerLeaveCheckpoint end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerLeaveCheckpoint));
  1777. HOOK_RETURN<PlayerLeaveCheckpoint>
  1778. }
  1779. #if defined _ALS_OnPlayerLeaveCheckpoint
  1780. #undef OnPlayerLeaveCheckpoint
  1781. #else
  1782. #define _ALS_OnPlayerLeaveCheckpoint
  1783. #endif
  1784. #define OnPlayerLeaveCheckpoint S@@_OnPlayerLeaveCheckpoint
  1785. ALS_FORWARD<PlayerLeaveCheckpoint>
  1786.  
  1787. public OnPlayerEnterRaceCheckpoint(playerid)
  1788. {
  1789. P:2("Hooks_OnPlayerEnterRaceCheckpoint called: %d", playerid);
  1790. new
  1791. end = YSI_g_sCallbackData[ALS_OnPlayerEnterRaceCheckpoint][E_FUNC_HOOK_DATA_END],
  1792. start = YSI_g_sCallbackData[ALS_OnPlayerEnterRaceCheckpoint][E_FUNC_HOOK_DATA_START],
  1793. ret = ALS_R_PlayerEnterRaceCheckpoint;
  1794. if (start == end)
  1795. {
  1796. P:2("Hooks_OnPlayerEnterRaceCheckpoint end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerEnterRaceCheckpoint));
  1797. HOOK_CALL<PlayerEnterRaceCheckpoint>
  1798. }
  1799. new
  1800. idx,
  1801. pointer,
  1802. re = end;
  1803. if (end > sizeof (YSI_g_sCallbackAddresses))
  1804. {
  1805. re = sizeof (YSI_g_sCallbackAddresses);
  1806. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  1807. }
  1808. // Do the initial fast elements.
  1809. while (start != re)
  1810. {
  1811. pointer = YSI_g_sCallbackAddresses[start++];
  1812. #emit PUSH.S playerid
  1813. #emit PUSH.C 4
  1814. #emit LCTRL 6
  1815. #emit ADD.C 28
  1816. #emit PUSH.pri
  1817. #emit LOAD.S.pri pointer
  1818. #emit SCTRL 6
  1819. #emit CONST.alt 0xFFFFFFFF
  1820. #emit STOR.S.pri ret
  1821. #emit JEQ hooks_do_hooks_call_no_als
  1822. }
  1823. // Get any remaining pointers the old way.
  1824. while (start++ != end)
  1825. {
  1826. idx = AMX_GetPublicPointer(idx, pointer, "@yH_PlayerEnterRaceCheckpoint");
  1827. #emit PUSH.S playerid
  1828. #emit PUSH.C 4
  1829. #emit LCTRL 6
  1830. #emit ADD.C 28
  1831. #emit PUSH.pri
  1832. #emit LOAD.S.pri pointer
  1833. #emit SCTRL 6
  1834. #emit CONST.alt 0xFFFFFFFF
  1835. #emit STOR.S.pri ret
  1836. #emit JEQ hooks_do_hooks_call_no_als
  1837. }
  1838. // Do ALS just in case (YSI no longer uses this though now).
  1839. P:2("Hooks_OnPlayerEnterRaceCheckpoint end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerEnterRaceCheckpoint));
  1840. HOOK_RETURN<PlayerEnterRaceCheckpoint>
  1841. }
  1842. #if defined _ALS_OnPlayerEnterRaceCP
  1843. #undef OnPlayerEnterRaceCheckpoint
  1844. #else
  1845. #define _ALS_OnPlayerEnterRaceCP
  1846. #endif
  1847. #define OnPlayerEnterRaceCheckpoint S@@_OnPlayerEnterRaceCheckpoint
  1848. ALS_FORWARD<PlayerEnterRaceCheckpoint>
  1849.  
  1850. public OnPlayerLeaveRaceCheckpoint(playerid)
  1851. {
  1852. P:2("Hooks_OnPlayerLeaveRaceCheckpoint called: %d", playerid);
  1853. new
  1854. end = YSI_g_sCallbackData[ALS_OnPlayerLeaveRaceCheckpoint][E_FUNC_HOOK_DATA_END],
  1855. start = YSI_g_sCallbackData[ALS_OnPlayerLeaveRaceCheckpoint][E_FUNC_HOOK_DATA_START],
  1856. ret = ALS_R_PlayerLeaveRaceCheckpoint;
  1857. if (start == end)
  1858. {
  1859. P:2("Hooks_OnPlayerLeaveRaceCheckpoint end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerLeaveRaceCheckpoint));
  1860. HOOK_CALL<PlayerLeaveRaceCheckpoint>
  1861. }
  1862. new
  1863. idx,
  1864. pointer,
  1865. re = end;
  1866. if (end > sizeof (YSI_g_sCallbackAddresses))
  1867. {
  1868. re = sizeof (YSI_g_sCallbackAddresses);
  1869. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  1870. }
  1871. // Do the initial fast elements.
  1872. while (start != re)
  1873. {
  1874. pointer = YSI_g_sCallbackAddresses[start++];
  1875. #emit PUSH.S playerid
  1876. #emit PUSH.C 4
  1877. #emit LCTRL 6
  1878. #emit ADD.C 28
  1879. #emit PUSH.pri
  1880. #emit LOAD.S.pri pointer
  1881. #emit SCTRL 6
  1882. #emit CONST.alt 0xFFFFFFFF
  1883. #emit STOR.S.pri ret
  1884. #emit JEQ hooks_do_hooks_call_no_als
  1885. }
  1886. // Get any remaining pointers the old way.
  1887. while (start++ != end)
  1888. {
  1889. idx = AMX_GetPublicPointer(idx, pointer, "@yH_PlayerLeaveRaceCheckpoint");
  1890. #emit PUSH.S playerid
  1891. #emit PUSH.C 4
  1892. #emit LCTRL 6
  1893. #emit ADD.C 28
  1894. #emit PUSH.pri
  1895. #emit LOAD.S.pri pointer
  1896. #emit SCTRL 6
  1897. #emit CONST.alt 0xFFFFFFFF
  1898. #emit STOR.S.pri ret
  1899. #emit JEQ hooks_do_hooks_call_no_als
  1900. }
  1901. // Do ALS just in case (YSI no longer uses this though now).
  1902. P:2("Hooks_OnPlayerLeaveRaceCheckpoint end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerLeaveRaceCheckpoint));
  1903. HOOK_RETURN<PlayerLeaveRaceCheckpoint>
  1904. }
  1905. #if defined _ALS_OnPlayerLeaveRaceCP
  1906. #undef OnPlayerLeaveRaceCheckpoint
  1907. #else
  1908. #define _ALS_OnPlayerLeaveRaceCP
  1909. #endif
  1910. #define OnPlayerLeaveRaceCheckpoint S@@_OnPlayerLeaveRaceCheckpoint
  1911. ALS_FORWARD<PlayerLeaveRaceCheckpoint>
  1912.  
  1913. public OnRconCommand(cmd[])
  1914. {
  1915. P:2("Hooks_OnRconCommand called: \"%s\"", cmd);
  1916. new
  1917. end = YSI_g_sCallbackData[ALS_OnRconCommand][E_FUNC_HOOK_DATA_END],
  1918. start = YSI_g_sCallbackData[ALS_OnRconCommand][E_FUNC_HOOK_DATA_START],
  1919. ret = ALS_R_RconCommand;
  1920. if (start == end)
  1921. {
  1922. P:2("Hooks_OnRconCommand end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnRconCommand));
  1923. HOOK_CALL<RconCommand>
  1924. }
  1925. new
  1926. idx,
  1927. pointer,
  1928. re = end;
  1929. if (end > sizeof (YSI_g_sCallbackAddresses))
  1930. {
  1931. re = sizeof (YSI_g_sCallbackAddresses);
  1932. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  1933. }
  1934. // Do the initial fast elements.
  1935. while (start != re)
  1936. {
  1937. pointer = YSI_g_sCallbackAddresses[start++];
  1938. #emit PUSH.S cmd
  1939. #emit PUSH.C 4
  1940. #emit LCTRL 6
  1941. #emit ADD.C 28
  1942. #emit PUSH.pri
  1943. #emit LOAD.S.pri pointer
  1944. #emit SCTRL 6
  1945. #emit CONST.alt 0xFFFFFFFF
  1946. #emit STOR.S.pri ret
  1947. #emit JEQ hooks_do_hooks_call_no_als
  1948. }
  1949. // Get any remaining pointers the old way.
  1950. while (start++ != end)
  1951. {
  1952. idx = AMX_GetPublicPointer(idx, pointer, "@yH_RconCommand");
  1953. #emit PUSH.S cmd
  1954. #emit PUSH.C 4
  1955. #emit LCTRL 6
  1956. #emit ADD.C 28
  1957. #emit PUSH.pri
  1958. #emit LOAD.S.pri pointer
  1959. #emit SCTRL 6
  1960. #emit CONST.alt 0xFFFFFFFF
  1961. #emit STOR.S.pri ret
  1962. #emit JEQ hooks_do_hooks_call_no_als
  1963. }
  1964. // Do ALS just in case (YSI no longer uses this though now).
  1965. P:2("Hooks_OnRconCommand end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnRconCommand));
  1966. HOOK_RETURN<RconCommand>
  1967. }
  1968. #if defined _ALS_OnRconCommand
  1969. #undef OnRconCommand
  1970. #else
  1971. #define _ALS_OnRconCommand
  1972. #endif
  1973. #define OnRconCommand S@@_OnRconCommand
  1974. ALS_FORWARD<RconCommand>
  1975.  
  1976. public OnPlayerRequestSpawn(playerid)
  1977. {
  1978. P:2("Hooks_OnPlayerRequestSpawn called: %d", playerid);
  1979. new
  1980. end = YSI_g_sCallbackData[ALS_OnPlayerRequestSpawn][E_FUNC_HOOK_DATA_END],
  1981. start = YSI_g_sCallbackData[ALS_OnPlayerRequestSpawn][E_FUNC_HOOK_DATA_START],
  1982. ret = ALS_R_PlayerRequestSpawn;
  1983. if (start == end)
  1984. {
  1985. P:2("Hooks_OnPlayerRequestSpawn end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerRequestSpawn));
  1986. HOOK_CALL<PlayerRequestSpawn>
  1987. }
  1988. new
  1989. idx,
  1990. pointer,
  1991. re = end;
  1992. if (end > sizeof (YSI_g_sCallbackAddresses))
  1993. {
  1994. re = sizeof (YSI_g_sCallbackAddresses);
  1995. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  1996. }
  1997. // Do the initial fast elements.
  1998. while (start != re)
  1999. {
  2000. pointer = YSI_g_sCallbackAddresses[start++];
  2001. #emit PUSH.S playerid
  2002. #emit PUSH.C 4
  2003. #emit LCTRL 6
  2004. #emit ADD.C 28
  2005. #emit PUSH.pri
  2006. #emit LOAD.S.pri pointer
  2007. #emit SCTRL 6
  2008. #emit CONST.alt 0xFFFFFFFF
  2009. #emit STOR.S.pri ret
  2010. #emit JEQ hooks_do_hooks_call_no_als
  2011. }
  2012. // Get any remaining pointers the old way.
  2013. while (start++ != end)
  2014. {
  2015. idx = AMX_GetPublicPointer(idx, pointer, "@yH_PlayerRequestSpawn");
  2016. #emit PUSH.S playerid
  2017. #emit PUSH.C 4
  2018. #emit LCTRL 6
  2019. #emit ADD.C 28
  2020. #emit PUSH.pri
  2021. #emit LOAD.S.pri pointer
  2022. #emit SCTRL 6
  2023. #emit CONST.alt 0xFFFFFFFF
  2024. #emit STOR.S.pri ret
  2025. #emit JEQ hooks_do_hooks_call_no_als
  2026. }
  2027. // Do ALS just in case (YSI no longer uses this though now).
  2028. P:2("Hooks_OnPlayerRequestSpawn end: %d %d", _:Bit_GetBit(Bit:gs_ALS,_:ALS_OnPlayerRequestSpawn), ret);
  2029. HOOK_RETURN<PlayerRequestSpawn>
  2030. }
  2031. #if defined _ALS_OnPlayerRequestSpawn
  2032. #undef OnPlayerRequestSpawn
  2033. #else
  2034. #define _ALS_OnPlayerRequestSpawn
  2035. #endif
  2036. #define OnPlayerRequestSpawn S@@_OnPlayerRequestSpawn
  2037. ALS_FORWARD<PlayerRequestSpawn>
  2038.  
  2039. public OnObjectMoved(objectid)
  2040. {
  2041. P:2("Hooks_OnObjectMoved called: %d", objectid);
  2042. new
  2043. end = YSI_g_sCallbackData[ALS_OnObjectMoved][E_FUNC_HOOK_DATA_END],
  2044. start = YSI_g_sCallbackData[ALS_OnObjectMoved][E_FUNC_HOOK_DATA_START],
  2045. ret = ALS_R_ObjectMoved;
  2046. if (start == end)
  2047. {
  2048. P:2("Hooks_OnObjectMoved end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnObjectMoved));
  2049. HOOK_CALL<ObjectMoved>
  2050. }
  2051. new
  2052. idx,
  2053. pointer,
  2054. re = end;
  2055. if (end > sizeof (YSI_g_sCallbackAddresses))
  2056. {
  2057. re = sizeof (YSI_g_sCallbackAddresses);
  2058. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  2059. }
  2060. // Do the initial fast elements.
  2061. while (start != re)
  2062. {
  2063. pointer = YSI_g_sCallbackAddresses[start++];
  2064. #emit PUSH.S objectid
  2065. #emit PUSH.C 4
  2066. #emit LCTRL 6
  2067. #emit ADD.C 28
  2068. #emit PUSH.pri
  2069. #emit LOAD.S.pri pointer
  2070. #emit SCTRL 6
  2071. #emit CONST.alt 0xFFFFFFFF
  2072. #emit STOR.S.pri ret
  2073. #emit JEQ hooks_do_hooks_call_no_als
  2074. }
  2075. // Get any remaining pointers the old way.
  2076. while (start++ != end)
  2077. {
  2078. idx = AMX_GetPublicPointer(idx, pointer, "@yH_ObjectMoved");
  2079. #emit PUSH.S objectid
  2080. #emit PUSH.C 4
  2081. #emit LCTRL 6
  2082. #emit ADD.C 28
  2083. #emit PUSH.pri
  2084. #emit LOAD.S.pri pointer
  2085. #emit SCTRL 6
  2086. #emit CONST.alt 0xFFFFFFFF
  2087. #emit STOR.S.pri ret
  2088. #emit JEQ hooks_do_hooks_call_no_als
  2089. }
  2090. // Do ALS just in case (YSI no longer uses this though now).
  2091. P:2("Hooks_OnObjectMoved end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnObjectMoved));
  2092. HOOK_RETURN<ObjectMoved>
  2093. }
  2094. #if defined _ALS_OnObjectMoved
  2095. #undef OnObjectMoved
  2096. #else
  2097. #define _ALS_OnObjectMoved
  2098. #endif
  2099. #define OnObjectMoved S@@_OnObjectMoved
  2100. ALS_FORWARD<ObjectMoved>
  2101.  
  2102. public OnPlayerObjectMoved(playerid, objectid)
  2103. {
  2104. P:2("Hooks_OnPlayerObjectMoved called: %d, %d", playerid, objectid);
  2105. new
  2106. end = YSI_g_sCallbackData[ALS_OnPlayerObjectMoved][E_FUNC_HOOK_DATA_END],
  2107. start = YSI_g_sCallbackData[ALS_OnPlayerObjectMoved][E_FUNC_HOOK_DATA_START],
  2108. ret = ALS_R_PlayerObjectMoved;
  2109. if (start == end)
  2110. {
  2111. P:2("Hooks_OnPlayerObjectMoved end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerObjectMoved));
  2112. HOOK_CALL<PlayerObjectMoved>
  2113. }
  2114. new
  2115. idx,
  2116. pointer,
  2117. re = end;
  2118. if (end > sizeof (YSI_g_sCallbackAddresses))
  2119. {
  2120. re = sizeof (YSI_g_sCallbackAddresses);
  2121. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  2122. }
  2123. // Do the initial fast elements.
  2124. while (start != re)
  2125. {
  2126. pointer = YSI_g_sCallbackAddresses[start++];
  2127. #emit PUSH.S objectid
  2128. #emit PUSH.S playerid
  2129. #emit PUSH.C 8
  2130. #emit LCTRL 6
  2131. #emit ADD.C 28
  2132. #emit PUSH.pri
  2133. #emit LOAD.S.pri pointer
  2134. #emit SCTRL 6
  2135. #emit CONST.alt 0xFFFFFFFF
  2136. #emit STOR.S.pri ret
  2137. #emit JEQ hooks_do_hooks_call_no_als
  2138. }
  2139. // Get any remaining pointers the old way.
  2140. while (start++ != end)
  2141. {
  2142. idx = AMX_GetPublicPointer(idx, pointer, "@yH_PlayerObjectMoved");
  2143. #emit PUSH.S objectid
  2144. #emit PUSH.S playerid
  2145. #emit PUSH.C 8
  2146. #emit LCTRL 6
  2147. #emit ADD.C 28
  2148. #emit PUSH.pri
  2149. #emit LOAD.S.pri pointer
  2150. #emit SCTRL 6
  2151. #emit CONST.alt 0xFFFFFFFF
  2152. #emit STOR.S.pri ret
  2153. #emit JEQ hooks_do_hooks_call_no_als
  2154. }
  2155. // Do ALS just in case (YSI no longer uses this though now).
  2156. P:2("Hooks_OnPlayerObjectMoved end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerObjectMoved));
  2157. HOOK_RETURN<PlayerObjectMoved>
  2158. }
  2159. #if defined _ALS_OnPlayerObjectMoved
  2160. #undef OnPlayerObjectMoved
  2161. #else
  2162. #define _ALS_OnPlayerObjectMoved
  2163. #endif
  2164. #define OnPlayerObjectMoved S@@_OnPlayerObjectMoved
  2165. ALS_FORWARD<PlayerObjectMoved>
  2166.  
  2167. public OnPlayerPickUpPickup(playerid, pickupid)
  2168. {
  2169. P:2("Hooks_OnPlayerPickUpPickup called: %d, %d", playerid, pickupid);
  2170. new
  2171. end = YSI_g_sCallbackData[ALS_OnPlayerPickUpPickup][E_FUNC_HOOK_DATA_END],
  2172. start = YSI_g_sCallbackData[ALS_OnPlayerPickUpPickup][E_FUNC_HOOK_DATA_START],
  2173. ret = ALS_R_PlayerPickUpPickup;
  2174. if (start == end)
  2175. {
  2176. P:2("Hooks_OnPlayerPickUpPickup end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerPickUpPickup));
  2177. HOOK_CALL<PlayerPickUpPickup>
  2178. }
  2179. new
  2180. idx,
  2181. pointer,
  2182. re = end;
  2183. if (end > sizeof (YSI_g_sCallbackAddresses))
  2184. {
  2185. re = sizeof (YSI_g_sCallbackAddresses);
  2186. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  2187. }
  2188. // Do the initial fast elements.
  2189. while (start != re)
  2190. {
  2191. pointer = YSI_g_sCallbackAddresses[start++];
  2192. #emit PUSH.S pickupid
  2193. #emit PUSH.S playerid
  2194. #emit PUSH.C 8
  2195. #emit LCTRL 6
  2196. #emit ADD.C 28
  2197. #emit PUSH.pri
  2198. #emit LOAD.S.pri pointer
  2199. #emit SCTRL 6
  2200. #emit CONST.alt 0xFFFFFFFF
  2201. #emit STOR.S.pri ret
  2202. #emit JEQ hooks_do_hooks_call_no_als
  2203. }
  2204. // Get any remaining pointers the old way.
  2205. while (start++ != end)
  2206. {
  2207. idx = AMX_GetPublicPointer(idx, pointer, "@yH_PlayerPickUpPickup");
  2208. #emit PUSH.S pickupid
  2209. #emit PUSH.S playerid
  2210. #emit PUSH.C 8
  2211. #emit LCTRL 6
  2212. #emit ADD.C 28
  2213. #emit PUSH.pri
  2214. #emit LOAD.S.pri pointer
  2215. #emit SCTRL 6
  2216. #emit CONST.alt 0xFFFFFFFF
  2217. #emit STOR.S.pri ret
  2218. #emit JEQ hooks_do_hooks_call_no_als
  2219. }
  2220. // Do ALS just in case (YSI no longer uses this though now).
  2221. P:2("Hooks_OnPlayerPickUpPickup end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerPickUpPickup));
  2222. HOOK_RETURN<PlayerPickUpPickup>
  2223. }
  2224. #if defined _ALS_OnPlayerPickUpPickup
  2225. #undef OnPlayerPickUpPickup
  2226. #else
  2227. #define _ALS_OnPlayerPickUpPickup
  2228. #endif
  2229. #define OnPlayerPickUpPickup S@@_OnPlayerPickUpPickup
  2230. ALS_FORWARD<PlayerPickUpPickup>
  2231.  
  2232. public OnVehicleMod(playerid, vehicleid, componentid)
  2233. {
  2234. P:2("Hooks_OnVehicleMod called: %d, %d, %d", playerid, vehicleid, componentid);
  2235. new
  2236. end = YSI_g_sCallbackData[ALS_OnVehicleMod][E_FUNC_HOOK_DATA_END],
  2237. start = YSI_g_sCallbackData[ALS_OnVehicleMod][E_FUNC_HOOK_DATA_START],
  2238. ret = ALS_R_VehicleMod;
  2239. if (start == end)
  2240. {
  2241. P:2("Hooks_OnVehicleMod end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnVehicleMod));
  2242. HOOK_CALL<VehicleMod>
  2243. }
  2244. new
  2245. idx,
  2246. pointer,
  2247. re = end;
  2248. if (end > sizeof (YSI_g_sCallbackAddresses))
  2249. {
  2250. re = sizeof (YSI_g_sCallbackAddresses);
  2251. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  2252. }
  2253. // Do the initial fast elements.
  2254. while (start != re)
  2255. {
  2256. pointer = YSI_g_sCallbackAddresses[start++];
  2257. #emit PUSH.S componentid
  2258. #emit PUSH.S vehicleid
  2259. #emit PUSH.S playerid
  2260. #emit PUSH.C 12
  2261. #emit LCTRL 6
  2262. #emit ADD.C 28
  2263. #emit PUSH.pri
  2264. #emit LOAD.S.pri pointer
  2265. #emit SCTRL 6
  2266. #emit CONST.alt 0xFFFFFFFF
  2267. #emit STOR.S.pri ret
  2268. #emit JEQ hooks_do_hooks_call_no_als
  2269. }
  2270. // Get any remaining pointers the old way.
  2271. while (start++ != end)
  2272. {
  2273. idx = AMX_GetPublicPointer(idx, pointer, "@yH_VehicleMod");
  2274. #emit PUSH.S componentid
  2275. #emit PUSH.S vehicleid
  2276. #emit PUSH.S playerid
  2277. #emit PUSH.C 12
  2278. #emit LCTRL 6
  2279. #emit ADD.C 28
  2280. #emit PUSH.pri
  2281. #emit LOAD.S.pri pointer
  2282. #emit SCTRL 6
  2283. #emit CONST.alt 0xFFFFFFFF
  2284. #emit STOR.S.pri ret
  2285. #emit JEQ hooks_do_hooks_call_no_als
  2286. }
  2287. // Do ALS just in case (YSI no longer uses this though now).
  2288. P:2("Hooks_OnVehicleMod end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnVehicleMod));
  2289. HOOK_RETURN<VehicleMod>
  2290. }
  2291. #if defined _ALS_OnVehicleMod
  2292. #undef OnVehicleMod
  2293. #else
  2294. #define _ALS_OnVehicleMod
  2295. #endif
  2296. #define OnVehicleMod S@@_OnVehicleMod
  2297. ALS_FORWARD<VehicleMod>
  2298.  
  2299. public OnEnterExitModShop(playerid, enterexit, interiorid)
  2300. {
  2301. P:2("Hooks_OnEnterExitModShop called: %d, %d, %d", playerid, enterexit, interiorid);
  2302. new
  2303. end = YSI_g_sCallbackData[ALS_OnEnterExitModShop][E_FUNC_HOOK_DATA_END],
  2304. start = YSI_g_sCallbackData[ALS_OnEnterExitModShop][E_FUNC_HOOK_DATA_START],
  2305. ret = ALS_R_EnterExitModShop;
  2306. if (start == end)
  2307. {
  2308. P:2("Hooks_OnEnterExitModShop end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnEnterExitModShop));
  2309. HOOK_CALL<EnterExitModShop>
  2310. }
  2311. new
  2312. idx,
  2313. pointer,
  2314. re = end;
  2315. if (end > sizeof (YSI_g_sCallbackAddresses))
  2316. {
  2317. re = sizeof (YSI_g_sCallbackAddresses);
  2318. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  2319. }
  2320. // Do the initial fast elements.
  2321. while (start != re)
  2322. {
  2323. pointer = YSI_g_sCallbackAddresses[start++];
  2324. #emit PUSH.S interiorid
  2325. #emit PUSH.S enterexit
  2326. #emit PUSH.S playerid
  2327. #emit PUSH.C 12
  2328. #emit LCTRL 6
  2329. #emit ADD.C 28
  2330. #emit PUSH.pri
  2331. #emit LOAD.S.pri pointer
  2332. #emit SCTRL 6
  2333. #emit CONST.alt 0xFFFFFFFF
  2334. #emit STOR.S.pri ret
  2335. #emit JEQ hooks_do_hooks_call_no_als
  2336. }
  2337. // Get any remaining pointers the old way.
  2338. while (start++ != end)
  2339. {
  2340. idx = AMX_GetPublicPointer(idx, pointer, "@yH_EnterExitModShop");
  2341. #emit PUSH.S interiorid
  2342. #emit PUSH.S enterexit
  2343. #emit PUSH.S playerid
  2344. #emit PUSH.C 12
  2345. #emit LCTRL 6
  2346. #emit ADD.C 28
  2347. #emit PUSH.pri
  2348. #emit LOAD.S.pri pointer
  2349. #emit SCTRL 6
  2350. #emit CONST.alt 0xFFFFFFFF
  2351. #emit STOR.S.pri ret
  2352. #emit JEQ hooks_do_hooks_call_no_als
  2353. }
  2354. // Do ALS just in case (YSI no longer uses this though now).
  2355. P:2("Hooks_OnEnterExitModShop end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnEnterExitModShop));
  2356. HOOK_RETURN<EnterExitModShop>
  2357. }
  2358. #if defined _ALS_OnEnterExitModShop
  2359. #undef OnEnterExitModShop
  2360. #else
  2361. #define _ALS_OnEnterExitModShop
  2362. #endif
  2363. #define OnEnterExitModShop S@@_OnEnterExitModShop
  2364. ALS_FORWARD<EnterExitModShop>
  2365.  
  2366. public OnVehiclePaintjob(playerid, vehicleid, paintjobid)
  2367. {
  2368. P:2("Hooks_OnVehiclePaintjob called: %d, %d, %d", playerid, vehicleid, paintjobid);
  2369. new
  2370. end = YSI_g_sCallbackData[ALS_OnVehiclePaintjob][E_FUNC_HOOK_DATA_END],
  2371. start = YSI_g_sCallbackData[ALS_OnVehiclePaintjob][E_FUNC_HOOK_DATA_START],
  2372. ret = ALS_R_VehiclePaintjob;
  2373. if (start == end)
  2374. {
  2375. P:2("Hooks_OnVehiclePaintjob end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnVehiclePaintjob));
  2376. HOOK_CALL<VehiclePaintjob>
  2377. }
  2378. new
  2379. idx,
  2380. pointer,
  2381. re = end;
  2382. if (end > sizeof (YSI_g_sCallbackAddresses))
  2383. {
  2384. re = sizeof (YSI_g_sCallbackAddresses);
  2385. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  2386. }
  2387. // Do the initial fast elements.
  2388. while (start != re)
  2389. {
  2390. pointer = YSI_g_sCallbackAddresses[start++];
  2391. #emit PUSH.S paintjobid
  2392. #emit PUSH.S vehicleid
  2393. #emit PUSH.S playerid
  2394. #emit PUSH.C 12
  2395. #emit LCTRL 6
  2396. #emit ADD.C 28
  2397. #emit PUSH.pri
  2398. #emit LOAD.S.pri pointer
  2399. #emit SCTRL 6
  2400. #emit CONST.alt 0xFFFFFFFF
  2401. #emit STOR.S.pri ret
  2402. #emit JEQ hooks_do_hooks_call_no_als
  2403. }
  2404. // Get any remaining pointers the old way.
  2405. while (start++ != end)
  2406. {
  2407. idx = AMX_GetPublicPointer(idx, pointer, "@yH_VehiclePaintjob");
  2408. #emit PUSH.S paintjobid
  2409. #emit PUSH.S vehicleid
  2410. #emit PUSH.S playerid
  2411. #emit PUSH.C 12
  2412. #emit LCTRL 6
  2413. #emit ADD.C 28
  2414. #emit PUSH.pri
  2415. #emit LOAD.S.pri pointer
  2416. #emit SCTRL 6
  2417. #emit CONST.alt 0xFFFFFFFF
  2418. #emit STOR.S.pri ret
  2419. #emit JEQ hooks_do_hooks_call_no_als
  2420. }
  2421. // Do ALS just in case (YSI no longer uses this though now).
  2422. P:2("Hooks_OnVehiclePaintjob end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnVehiclePaintjob));
  2423. HOOK_RETURN<VehiclePaintjob>
  2424. }
  2425. #if defined _ALS_OnVehiclePaintjob
  2426. #undef OnVehiclePaintjob
  2427. #else
  2428. #define _ALS_OnVehiclePaintjob
  2429. #endif
  2430. #define OnVehiclePaintjob S@@_OnVehiclePaintjob
  2431. ALS_FORWARD<VehiclePaintjob>
  2432.  
  2433. public OnVehicleRespray(playerid, vehicleid, color1, color2)
  2434. {
  2435. P:2("Hooks_OnVehicleRespray called: %d, %d, %d, %d", playerid, vehicleid, color1, color2);
  2436. new
  2437. end = YSI_g_sCallbackData[ALS_OnVehicleRespray][E_FUNC_HOOK_DATA_END],
  2438. start = YSI_g_sCallbackData[ALS_OnVehicleRespray][E_FUNC_HOOK_DATA_START],
  2439. ret = ALS_R_VehicleRespray;
  2440. if (start == end)
  2441. {
  2442. P:2("Hooks_OnVehicleRespray end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnVehicleRespray));
  2443. HOOK_CALL<VehicleRespray>
  2444. }
  2445. new
  2446. idx,
  2447. pointer,
  2448. re = end;
  2449. if (end > sizeof (YSI_g_sCallbackAddresses))
  2450. {
  2451. re = sizeof (YSI_g_sCallbackAddresses);
  2452. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  2453. }
  2454. // Do the initial fast elements.
  2455. while (start != re)
  2456. {
  2457. pointer = YSI_g_sCallbackAddresses[start++];
  2458. #emit PUSH.S color2
  2459. #emit PUSH.S color1
  2460. #emit PUSH.S vehicleid
  2461. #emit PUSH.S playerid
  2462. #emit PUSH.C 16
  2463. #emit LCTRL 6
  2464. #emit ADD.C 28
  2465. #emit PUSH.pri
  2466. #emit LOAD.S.pri pointer
  2467. #emit SCTRL 6
  2468. #emit CONST.alt 0xFFFFFFFF
  2469. #emit STOR.S.pri ret
  2470. #emit JEQ hooks_do_hooks_call_no_als
  2471. }
  2472. // Get any remaining pointers the old way.
  2473. while (start++ != end)
  2474. {
  2475. idx = AMX_GetPublicPointer(idx, pointer, "@yH_VehicleRespray");
  2476. #emit PUSH.S color2
  2477. #emit PUSH.S color1
  2478. #emit PUSH.S vehicleid
  2479. #emit PUSH.S playerid
  2480. #emit PUSH.C 16
  2481. #emit LCTRL 6
  2482. #emit ADD.C 28
  2483. #emit PUSH.pri
  2484. #emit LOAD.S.pri pointer
  2485. #emit SCTRL 6
  2486. #emit CONST.alt 0xFFFFFFFF
  2487. #emit STOR.S.pri ret
  2488. #emit JEQ hooks_do_hooks_call_no_als
  2489. }
  2490. // Do ALS just in case (YSI no longer uses this though now).
  2491. P:2("Hooks_OnVehicleRespray end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnVehicleRespray));
  2492. HOOK_RETURN<VehicleRespray>
  2493. }
  2494. #if defined _ALS_OnVehicleRespray
  2495. #undef OnVehicleRespray
  2496. #else
  2497. #define _ALS_OnVehicleRespray
  2498. #endif
  2499. #define OnVehicleRespray S@@_OnVehicleRespray
  2500. ALS_FORWARD<VehicleRespray>
  2501.  
  2502. public OnVehicleDamageStatusUpdate(vehicleid, playerid)
  2503. {
  2504. P:2("Hooks_OnVehicleDamageStatusUpdate called: %d, %d", vehicleid, playerid);
  2505. new
  2506. end = YSI_g_sCallbackData[ALS_OnVehicleDamageStatusUpdate][E_FUNC_HOOK_DATA_END],
  2507. start = YSI_g_sCallbackData[ALS_OnVehicleDamageStatusUpdate][E_FUNC_HOOK_DATA_START],
  2508. ret = ALS_R_VehicleDamageStatusUpdate;
  2509. if (start == end)
  2510. {
  2511. P:2("Hooks_OnVehicleDamageStatusUpdate end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnVehicleDamageStatusUpdate));
  2512. HOOK_CALL<VehicleDamageStatusUpdate>
  2513. }
  2514. new
  2515. idx,
  2516. pointer,
  2517. re = end;
  2518. if (end > sizeof (YSI_g_sCallbackAddresses))
  2519. {
  2520. re = sizeof (YSI_g_sCallbackAddresses);
  2521. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  2522. }
  2523. // Do the initial fast elements.
  2524. while (start != re)
  2525. {
  2526. pointer = YSI_g_sCallbackAddresses[start++];
  2527. #emit PUSH.S playerid
  2528. #emit PUSH.S vehicleid
  2529. #emit PUSH.C 8
  2530. #emit LCTRL 6
  2531. #emit ADD.C 28
  2532. #emit PUSH.pri
  2533. #emit LOAD.S.pri pointer
  2534. #emit SCTRL 6
  2535. #emit CONST.alt 0xFFFFFFFF
  2536. #emit STOR.S.pri ret
  2537. #emit JEQ hooks_do_hooks_call_no_als
  2538. }
  2539. // Get any remaining pointers the old way.
  2540. while (start++ != end)
  2541. {
  2542. idx = AMX_GetPublicPointer(idx, pointer, "@yH_VehicleDamageStatusUpdate");
  2543. #emit PUSH.S playerid
  2544. #emit PUSH.S vehicleid
  2545. #emit PUSH.C 8
  2546. #emit LCTRL 6
  2547. #emit ADD.C 28
  2548. #emit PUSH.pri
  2549. #emit LOAD.S.pri pointer
  2550. #emit SCTRL 6
  2551. #emit CONST.alt 0xFFFFFFFF
  2552. #emit STOR.S.pri ret
  2553. #emit JEQ hooks_do_hooks_call_no_als
  2554. }
  2555. // Do ALS just in case (YSI no longer uses this though now).
  2556. P:2("Hooks_OnVehicleDamageStatusUpdate end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnVehicleDamageStatusUpdate));
  2557. HOOK_RETURN<VehicleDamageStatusUpdate>
  2558. }
  2559. #if defined _ALS_OnVehicleDamageStatusUpd
  2560. #undef OnVehicleDamageStatusUpdate
  2561. #else
  2562. #define _ALS_OnVehicleDamageStatusUpd
  2563. #endif
  2564. #define OnVehicleDamageStatusUpdate S@@_OnVehicleDamageStatusUpdate
  2565. ALS_FORWARD<VehicleDamageStatusUpdate>
  2566.  
  2567. public OnUnoccupiedVehicleUpdate(vehicleid, playerid, passenger_seat)
  2568. {
  2569. P:2("Hooks_OnUnoccupiedVehicleUpdate called: %d, %d, %d", vehicleid, playerid, passenger_seat);
  2570. new
  2571. end = YSI_g_sCallbackData[ALS_OnUnoccupiedVehicleUpdate][E_FUNC_HOOK_DATA_END],
  2572. start = YSI_g_sCallbackData[ALS_OnUnoccupiedVehicleUpdate][E_FUNC_HOOK_DATA_START],
  2573. ret = ALS_R_UnoccupiedVehicleUpdate;
  2574. if (start == end)
  2575. {
  2576. P:2("Hooks_OnUnoccupiedVehicleUpdate end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnUnoccupiedVehicleUpdate));
  2577. HOOK_CALL<UnoccupiedVehicleUpdate>
  2578. }
  2579. new
  2580. idx,
  2581. pointer,
  2582. re = end;
  2583. if (end > sizeof (YSI_g_sCallbackAddresses))
  2584. {
  2585. re = sizeof (YSI_g_sCallbackAddresses);
  2586. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  2587. }
  2588. // Do the initial fast elements.
  2589. while (start != re)
  2590. {
  2591. pointer = YSI_g_sCallbackAddresses[start++];
  2592. #emit PUSH.S passenger_seat
  2593. #emit PUSH.S playerid
  2594. #emit PUSH.S vehicleid
  2595. // I wonder if I could hack the stack with a negative number so that when
  2596. // the called function returns it puts all the header data BACK on to the
  2597. // stack instead of removing the parameters and header.
  2598. #emit PUSH.C 12
  2599. #emit LCTRL 6
  2600. #emit ADD.C 28
  2601. #emit PUSH.pri
  2602. #emit LOAD.S.pri pointer
  2603. #emit SCTRL 6
  2604. #emit CONST.alt 0xFFFFFFFF
  2605. #emit STOR.S.pri ret
  2606. #emit JEQ hooks_do_hooks_call_no_als
  2607. }
  2608. // Get any remaining pointers the old way.
  2609. while (start++ != end)
  2610. {
  2611. idx = AMX_GetPublicPointer(idx, pointer, "@yH_UnoccupiedVehicleUpdate");
  2612. #emit PUSH.S passenger_seat
  2613. #emit PUSH.S playerid
  2614. #emit PUSH.S vehicleid
  2615. #emit PUSH.C 12
  2616. #emit LCTRL 6
  2617. #emit ADD.C 28
  2618. #emit PUSH.pri
  2619. #emit LOAD.S.pri pointer
  2620. #emit SCTRL 6
  2621. #emit CONST.alt 0xFFFFFFFF
  2622. #emit STOR.S.pri ret
  2623. #emit JEQ hooks_do_hooks_call_no_als
  2624. }
  2625. // Do ALS just in case (YSI no longer uses this though now).
  2626. P:2("Hooks_OnUnoccupiedVehicleUpdate end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnUnoccupiedVehicleUpdate));
  2627. HOOK_RETURN<UnoccupiedVehicleUpdate>
  2628. }
  2629. #if defined _ALS_OnUnoccupiedVehicleUpdate
  2630. #undef OnUnoccupiedVehicleUpdate
  2631. #else
  2632. #define _ALS_OnUnoccupiedVehicleUpdate
  2633. #endif
  2634. #define OnUnoccupiedVehicleUpdate S@@_OnUnoccupiedVehicleUpdate
  2635. ALS_FORWARD<UnoccupiedVehicleUpdate>
  2636.  
  2637. public OnPlayerSelectedMenuRow(playerid, row)
  2638. {
  2639. P:2("Hooks_OnPlayerSelectedMenuRow called: %d, %d", playerid, row);
  2640. new
  2641. end = YSI_g_sCallbackData[ALS_OnPlayerSelectedMenuRow][E_FUNC_HOOK_DATA_END],
  2642. start = YSI_g_sCallbackData[ALS_OnPlayerSelectedMenuRow][E_FUNC_HOOK_DATA_START],
  2643. ret = ALS_R_PlayerSelectedMenuRow;
  2644. if (start == end)
  2645. {
  2646. P:2("Hooks_OnPlayerSelectedMenuRow end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerSelectedMenuRow));
  2647. HOOK_CALL<PlayerSelectedMenuRow>
  2648. }
  2649. new
  2650. idx,
  2651. pointer,
  2652. re = end;
  2653. if (end > sizeof (YSI_g_sCallbackAddresses))
  2654. {
  2655. re = sizeof (YSI_g_sCallbackAddresses);
  2656. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  2657. }
  2658. // Do the initial fast elements.
  2659. while (start != re)
  2660. {
  2661. pointer = YSI_g_sCallbackAddresses[start++];
  2662. #emit PUSH.S row
  2663. #emit PUSH.S playerid
  2664. #emit PUSH.C 8
  2665. #emit LCTRL 6
  2666. #emit ADD.C 28
  2667. #emit PUSH.pri
  2668. #emit LOAD.S.pri pointer
  2669. #emit SCTRL 6
  2670. #emit CONST.alt 0xFFFFFFFF
  2671. #emit STOR.S.pri ret
  2672. #emit JEQ hooks_do_hooks_call_no_als
  2673. }
  2674. // Get any remaining pointers the old way.
  2675. while (start++ != end)
  2676. {
  2677. idx = AMX_GetPublicPointer(idx, pointer, "@yH_PlayerSelectedMenuRow");
  2678. #emit PUSH.S row
  2679. #emit PUSH.S playerid
  2680. #emit PUSH.C 8
  2681. #emit LCTRL 6
  2682. #emit ADD.C 28
  2683. #emit PUSH.pri
  2684. #emit LOAD.S.pri pointer
  2685. #emit SCTRL 6
  2686. #emit CONST.alt 0xFFFFFFFF
  2687. #emit STOR.S.pri ret
  2688. #emit JEQ hooks_do_hooks_call_no_als
  2689. }
  2690. // Do ALS just in case (YSI no longer uses this though now).
  2691. P:2("Hooks_OnPlayerSelectedMenuRow end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerSelectedMenuRow));
  2692. HOOK_RETURN<PlayerSelectedMenuRow>
  2693. }
  2694. #if defined _ALS_OnPlayerSelectedMenuRow
  2695. #undef OnPlayerSelectedMenuRow
  2696. #else
  2697. #define _ALS_OnPlayerSelectedMenuRow
  2698. #endif
  2699. #define OnPlayerSelectedMenuRow S@@_OnPlayerSelectedMenuRow
  2700. ALS_FORWARD<PlayerSelectedMenuRow>
  2701.  
  2702. public OnPlayerExitedMenu(playerid)
  2703. {
  2704. P:2("Hooks_OnPlayerExitedMenu called: %d", playerid);
  2705. new
  2706. end = YSI_g_sCallbackData[ALS_OnPlayerExitedMenu][E_FUNC_HOOK_DATA_END],
  2707. start = YSI_g_sCallbackData[ALS_OnPlayerExitedMenu][E_FUNC_HOOK_DATA_START],
  2708. ret = ALS_R_PlayerExitedMenu;
  2709. if (start == end)
  2710. {
  2711. P:2("Hooks_OnPlayerExitedMenu end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerExitedMenu));
  2712. HOOK_CALL<PlayerExitedMenu>
  2713. }
  2714. new
  2715. idx,
  2716. pointer,
  2717. re = end;
  2718. if (end > sizeof (YSI_g_sCallbackAddresses))
  2719. {
  2720. re = sizeof (YSI_g_sCallbackAddresses);
  2721. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  2722. }
  2723. // Do the initial fast elements.
  2724. while (start != re)
  2725. {
  2726. pointer = YSI_g_sCallbackAddresses[start++];
  2727. #emit PUSH.S playerid
  2728. #emit PUSH.C 4
  2729. #emit LCTRL 6
  2730. #emit ADD.C 28
  2731. #emit PUSH.pri
  2732. #emit LOAD.S.pri pointer
  2733. #emit SCTRL 6
  2734. #emit CONST.alt 0xFFFFFFFF
  2735. #emit STOR.S.pri ret
  2736. #emit JEQ hooks_do_hooks_call_no_als
  2737. }
  2738. // Get any remaining pointers the old way.
  2739. while (start++ != end)
  2740. {
  2741. idx = AMX_GetPublicPointer(idx, pointer, "@yH_PlayerExitedMenu");
  2742. #emit PUSH.S playerid
  2743. #emit PUSH.C 4
  2744. #emit LCTRL 6
  2745. #emit ADD.C 28
  2746. #emit PUSH.pri
  2747. #emit LOAD.S.pri pointer
  2748. #emit SCTRL 6
  2749. #emit CONST.alt 0xFFFFFFFF
  2750. #emit STOR.S.pri ret
  2751. #emit JEQ hooks_do_hooks_call_no_als
  2752. }
  2753. // Do ALS just in case (YSI no longer uses this though now).
  2754. P:2("Hooks_OnPlayerExitedMenu end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerExitedMenu));
  2755. HOOK_RETURN<PlayerExitedMenu>
  2756. }
  2757. #if defined _ALS_OnPlayerExitedMenu
  2758. #undef OnPlayerExitedMenu
  2759. #else
  2760. #define _ALS_OnPlayerExitedMenu
  2761. #endif
  2762. #define OnPlayerExitedMenu S@@_OnPlayerExitedMenu
  2763. ALS_FORWARD<PlayerExitedMenu>
  2764.  
  2765. public OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid)
  2766. {
  2767. P:2("Hooks_OnPlayerInteriorChange called: %d, %d, %d", playerid, newinteriorid, oldinteriorid);
  2768. new
  2769. end = YSI_g_sCallbackData[ALS_OnPlayerInteriorChange][E_FUNC_HOOK_DATA_END],
  2770. start = YSI_g_sCallbackData[ALS_OnPlayerInteriorChange][E_FUNC_HOOK_DATA_START],
  2771. ret = ALS_R_PlayerInteriorChange;
  2772. if (start == end)
  2773. {
  2774. P:2("Hooks_OnPlayerInteriorChange end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerInteriorChange));
  2775. HOOK_CALL<PlayerInteriorChange>
  2776. }
  2777. new
  2778. idx,
  2779. pointer,
  2780. re = end;
  2781. if (end > sizeof (YSI_g_sCallbackAddresses))
  2782. {
  2783. re = sizeof (YSI_g_sCallbackAddresses);
  2784. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  2785. }
  2786. // Do the initial fast elements.
  2787. while (start != re)
  2788. {
  2789. pointer = YSI_g_sCallbackAddresses[start++];
  2790. #emit PUSH.S oldinteriorid
  2791. #emit PUSH.S newinteriorid
  2792. #emit PUSH.S playerid
  2793. #emit PUSH.C 12
  2794. #emit LCTRL 6
  2795. #emit ADD.C 28
  2796. #emit PUSH.pri
  2797. #emit LOAD.S.pri pointer
  2798. #emit SCTRL 6
  2799. #emit CONST.alt 0xFFFFFFFF
  2800. #emit STOR.S.pri ret
  2801. #emit JEQ hooks_do_hooks_call_no_als
  2802. }
  2803. // Get any remaining pointers the old way.
  2804. while (start++ != end)
  2805. {
  2806. idx = AMX_GetPublicPointer(idx, pointer, "@yH_PlayerInteriorChange");
  2807. #emit PUSH.S oldinteriorid
  2808. #emit PUSH.S newinteriorid
  2809. #emit PUSH.S playerid
  2810. #emit PUSH.C 12
  2811. #emit LCTRL 6
  2812. #emit ADD.C 28
  2813. #emit PUSH.pri
  2814. #emit LOAD.S.pri pointer
  2815. #emit SCTRL 6
  2816. #emit CONST.alt 0xFFFFFFFF
  2817. #emit STOR.S.pri ret
  2818. #emit JEQ hooks_do_hooks_call_no_als
  2819. }
  2820. // Do ALS just in case (YSI no longer uses this though now).
  2821. P:2("Hooks_OnPlayerInteriorChange end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerInteriorChange));
  2822. HOOK_RETURN<PlayerInteriorChange>
  2823. }
  2824. #if defined _ALS_OnPlayerInteriorChange
  2825. #undef OnPlayerInteriorChange
  2826. #else
  2827. #define _ALS_OnPlayerInteriorChange
  2828. #endif
  2829. #define OnPlayerInteriorChange S@@_OnPlayerInteriorChange
  2830. ALS_FORWARD<PlayerInteriorChange>
  2831.  
  2832. public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
  2833. {
  2834. P:2("Hooks_OnPlayerKeyStateChange called: %d, %d, %d", playerid, newkeys, oldkeys);
  2835. new
  2836. end = YSI_g_sCallbackData[ALS_OnPlayerKeyStateChange][E_FUNC_HOOK_DATA_END],
  2837. start = YSI_g_sCallbackData[ALS_OnPlayerKeyStateChange][E_FUNC_HOOK_DATA_START],
  2838. ret = ALS_R_PlayerKeyStateChange;
  2839. if (start == end)
  2840. {
  2841. P:2("Hooks_OnPlayerKeyStateChange end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerKeyStateChange));
  2842. HOOK_CALL<PlayerKeyStateChange>
  2843. }
  2844. new
  2845. idx,
  2846. pointer,
  2847. re = end;
  2848. if (end > sizeof (YSI_g_sCallbackAddresses))
  2849. {
  2850. re = sizeof (YSI_g_sCallbackAddresses);
  2851. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  2852. }
  2853. // Do the initial fast elements.
  2854. while (start != re)
  2855. {
  2856. pointer = YSI_g_sCallbackAddresses[start++];
  2857. #emit PUSH.S oldkeys
  2858. #emit PUSH.S newkeys
  2859. #emit PUSH.S playerid
  2860. #emit PUSH.C 12
  2861. #emit LCTRL 6
  2862. #emit ADD.C 28
  2863. #emit PUSH.pri
  2864. #emit LOAD.S.pri pointer
  2865. #emit SCTRL 6
  2866. #emit CONST.alt 0xFFFFFFFF
  2867. #emit STOR.S.pri ret
  2868. #emit JEQ hooks_do_hooks_call_no_als
  2869. }
  2870. // Get any remaining pointers the old way.
  2871. while (start++ != end)
  2872. {
  2873. idx = AMX_GetPublicPointer(idx, pointer, "@yH_PlayerKeyStateChange");
  2874. #emit PUSH.S oldkeys
  2875. #emit PUSH.S newkeys
  2876. #emit PUSH.S playerid
  2877. #emit PUSH.C 12
  2878. #emit LCTRL 6
  2879. #emit ADD.C 28
  2880. #emit PUSH.pri
  2881. #emit LOAD.S.pri pointer
  2882. #emit SCTRL 6
  2883. #emit CONST.alt 0xFFFFFFFF
  2884. #emit STOR.S.pri ret
  2885. #emit JEQ hooks_do_hooks_call_no_als
  2886. }
  2887. // Do ALS just in case (YSI no longer uses this though now).
  2888. P:2("Hooks_OnPlayerKeyStateChange end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerKeyStateChange));
  2889. HOOK_RETURN<PlayerKeyStateChange>
  2890. }
  2891. #if defined _ALS_OnPlayerKeyStateChange
  2892. #undef OnPlayerKeyStateChange
  2893. #else
  2894. #define _ALS_OnPlayerKeyStateChange
  2895. #endif
  2896. #define OnPlayerKeyStateChange S@@_OnPlayerKeyStateChange
  2897. ALS_FORWARD<PlayerKeyStateChange>
  2898.  
  2899. public OnRconLoginAttempt(ip[], password[], success)
  2900. {
  2901. P:2("Hooks_OnRconLoginAttempt called: \"%s\", \"%s\", %d", ip, password, success);
  2902. new
  2903. end = YSI_g_sCallbackData[ALS_OnRconLoginAttempt][E_FUNC_HOOK_DATA_END],
  2904. start = YSI_g_sCallbackData[ALS_OnRconLoginAttempt][E_FUNC_HOOK_DATA_START],
  2905. ret = ALS_R_RconLoginAttempt;
  2906. if (start == end)
  2907. {
  2908. P:2("Hooks_OnRconLoginAttempt end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnRconLoginAttempt));
  2909. HOOK_CALL<RconLoginAttempt>
  2910. }
  2911. new
  2912. idx,
  2913. pointer,
  2914. re = end;
  2915. if (end > sizeof (YSI_g_sCallbackAddresses))
  2916. {
  2917. re = sizeof (YSI_g_sCallbackAddresses);
  2918. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  2919. }
  2920. // Do the initial fast elements.
  2921. while (start != re)
  2922. {
  2923. pointer = YSI_g_sCallbackAddresses[start++];
  2924. #emit PUSH.S success
  2925. #emit PUSH.S password
  2926. #emit PUSH.S ip
  2927. #emit PUSH.C 12
  2928. #emit LCTRL 6
  2929. #emit ADD.C 28
  2930. #emit PUSH.pri
  2931. #emit LOAD.S.pri pointer
  2932. #emit SCTRL 6
  2933. #emit CONST.alt 0xFFFFFFFF
  2934. #emit STOR.S.pri ret
  2935. #emit JEQ hooks_do_hooks_call_no_als
  2936. }
  2937. // Get any remaining pointers the old way.
  2938. while (start++ != end)
  2939. {
  2940. idx = AMX_GetPublicPointer(idx, pointer, "@yH_RconLoginAttempt");
  2941. #emit PUSH.S success
  2942. #emit PUSH.S password
  2943. #emit PUSH.S ip
  2944. #emit PUSH.C 12
  2945. #emit LCTRL 6
  2946. #emit ADD.C 28
  2947. #emit PUSH.pri
  2948. #emit LOAD.S.pri pointer
  2949. #emit SCTRL 6
  2950. #emit CONST.alt 0xFFFFFFFF
  2951. #emit STOR.S.pri ret
  2952. #emit JEQ hooks_do_hooks_call_no_als
  2953. }
  2954. // Do ALS just in case (YSI no longer uses this though now).
  2955. P:2("Hooks_OnRconLoginAttempt end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnRconLoginAttempt));
  2956. HOOK_RETURN<RconLoginAttempt>
  2957. }
  2958. #if defined _ALS_OnRconLoginAttempt
  2959. #undef OnRconLoginAttempt
  2960. #else
  2961. #define _ALS_OnRconLoginAttempt
  2962. #endif
  2963. #define OnRconLoginAttempt S@@_OnRconLoginAttempt
  2964. ALS_FORWARD<RconLoginAttempt>
  2965.  
  2966. public OnPlayerUpdate(playerid)
  2967. {
  2968. P:7("Hooks_OnPlayerUpdate called: %d", playerid);
  2969. new
  2970. end = YSI_g_sCallbackData[ALS_OnPlayerUpdate][E_FUNC_HOOK_DATA_END],
  2971. start = YSI_g_sCallbackData[ALS_OnPlayerUpdate][E_FUNC_HOOK_DATA_START],
  2972. ret = ALS_R_PlayerUpdate;
  2973. if (start == end)
  2974. {
  2975. P:7("Hooks_OnPlayerUpdate end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerUpdate));
  2976. HOOK_CALL<PlayerUpdate>
  2977. }
  2978. new
  2979. idx,
  2980. pointer,
  2981. re = end;
  2982. if (end > sizeof (YSI_g_sCallbackAddresses))
  2983. {
  2984. re = sizeof (YSI_g_sCallbackAddresses);
  2985. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  2986. }
  2987. // Do the initial fast elements.
  2988. while (start != re)
  2989. {
  2990. pointer = YSI_g_sCallbackAddresses[start++];
  2991. #emit PUSH.S playerid
  2992. #emit PUSH.C 4
  2993. #emit LCTRL 6
  2994. #emit ADD.C 28
  2995. #emit PUSH.pri
  2996. #emit LOAD.S.pri pointer
  2997. #emit SCTRL 6
  2998. #emit CONST.alt 0xFFFFFFFF
  2999. #emit STOR.S.pri ret
  3000. #emit JEQ hooks_do_hooks_call_no_als
  3001. }
  3002. // Get any remaining pointers the old way.
  3003. while (start++ != end)
  3004. {
  3005. idx = AMX_GetPublicPointer(idx, pointer, "@yH_PlayerUpdate");
  3006. #emit PUSH.S playerid
  3007. #emit PUSH.C 4
  3008. #emit LCTRL 6
  3009. #emit ADD.C 28
  3010. #emit PUSH.pri
  3011. #emit LOAD.S.pri pointer
  3012. #emit SCTRL 6
  3013. #emit CONST.alt 0xFFFFFFFF
  3014. #emit STOR.S.pri ret
  3015. #emit JEQ hooks_do_hooks_call_no_als
  3016. }
  3017. // Do ALS just in case (YSI no longer uses this though now).
  3018. P:7("Hooks_OnPlayerUpdate end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerUpdate));
  3019. HOOK_RETURN<PlayerUpdate>
  3020. }
  3021. #if defined _ALS_OnPlayerUpdate
  3022. #undef OnPlayerUpdate
  3023. #else
  3024. #define _ALS_OnPlayerUpdate
  3025. #endif
  3026. #define OnPlayerUpdate S@@_OnPlayerUpdate
  3027. ALS_FORWARD<PlayerUpdate>
  3028.  
  3029. public OnPlayerStreamIn(playerid, forplayerid)
  3030. {
  3031. P:2("Hooks_OnPlayerStreamIn called: %d, %d", playerid, forplayerid);
  3032. new
  3033. end = YSI_g_sCallbackData[ALS_OnPlayerStreamIn][E_FUNC_HOOK_DATA_END],
  3034. start = YSI_g_sCallbackData[ALS_OnPlayerStreamIn][E_FUNC_HOOK_DATA_START],
  3035. ret = ALS_R_PlayerStreamIn;
  3036. if (start == end)
  3037. {
  3038. P:2("Hooks_OnPlayerStreamIn end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerStreamIn));
  3039. HOOK_CALL<PlayerStreamIn>
  3040. }
  3041. new
  3042. idx,
  3043. pointer,
  3044. re = end;
  3045. if (end > sizeof (YSI_g_sCallbackAddresses))
  3046. {
  3047. re = sizeof (YSI_g_sCallbackAddresses);
  3048. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  3049. }
  3050. // Do the initial fast elements.
  3051. while (start != re)
  3052. {
  3053. pointer = YSI_g_sCallbackAddresses[start++];
  3054. #emit PUSH.S forplayerid
  3055. #emit PUSH.S playerid
  3056. #emit PUSH.C 8
  3057. #emit LCTRL 6
  3058. #emit ADD.C 28
  3059. #emit PUSH.pri
  3060. #emit LOAD.S.pri pointer
  3061. #emit SCTRL 6
  3062. #emit CONST.alt 0xFFFFFFFF
  3063. #emit STOR.S.pri ret
  3064. #emit JEQ hooks_do_hooks_call_no_als
  3065. }
  3066. // Get any remaining pointers the old way.
  3067. while (start++ != end)
  3068. {
  3069. idx = AMX_GetPublicPointer(idx, pointer, "@yH_PlayerStreamIn");
  3070. #emit PUSH.S forplayerid
  3071. #emit PUSH.S playerid
  3072. #emit PUSH.C 8
  3073. #emit LCTRL 6
  3074. #emit ADD.C 28
  3075. #emit PUSH.pri
  3076. #emit LOAD.S.pri pointer
  3077. #emit SCTRL 6
  3078. #emit CONST.alt 0xFFFFFFFF
  3079. #emit STOR.S.pri ret
  3080. #emit JEQ hooks_do_hooks_call_no_als
  3081. }
  3082. // Do ALS just in case (YSI no longer uses this though now).
  3083. P:2("Hooks_OnPlayerStreamIn end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerStreamIn));
  3084. HOOK_RETURN<PlayerStreamIn>
  3085. }
  3086. #if defined _ALS_OnPlayerStreamIn
  3087. #undef OnPlayerStreamIn
  3088. #else
  3089. #define _ALS_OnPlayerStreamIn
  3090. #endif
  3091. #define OnPlayerStreamIn S@@_OnPlayerStreamIn
  3092. ALS_FORWARD<PlayerStreamIn>
  3093.  
  3094. public OnPlayerStreamOut(playerid, forplayerid)
  3095. {
  3096. P:2("Hooks_OnPlayerStreamOut called: %d, %d", playerid, forplayerid);
  3097. new
  3098. end = YSI_g_sCallbackData[ALS_OnPlayerStreamOut][E_FUNC_HOOK_DATA_END],
  3099. start = YSI_g_sCallbackData[ALS_OnPlayerStreamOut][E_FUNC_HOOK_DATA_START],
  3100. ret = ALS_R_PlayerStreamOut;
  3101. if (start == end)
  3102. {
  3103. P:2("Hooks_OnPlayerStreamOut end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerStreamOut));
  3104. HOOK_CALL<PlayerStreamOut>
  3105. }
  3106. new
  3107. idx,
  3108. pointer,
  3109. re = end;
  3110. if (end > sizeof (YSI_g_sCallbackAddresses))
  3111. {
  3112. re = sizeof (YSI_g_sCallbackAddresses);
  3113. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  3114. }
  3115. // Do the initial fast elements.
  3116. while (start != re)
  3117. {
  3118. pointer = YSI_g_sCallbackAddresses[start++];
  3119. #emit PUSH.S forplayerid
  3120. #emit PUSH.S playerid
  3121. #emit PUSH.C 8
  3122. #emit LCTRL 6
  3123. #emit ADD.C 28
  3124. #emit PUSH.pri
  3125. #emit LOAD.S.pri pointer
  3126. #emit SCTRL 6
  3127. #emit CONST.alt 0xFFFFFFFF
  3128. #emit STOR.S.pri ret
  3129. #emit JEQ hooks_do_hooks_call_no_als
  3130. }
  3131. // Get any remaining pointers the old way.
  3132. while (start++ != end)
  3133. {
  3134. idx = AMX_GetPublicPointer(idx, pointer, "@yH_PlayerStreamOut");
  3135. #emit PUSH.S forplayerid
  3136. #emit PUSH.S playerid
  3137. #emit PUSH.C 8
  3138. #emit LCTRL 6
  3139. #emit ADD.C 28
  3140. #emit PUSH.pri
  3141. #emit LOAD.S.pri pointer
  3142. #emit SCTRL 6
  3143. #emit CONST.alt 0xFFFFFFFF
  3144. #emit STOR.S.pri ret
  3145. #emit JEQ hooks_do_hooks_call_no_als
  3146. }
  3147. // Do ALS just in case (YSI no longer uses this though now).
  3148. P:2("Hooks_OnPlayerStreamOut end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerStreamOut));
  3149. HOOK_RETURN<PlayerStreamOut>
  3150. }
  3151. #if defined _ALS_OnPlayerStreamOut
  3152. #undef OnPlayerStreamOut
  3153. #else
  3154. #define _ALS_OnPlayerStreamOut
  3155. #endif
  3156. #define OnPlayerStreamOut S@@_OnPlayerStreamOut
  3157. ALS_FORWARD<PlayerStreamOut>
  3158.  
  3159. public OnVehicleStreamIn(vehicleid, forplayerid)
  3160. {
  3161. P:2("Hooks_OnVehicleStreamIn called: %d, %d", vehicleid, forplayerid);
  3162. new
  3163. end = YSI_g_sCallbackData[ALS_OnVehicleStreamIn][E_FUNC_HOOK_DATA_END],
  3164. start = YSI_g_sCallbackData[ALS_OnVehicleStreamIn][E_FUNC_HOOK_DATA_START],
  3165. ret = ALS_R_VehicleStreamIn;
  3166. if (start == end)
  3167. {
  3168. P:2("Hooks_OnVehicleStreamIn end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnVehicleStreamIn));
  3169. HOOK_CALL<VehicleStreamIn>
  3170. }
  3171. new
  3172. idx,
  3173. pointer,
  3174. re = end;
  3175. if (end > sizeof (YSI_g_sCallbackAddresses))
  3176. {
  3177. re = sizeof (YSI_g_sCallbackAddresses);
  3178. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  3179. }
  3180. // Do the initial fast elements.
  3181. while (start != re)
  3182. {
  3183. pointer = YSI_g_sCallbackAddresses[start++];
  3184. #emit PUSH.S forplayerid
  3185. #emit PUSH.S vehicleid
  3186. #emit PUSH.C 8
  3187. #emit LCTRL 6
  3188. #emit ADD.C 28
  3189. #emit PUSH.pri
  3190. #emit LOAD.S.pri pointer
  3191. #emit SCTRL 6
  3192. #emit CONST.alt 0xFFFFFFFF
  3193. #emit STOR.S.pri ret
  3194. #emit JEQ hooks_do_hooks_call_no_als
  3195. }
  3196. // Get any remaining pointers the old way.
  3197. while (start++ != end)
  3198. {
  3199. idx = AMX_GetPublicPointer(idx, pointer, "@yH_VehicleStreamIn");
  3200. #emit PUSH.S forplayerid
  3201. #emit PUSH.S vehicleid
  3202. #emit PUSH.C 8
  3203. #emit LCTRL 6
  3204. #emit ADD.C 28
  3205. #emit PUSH.pri
  3206. #emit LOAD.S.pri pointer
  3207. #emit SCTRL 6
  3208. #emit CONST.alt 0xFFFFFFFF
  3209. #emit STOR.S.pri ret
  3210. #emit JEQ hooks_do_hooks_call_no_als
  3211. }
  3212. // Do ALS just in case (YSI no longer uses this though now).
  3213. P:2("Hooks_OnVehicleStreamIn end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnVehicleStreamIn));
  3214. HOOK_RETURN<VehicleStreamIn>
  3215. }
  3216. #if defined _ALS_OnVehicleStreamIn
  3217. #undef OnVehicleStreamIn
  3218. #else
  3219. #define _ALS_OnVehicleStreamIn
  3220. #endif
  3221. #define OnVehicleStreamIn S@@_OnVehicleStreamIn
  3222. ALS_FORWARD<VehicleStreamIn>
  3223.  
  3224. public OnVehicleStreamOut(vehicleid, forplayerid)
  3225. {
  3226. P:2("Hooks_OnVehicleStreamOut called: %d, %d", vehicleid, forplayerid);
  3227. new
  3228. end = YSI_g_sCallbackData[ALS_OnVehicleStreamOut][E_FUNC_HOOK_DATA_END],
  3229. start = YSI_g_sCallbackData[ALS_OnVehicleStreamOut][E_FUNC_HOOK_DATA_START],
  3230. ret = ALS_R_VehicleStreamOut;
  3231. if (start == end)
  3232. {
  3233. P:2("Hooks_OnVehicleStreamOut end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnVehicleStreamOut));
  3234. HOOK_CALL<VehicleStreamOut>
  3235. }
  3236. new
  3237. idx,
  3238. pointer,
  3239. re = end;
  3240. if (end > sizeof (YSI_g_sCallbackAddresses))
  3241. {
  3242. re = sizeof (YSI_g_sCallbackAddresses);
  3243. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  3244. }
  3245. // Do the initial fast elements.
  3246. while (start != re)
  3247. {
  3248. pointer = YSI_g_sCallbackAddresses[start++];
  3249. #emit PUSH.S forplayerid
  3250. #emit PUSH.S vehicleid
  3251. #emit PUSH.C 8
  3252. #emit LCTRL 6
  3253. #emit ADD.C 28
  3254. #emit PUSH.pri
  3255. #emit LOAD.S.pri pointer
  3256. #emit SCTRL 6
  3257. #emit CONST.alt 0xFFFFFFFF
  3258. #emit STOR.S.pri ret
  3259. #emit JEQ hooks_do_hooks_call_no_als
  3260. }
  3261. // Get any remaining pointers the old way.
  3262. while (start++ != end)
  3263. {
  3264. idx = AMX_GetPublicPointer(idx, pointer, "@yH_VehicleStreamOut");
  3265. #emit PUSH.S forplayerid
  3266. #emit PUSH.S vehicleid
  3267. #emit PUSH.C 8
  3268. #emit LCTRL 6
  3269. #emit ADD.C 28
  3270. #emit PUSH.pri
  3271. #emit LOAD.S.pri pointer
  3272. #emit SCTRL 6
  3273. #emit CONST.alt 0xFFFFFFFF
  3274. #emit STOR.S.pri ret
  3275. #emit JEQ hooks_do_hooks_call_no_als
  3276. }
  3277. // Do ALS just in case (YSI no longer uses this though now).
  3278. P:2("Hooks_OnVehicleStreamOut end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnVehicleStreamOut));
  3279. HOOK_RETURN<VehicleStreamOut>
  3280. }
  3281. #if defined _ALS_OnVehicleStreamOut
  3282. #undef OnVehicleStreamOut
  3283. #else
  3284. #define _ALS_OnVehicleStreamOut
  3285. #endif
  3286. #define OnVehicleStreamOut S@@_OnVehicleStreamOut
  3287. ALS_FORWARD<VehicleStreamOut>
  3288.  
  3289. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  3290. {
  3291. P:2("Hooks_OnDialogResponse called: %d, %d, %d, %d, \"%s\"", playerid, dialogid, response, listitem, inputtext);
  3292. new
  3293. end = YSI_g_sCallbackData[ALS_OnDialogResponse][E_FUNC_HOOK_DATA_END],
  3294. start = YSI_g_sCallbackData[ALS_OnDialogResponse][E_FUNC_HOOK_DATA_START],
  3295. ret = ALS_R_DialogResponse;
  3296. if (start == end)
  3297. {
  3298. P:2("Hooks_OnDialogResponse end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnDialogResponse));
  3299. HOOK_CALL<DialogResponse>
  3300. }
  3301. new
  3302. idx,
  3303. pointer,
  3304. re = end;
  3305. if (end > sizeof (YSI_g_sCallbackAddresses))
  3306. {
  3307. re = sizeof (YSI_g_sCallbackAddresses);
  3308. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  3309. }
  3310. // Do the initial fast elements.
  3311. while (start != re)
  3312. {
  3313. pointer = YSI_g_sCallbackAddresses[start++];
  3314. #emit PUSH.S inputtext
  3315. #emit PUSH.S listitem
  3316. #emit PUSH.S response
  3317. #emit PUSH.S dialogid
  3318. #emit PUSH.S playerid
  3319. #emit PUSH.C 20
  3320. #emit LCTRL 6
  3321. #emit ADD.C 28
  3322. #emit PUSH.pri
  3323. #emit LOAD.S.pri pointer
  3324. #emit SCTRL 6
  3325. #emit CONST.alt 0xFFFFFFFF
  3326. #emit STOR.S.pri ret
  3327. #emit JEQ hooks_do_hooks_call_no_als
  3328. }
  3329. // Get any remaining pointers the old way.
  3330. while (start++ != end)
  3331. {
  3332. idx = AMX_GetPublicPointer(idx, pointer, "@yH_DialogResponse");
  3333. #emit PUSH.S inputtext
  3334. #emit PUSH.S listitem
  3335. #emit PUSH.S response
  3336. #emit PUSH.S dialogid
  3337. #emit PUSH.S playerid
  3338. #emit PUSH.C 20
  3339. #emit LCTRL 6
  3340. #emit ADD.C 28
  3341. #emit PUSH.pri
  3342. #emit LOAD.S.pri pointer
  3343. #emit SCTRL 6
  3344. #emit CONST.alt 0xFFFFFFFF
  3345. #emit STOR.S.pri ret
  3346. #emit JEQ hooks_do_hooks_call_no_als
  3347. }
  3348. // Do ALS just in case (YSI no longer uses this though now).
  3349. P:2("Hooks_OnDialogResponse end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnDialogResponse));
  3350. HOOK_RETURN<DialogResponse>
  3351. }
  3352. #if defined _ALS_OnDialogResponse
  3353. #undef OnDialogResponse
  3354. #else
  3355. #define _ALS_OnDialogResponse
  3356. #endif
  3357. #define OnDialogResponse S@@_OnDialogResponse
  3358. ALS_FORWARD<DialogResponse>
  3359.  
  3360. public OnPlayerClickPlayer(playerid, clickedplayerid, source)
  3361. {
  3362. P:2("Hooks_OnPlayerClickPlayer called: %d, %d, %d", playerid, clickedplayerid, source);
  3363. new
  3364. end = YSI_g_sCallbackData[ALS_OnPlayerClickPlayer][E_FUNC_HOOK_DATA_END],
  3365. start = YSI_g_sCallbackData[ALS_OnPlayerClickPlayer][E_FUNC_HOOK_DATA_START],
  3366. ret = ALS_R_PlayerClickPlayer;
  3367. if (start == end)
  3368. {
  3369. P:2("Hooks_OnPlayerClickPlayer end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerClickPlayer));
  3370. HOOK_CALL<PlayerClickPlayer>
  3371. }
  3372. new
  3373. idx,
  3374. pointer,
  3375. re = end;
  3376. if (end > sizeof (YSI_g_sCallbackAddresses))
  3377. {
  3378. re = sizeof (YSI_g_sCallbackAddresses);
  3379. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  3380. }
  3381. // Do the initial fast elements.
  3382. while (start != re)
  3383. {
  3384. pointer = YSI_g_sCallbackAddresses[start++];
  3385. #emit PUSH.S source
  3386. #emit PUSH.S clickedplayerid
  3387. #emit PUSH.S playerid
  3388. #emit PUSH.C 12
  3389. #emit LCTRL 6
  3390. #emit ADD.C 28
  3391. #emit PUSH.pri
  3392. #emit LOAD.S.pri pointer
  3393. #emit SCTRL 6
  3394. #emit CONST.alt 0xFFFFFFFF
  3395. #emit STOR.S.pri ret
  3396. #emit JEQ hooks_do_hooks_call_no_als
  3397. }
  3398. // Get any remaining pointers the old way.
  3399. while (start++ != end)
  3400. {
  3401. idx = AMX_GetPublicPointer(idx, pointer, "@yH_PlayerClickPlayer");
  3402. #emit PUSH.S source
  3403. #emit PUSH.S clickedplayerid
  3404. #emit PUSH.S playerid
  3405. #emit PUSH.C 12
  3406. #emit LCTRL 6
  3407. #emit ADD.C 28
  3408. #emit PUSH.pri
  3409. #emit LOAD.S.pri pointer
  3410. #emit SCTRL 6
  3411. #emit CONST.alt 0xFFFFFFFF
  3412. #emit STOR.S.pri ret
  3413. #emit JEQ hooks_do_hooks_call_no_als
  3414. }
  3415. // Do ALS just in case (YSI no longer uses this though now).
  3416. P:2("Hooks_OnPlayerClickPlayer end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerClickPlayer));
  3417. HOOK_RETURN<PlayerClickPlayer>
  3418. }
  3419. #if defined _ALS_OnPlayerClickPlayer
  3420. #undef OnPlayerClickPlayer
  3421. #else
  3422. #define _ALS_OnPlayerClickPlayer
  3423. #endif
  3424. #define OnPlayerClickPlayer S@@_OnPlayerClickPlayer
  3425. ALS_FORWARD<PlayerClickPlayer>
  3426.  
  3427. public OnPlayerTakeDamage(playerid, issuerid, Float:amount, weaponid)
  3428. {
  3429. P:2("Hooks_OnPlayerTakeDamage called: %d, %d, %f, %d", playerid, issuerid, Float:amount, weaponid);
  3430. new
  3431. end = YSI_g_sCallbackData[ALS_OnPlayerTakeDamage][E_FUNC_HOOK_DATA_END],
  3432. start = YSI_g_sCallbackData[ALS_OnPlayerTakeDamage][E_FUNC_HOOK_DATA_START],
  3433. ret = ALS_R_PlayerTakeDamage;
  3434. if (start == end)
  3435. {
  3436. P:2("Hooks_OnPlayerTakeDamage end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerTakeDamage));
  3437. HOOK_CALL<PlayerTakeDamage>
  3438. }
  3439. new
  3440. idx,
  3441. pointer,
  3442. re = end;
  3443. if (end > sizeof (YSI_g_sCallbackAddresses))
  3444. {
  3445. re = sizeof (YSI_g_sCallbackAddresses);
  3446. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  3447. }
  3448. // Do the initial fast elements.
  3449. while (start != re)
  3450. {
  3451. pointer = YSI_g_sCallbackAddresses[start++];
  3452. #emit PUSH.S weaponid
  3453. #emit PUSH.S amount
  3454. #emit PUSH.S issuerid
  3455. #emit PUSH.S playerid
  3456. #emit PUSH.C 16
  3457. #emit LCTRL 6
  3458. #emit ADD.C 28
  3459. #emit PUSH.pri
  3460. #emit LOAD.S.pri pointer
  3461. #emit SCTRL 6
  3462. #emit CONST.alt 0xFFFFFFFF
  3463. #emit STOR.S.pri ret
  3464. #emit JEQ hooks_do_hooks_call_no_als
  3465. }
  3466. // Get any remaining pointers the old way.
  3467. while (start++ != end)
  3468. {
  3469. idx = AMX_GetPublicPointer(idx, pointer, "@yH_PlayerTakeDamage");
  3470. #emit PUSH.S weaponid
  3471. #emit PUSH.S amount
  3472. #emit PUSH.S issuerid
  3473. #emit PUSH.S playerid
  3474. #emit PUSH.C 16
  3475. #emit LCTRL 6
  3476. #emit ADD.C 28
  3477. #emit PUSH.pri
  3478. #emit LOAD.S.pri pointer
  3479. #emit SCTRL 6
  3480. #emit CONST.alt 0xFFFFFFFF
  3481. #emit STOR.S.pri ret
  3482. #emit JEQ hooks_do_hooks_call_no_als
  3483. }
  3484. // Do ALS just in case (YSI no longer uses this though now).
  3485. P:2("Hooks_OnPlayerTakeDamage end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerTakeDamage));
  3486. HOOK_RETURN<PlayerTakeDamage>
  3487. }
  3488. #if defined _ALS_OnPlayerTakeDamage
  3489. #undef OnPlayerTakeDamage
  3490. #else
  3491. #define _ALS_OnPlayerTakeDamage
  3492. #endif
  3493. #define OnPlayerTakeDamage S@@_OnPlayerTakeDamage
  3494. ALS_FORWARD<PlayerTakeDamage>
  3495.  
  3496. public OnPlayerGiveDamage(playerid, damagedid, Float:amount, weaponid)
  3497. {
  3498. P:2("Hooks_OnPlayerGiveDamage called: %d, %d, %f, %d", playerid, damagedid, Float:amount, weaponid);
  3499. new
  3500. end = YSI_g_sCallbackData[ALS_OnPlayerGiveDamage][E_FUNC_HOOK_DATA_END],
  3501. start = YSI_g_sCallbackData[ALS_OnPlayerGiveDamage][E_FUNC_HOOK_DATA_START],
  3502. ret = ALS_R_PlayerGiveDamage;
  3503. if (start == end)
  3504. {
  3505. P:2("Hooks_OnPlayerGiveDamage end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerGiveDamage));
  3506. HOOK_CALL<PlayerGiveDamage>
  3507. }
  3508. new
  3509. idx,
  3510. pointer,
  3511. re = end;
  3512. if (end > sizeof (YSI_g_sCallbackAddresses))
  3513. {
  3514. re = sizeof (YSI_g_sCallbackAddresses);
  3515. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  3516. }
  3517. // Do the initial fast elements.
  3518. while (start != re)
  3519. {
  3520. pointer = YSI_g_sCallbackAddresses[start++];
  3521. #emit PUSH.S weaponid
  3522. #emit PUSH.S amount
  3523. #emit PUSH.S damagedid
  3524. #emit PUSH.S playerid
  3525. #emit PUSH.C 16
  3526. #emit LCTRL 6
  3527. #emit ADD.C 28
  3528. #emit PUSH.pri
  3529. #emit LOAD.S.pri pointer
  3530. #emit SCTRL 6
  3531. #emit CONST.alt 0xFFFFFFFF
  3532. #emit STOR.S.pri ret
  3533. #emit JEQ hooks_do_hooks_call_no_als
  3534. }
  3535. // Get any remaining pointers the old way.
  3536. while (start++ != end)
  3537. {
  3538. idx = AMX_GetPublicPointer(idx, pointer, "@yH_PlayerGiveDamage");
  3539. #emit PUSH.S weaponid
  3540. #emit PUSH.S amount
  3541. #emit PUSH.S damagedid
  3542. #emit PUSH.S playerid
  3543. #emit PUSH.C 16
  3544. #emit LCTRL 6
  3545. #emit ADD.C 28
  3546. #emit PUSH.pri
  3547. #emit LOAD.S.pri pointer
  3548. #emit SCTRL 6
  3549. #emit CONST.alt 0xFFFFFFFF
  3550. #emit STOR.S.pri ret
  3551. #emit JEQ hooks_do_hooks_call_no_als
  3552. }
  3553. // Do ALS just in case (YSI no longer uses this though now).
  3554. P:2("Hooks_OnPlayerGiveDamage end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerGiveDamage));
  3555. HOOK_RETURN<PlayerGiveDamage>
  3556. }
  3557. #if defined _ALS_OnPlayerGiveDamage
  3558. #undef OnPlayerGiveDamage
  3559. #else
  3560. #define _ALS_OnPlayerGiveDamage
  3561. #endif
  3562. #define OnPlayerGiveDamage S@@_OnPlayerGiveDamage
  3563. ALS_FORWARD<PlayerGiveDamage>
  3564.  
  3565. stock Hooks_OnPlayerLogin(playerid, uid) <y_hooks_PlayerLogin : y_hooks_PlayerLogin_none>
  3566. {
  3567. #pragma unused playerid, uid
  3568. }
  3569.  
  3570. stock Hooks_OnPlayerLogin(playerid, uid) <y_hooks_PlayerLogin : y_hooks_PlayerLogin_some>
  3571. {
  3572. P:2("Hooks_OnPlayerLogin called: %d, %d", playerid, uid);
  3573. new
  3574. end = YSI_g_sCallbackData[ALS_OnPlayerLogin][E_FUNC_HOOK_DATA_END],
  3575. start = YSI_g_sCallbackData[ALS_OnPlayerLogin][E_FUNC_HOOK_DATA_START],
  3576. ret = ALS_R_PlayerLogin;
  3577. if (start == end)
  3578. {
  3579. P:2("Hooks_OnPlayerLogin end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerLogin));
  3580. hooks_do_hooks_call_no_als:
  3581. return;
  3582. //HOOK_CALL<PlayerLogin>
  3583. }
  3584. new
  3585. idx,
  3586. pointer,
  3587. re = end;
  3588. if (end > sizeof (YSI_g_sCallbackAddresses))
  3589. {
  3590. re = sizeof (YSI_g_sCallbackAddresses);
  3591. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  3592. }
  3593. // Do the initial fast elements.
  3594. while (start != re)
  3595. {
  3596. pointer = YSI_g_sCallbackAddresses[start++];
  3597. #emit PUSH.S uid
  3598. #emit PUSH.S playerid
  3599. #emit PUSH.C 8
  3600. #emit LCTRL 6
  3601. #emit ADD.C 28
  3602. #emit PUSH.pri
  3603. #emit LOAD.S.pri pointer
  3604. #emit SCTRL 6
  3605. #emit CONST.alt 0xFFFFFFFF
  3606. #emit STOR.S.pri ret
  3607. #emit JEQ hooks_do_hooks_call_no_als
  3608. }
  3609. // Get any remaining pointers the old way.
  3610. while (start++ != end)
  3611. {
  3612. idx = AMX_GetPublicPointer(idx, pointer, "@yH_PlayerLogin");
  3613. #emit PUSH.S uid
  3614. #emit PUSH.S playerid
  3615. #emit PUSH.C 8
  3616. #emit LCTRL 6
  3617. #emit ADD.C 28
  3618. #emit PUSH.pri
  3619. #emit LOAD.S.pri pointer
  3620. #emit SCTRL 6
  3621. #emit CONST.alt 0xFFFFFFFF
  3622. #emit STOR.S.pri ret
  3623. #emit JEQ hooks_do_hooks_call_no_als
  3624. }
  3625. // Do ALS just in case (YSI no longer uses this though now).
  3626. P:2("Hooks_OnPlayerLogin end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerLogin));
  3627. //HOOK_RETURN<PlayerLogin>
  3628. }
  3629. /*#if defined _ALS_OnPlayerLogin
  3630. #undef OnPlayerLogin
  3631. #else
  3632. #define _ALS_OnPlayerLogin
  3633. #endif
  3634. #define OnPlayerLogin S@@_OnPlayerLogin
  3635. ALS_FORWARD<PlayerLogin>*/
  3636.  
  3637. stock Hooks_OnPlayerLogout(playerid, uid) <y_hooks_PlayerLogout : y_hooks_PlayerLogout_none>
  3638. {
  3639. #pragma unused playerid, uid
  3640. }
  3641.  
  3642. stock Hooks_OnPlayerLogout(playerid, uid) <y_hooks_PlayerLogout : y_hooks_PlayerLogout_some>
  3643. {
  3644. P:2("Hooks_OnPlayerLogout called: %d, %d", playerid, uid);
  3645. new
  3646. end = YSI_g_sCallbackData[ALS_OnPlayerLogout][E_FUNC_HOOK_DATA_END],
  3647. start = YSI_g_sCallbackData[ALS_OnPlayerLogout][E_FUNC_HOOK_DATA_START],
  3648. ret = ALS_R_PlayerLogout;
  3649. if (start == end)
  3650. {
  3651. P:2("Hooks_OnPlayerLogout end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerLogout));
  3652. //HOOK_CALL<PlayerLogout>
  3653. hooks_do_hooks_call_no_als:
  3654. return;
  3655. }
  3656. new
  3657. idx,
  3658. pointer,
  3659. re = end;
  3660. if (end > sizeof (YSI_g_sCallbackAddresses))
  3661. {
  3662. re = sizeof (YSI_g_sCallbackAddresses);
  3663. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  3664. }
  3665. // Do the initial fast elements.
  3666. while (start != re)
  3667. {
  3668. pointer = YSI_g_sCallbackAddresses[start++];
  3669. #emit PUSH.S uid
  3670. #emit PUSH.S playerid
  3671. #emit PUSH.C 8
  3672. #emit LCTRL 6
  3673. #emit ADD.C 28
  3674. #emit PUSH.pri
  3675. #emit LOAD.S.pri pointer
  3676. #emit SCTRL 6
  3677. #emit CONST.alt 0xFFFFFFFF
  3678. #emit STOR.S.pri ret
  3679. #emit JEQ hooks_do_hooks_call_no_als
  3680. }
  3681. // Get any remaining pointers the old way.
  3682. while (start++ != end)
  3683. {
  3684. idx = AMX_GetPublicPointer(idx, pointer, "@yH_PlayerLogout");
  3685. #emit PUSH.S uid
  3686. #emit PUSH.S playerid
  3687. #emit PUSH.C 8
  3688. #emit LCTRL 6
  3689. #emit ADD.C 28
  3690. #emit PUSH.pri
  3691. #emit LOAD.S.pri pointer
  3692. #emit SCTRL 6
  3693. #emit CONST.alt 0xFFFFFFFF
  3694. #emit STOR.S.pri ret
  3695. #emit JEQ hooks_do_hooks_call_no_als
  3696. }
  3697. // Do ALS just in case (YSI no longer uses this though now).
  3698. P:2("Hooks_OnPlayerLogout end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerLogout));
  3699. //HOOK_RETURN<PlayerLogout>
  3700. }
  3701. /*#if defined _ALS_OnPlayerLogout
  3702. #undef OnPlayerLogout
  3703. #else
  3704. #define _ALS_OnPlayerLogout
  3705. #endif
  3706. #define OnPlayerLogout S@@_OnPlayerlogout
  3707. ALS_FORWARD<PlayerLogout>*/
  3708.  
  3709. #if !defined OnPlayerClickMap
  3710. #undef ALS_PREFIX
  3711. #endinput
  3712. #endif
  3713.  
  3714. public OnPlayerClickMap(playerid, Float:fX, Float:fY, Float:fZ)
  3715. {
  3716. P:2("Hooks_OnPlayerClickMap called: %d, %f, %f, %f", playerid, fX, fY, fZ);
  3717. new
  3718. end = YSI_g_sCallbackData[ALS_OnPlayerClickMap][E_FUNC_HOOK_DATA_END],
  3719. start = YSI_g_sCallbackData[ALS_OnPlayerClickMap][E_FUNC_HOOK_DATA_START],
  3720. ret = ALS_R_PlayerClickMap;
  3721. if (start == end)
  3722. {
  3723. P:2("Hooks_OnPlayerClickMap end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerClickMap));
  3724. HOOK_CALL<PlayerClickMap>
  3725. }
  3726. new
  3727. idx,
  3728. pointer,
  3729. re = end;
  3730. if (end > sizeof (YSI_g_sCallbackAddresses))
  3731. {
  3732. re = sizeof (YSI_g_sCallbackAddresses);
  3733. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  3734. }
  3735. // Do the initial fast elements.
  3736. while (start != re)
  3737. {
  3738. pointer = YSI_g_sCallbackAddresses[start++];
  3739. #emit PUSH.S fZ
  3740. #emit PUSH.S fY
  3741. #emit PUSH.S fX
  3742. #emit PUSH.S playerid
  3743. #emit PUSH.C 16
  3744. #emit LCTRL 6
  3745. #emit ADD.C 28
  3746. #emit PUSH.pri
  3747. #emit LOAD.S.pri pointer
  3748. #emit SCTRL 6
  3749. #emit CONST.alt 0xFFFFFFFF
  3750. #emit STOR.S.pri ret
  3751. #emit JEQ hooks_do_hooks_call_no_als
  3752. }
  3753. // Get any remaining pointers the old way.
  3754. while (start++ != end)
  3755. {
  3756. idx = AMX_GetPublicPointer(idx, pointer, "@yH_PlayerClickMap");
  3757. #emit PUSH.S fZ
  3758. #emit PUSH.S fY
  3759. #emit PUSH.S fX
  3760. #emit PUSH.S playerid
  3761. #emit PUSH.C 16
  3762. #emit LCTRL 6
  3763. #emit ADD.C 28
  3764. #emit PUSH.pri
  3765. #emit LOAD.S.pri pointer
  3766. #emit SCTRL 6
  3767. #emit CONST.alt 0xFFFFFFFF
  3768. #emit STOR.S.pri ret
  3769. #emit JEQ hooks_do_hooks_call_no_als
  3770. }
  3771. // Do ALS just in case (YSI no longer uses this though now).
  3772. P:2("Hooks_OnPlayerClickMap end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerClickMap));
  3773. HOOK_RETURN<PlayerClickMap>
  3774. }
  3775. #if defined _ALS_OnPlayerClickMap
  3776. #undef OnPlayerClickMap
  3777. #else
  3778. #define _ALS_OnPlayerClickMap
  3779. #endif
  3780. #define OnPlayerClickMap S@@_OnPlayerClickMap
  3781. ALS_FORWARD<PlayerClickMap>
  3782.  
  3783. #undef ALS_PREFIX
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement