y_dohooks.inc 79 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270
  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. The contents of this file are subject to the Mozilla Public License Version
  10. 1.1 (the "License"); you may not use this file except in compliance with
  11. the License. You may obtain a copy of the License at
  12. http://www.mozilla.org/MPL/
  13. Software distributed under the License is distributed on an "AS IS" basis,
  14. WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
  15. for the specific language governing rights and limitations under the
  16. License.
  17. The Original Code is the SA:MP callback hooks include.
  18. The Initial Developer of the Original Code is Alex "Y_Less" Cole.
  19. Portions created by the Initial Developer are Copyright (C) 2008
  20. the Initial Developer. All Rights Reserved.
  21. Contributors:
  22. ZeeX, koolk, JoeBullet/Google63, g_aSlice/Slice
  23. Thanks:
  24. JoeBullet/Google63 - Handy arbitrary ASM jump code using SCTRL.
  25. Peter, Cam - Support.
  26. ZeeX, g_aSlice/Slice, Popz, others - Very productive conversations.
  27. koolk - IsPlayerinAreaEx code.
  28. TheAlpha - Danish translation.
  29. breadfish - German translation.
  30. Fireburn - Dutch translation.
  31. yom - French translation.
  32. 50p - Polish translation.
  33. Zamaroht - Spanish translation.
  34. Dracoblue, sintax, mabako, Xtreme, other coders - Producing other modes
  35. for me to strive to better.
  36. Pixels^ - Running XScripters where the idea was born.
  37. Matite - Pestering me to release it and using it.
  38. Very special thanks to:
  39. Thiadmer - PAWN, whose limits continue to amaze me!
  40. Kye/Kalcor - SA:MP.
  41. SA:MP Team past, present and future - SA:MP.
  42. Version:
  43. 2.0
  44. Changelog:
  45. 02/01/13:
  46. Rewrote the system to do away with ALS.
  47. Removed overflow checks in every callback.
  48. Streamlined code.
  49. 14/04/12:
  50. Added crash fix from Slice, now returning correct values.
  51. Fixed ALS detection of mode callbacks.
  52. 25/02/12:
  53. Extracted most of the code to a separate file.
  54. 17/03/11:
  55. Second complete re-write using another new technique. Now VERY fast!
  56. Updated OnPlayerUpdate code using Google63's SCTRL jump code.
  57. 06/08/10:
  58. First version
  59. \*----------------------------------------------------------------------------*/
  60. #include "y_version"
  61. #include <a_samp>
  62. #include "..\y_debug"
  63. #include "..\y_amx"
  64. #include "y_plugins"
  65. #define ALS_MAKE<%0...%1> %0S@@%1
  66. #if !defined YSI_FILTERSCRIPT
  67. new
  68. bool:YSI_FILTERSCRIPT = false;
  69. #endif
  70. #define hook%0On%1(%2) UNIQUE_FUNCTION<@yH_%1...>(%2);UNIQUE_FUNCTION<@yH_%1...>(%2)
  71. #define rehook%0On%1(%2) UNIQUE_FUNCTION<@yH_%1...>(%2)
  72. #define Hook:%0On%1(%2) UNIQUE_FUNCTION<@yH_%1...%0>(%2);UNIQUE_FUNCTION<@yH_%1...%0>(%2)
  73. #include "..\y_als"
  74. #if !defined HOOKS_MAX_UPDATES
  75. // Slight increase from the previous version.
  76. #define HOOKS_MAX_UPDATES (8)
  77. #endif
  78. // These defines now use the much more generic ALS code so that the list of
  79. // callbacks is only done in one place.
  80. #define HOOK_R_INT<%0,%2>(%3) return ALS_MAKE<..._On%0>(ALS_TS_%3);
  81. #define HOOK_RETURN<%0> ALS_DO:HOOK_R_INT<%0>
  82. #define HOOK_F_INT<%0,%2>(%3) forward ALS_MAKE<..._On%0>(ALS_KS_%3);
  83. #define HOOK_FORWARD<%0> ALS_DO:HOOK_F_INT<%0>
  84. #define HOOK_C_INT<%0,%2>(%3) ret=ALS_MAKE<..._On%0>(ALS_TS_%3);hooks_do_hooks_call_no_als:return ret;
  85. #define HOOK_CALL<%0> ALS_DO:HOOK_C_INT<%0>
  86. static stock
  87. YSI_g_sCallbackAddresses[HOOKS_MAX_UPDATES * _:ALS],
  88. YSI_g_sCallbackStart[ALS],
  89. YSI_g_sCallbackEnd[ALS];
  90. static Hooks_Blank_Return1N()
  91. {
  92. // Bug fix from Slice.
  93. return -1;
  94. }
  95. static Hooks_Blank_Return0()
  96. {
  97. return 0;
  98. }
  99. static Hooks_Blank_Return1()
  100. {
  101. return 1;
  102. }
  103. stock Hooks_RedirectPublic(from[], to[], final = 1)
  104. {
  105. P:4("Hooks_RedirectPublic called: \"%s\", \"%s\"", from, to);
  106. new
  107. addr = strfind(from, "(");
  108. if (addr != -1) from[addr] = '\0';
  109. if (AMX_GetPublicEntry(0, addr, from))
  110. {
  111. new
  112. pointer,
  113. ret = AMX_Read(addr);
  114. if (AMX_GetPublicPointer(0, pointer, to))
  115. {
  116. AMX_Write(addr, pointer);
  117. }
  118. else
  119. {
  120. // Can't find the next element, just remove this callback entirely.
  121. // Note that in some cases the previous ALS include will have
  122. // already (due to the constant chaining order) determined that
  123. // there IS a next callback for this type (because there is) and set
  124. // some internal variable stating this fact. When it comes to call
  125. // it, however, the callback will no longer exist (unless PAWN
  126. // buffers callbacks in an efficient structure, which is possible).
  127. // UPDATE: Clearly not.
  128. switch (final)
  129. {
  130. case 0:
  131. {
  132. #emit CONST.pri Hooks_Blank_Return0
  133. #emit STOR.S.pri pointer
  134. }
  135. case -1:
  136. {
  137. #emit CONST.pri Hooks_Blank_Return1N
  138. #emit STOR.S.pri pointer
  139. }
  140. default:
  141. {
  142. #emit CONST.pri Hooks_Blank_Return1
  143. #emit STOR.S.pri pointer
  144. }
  145. }
  146. AMX_Write(addr, pointer);
  147. }
  148. return ret;
  149. }
  150. return 0;
  151. }
  152. /*----------------------------------------------------------------------------*\
  153. Function:
  154. Hooks_AddOne
  155. Params:
  156. idx - Public function table index.
  157. &toaddidx - Current slot in the global array.
  158. Return:
  159. -
  160. Notes:
  161. Stores a public function by index in to the array of function pointers.
  162. \*----------------------------------------------------------------------------*/
  163. static Hooks_AddOne(idx, &toaddidx)
  164. {
  165. // This is a combination between the count and the end point.
  166. if (toaddidx == sizeof (YSI_g_sCallbackAddresses))
  167. {
  168. P:E("Out of y_hooks callback addresses");
  169. }
  170. else
  171. {
  172. new
  173. addr = (idx - 1) * 8 + AMX_HEADER_PUBLICS;
  174. #emit LREF.S.pri addr
  175. #emit STOR.S.pri addr
  176. YSI_g_sCallbackAddresses[toaddidx++] = addr;
  177. }
  178. }
  179. /*----------------------------------------------------------------------------*\
  180. Function:
  181. Hooks_FindAll
  182. Params:
  183. name[] - Callback to find.
  184. &toaddidx - Current slot in the global array.
  185. &start - Where to store the start index.
  186. &end - Where to store the end index.
  187. Return:
  188. -
  189. Notes:
  190. Finds all public functions with the standard y_hooks prefix and a suffix of
  191. the given string, as well as the y_hooks ALS next call (if there is one).
  192. \*----------------------------------------------------------------------------*/
  193. static Hooks_FindAll(name[], &toaddidx, &start, &end)
  194. {
  195. P:4("Hooks_FindAll called: %s %d", name, toaddidx);
  196. P:4("Hooks_FindAll called: %s %d", name, toaddidx);
  197. new
  198. buffer[32],
  199. len = strlen(name),
  200. idx;
  201. start = toaddidx - 1;
  202. // Find all the y_hooks "hook" callbacks.
  203. while ((idx = AMX_GetPublicNamePrefix(idx, buffer, _A<@yH_>)))
  204. {
  205. if (!strcmp(name, buffer[1], false, len) && ('0' <= buffer{4 + len} <= '9'))
  206. {
  207. P:6("%d (%d) %s", idx, toaddidx, unpack(buffer));
  208. Hooks_AddOne(idx, toaddidx);
  209. }
  210. }
  211. // Find the next item in the ALS call chain.
  212. buffer = "S@@_On";
  213. strcat(buffer, name);
  214. // Add 1 as the return of "funcidx" doesn't quite match the return of y_amx.
  215. if ((idx = funcidx(buffer) + 1))
  216. {
  217. P:5("%d (%d) %s", idx, toaddidx, buffer);
  218. Hooks_AddOne(idx, toaddidx);
  219. }
  220. end = toaddidx - 1;
  221. // Don't store the end, if the count goes off the end of the addresses array
  222. // then we need to just start reading from the AMX directly.
  223. P:4("Hooks_FindAll end: %s %d %d", name, toaddidx, end - (start + 1));
  224. return end - start;
  225. }
  226. /*----------------------------------------------------------------------------*\
  227. Function:
  228. Hooks_RemovePublic
  229. Params:
  230. from[] - Public function to remove.
  231. final - The return address to use instead.
  232. Return:
  233. The address of "func".
  234. Notes:
  235. Replaces a public function with another function that only returns the given
  236. value (must be -1, 0, or 1).
  237. \*----------------------------------------------------------------------------*/
  238. static Hooks_RemovePublic(from[], final)
  239. {
  240. P:4("Hooks_RemovePublic called: \"%s\", %d", from, final);
  241. // The macros used add an extra "(" on to the name. Remove it.
  242. new
  243. addr = strfind(from, "(");
  244. from[addr] = '\0';
  245. if (AMX_GetPublicEntry(0, addr, from))
  246. {
  247. new
  248. pointer,
  249. ret = AMX_Read(addr);
  250. switch (final)
  251. {
  252. case 0:
  253. {
  254. #emit CONST.pri Hooks_Blank_Return0
  255. #emit STOR.S.pri pointer
  256. }
  257. case -1:
  258. {
  259. #emit CONST.pri Hooks_Blank_Return1N
  260. #emit STOR.S.pri pointer
  261. }
  262. default:
  263. {
  264. #emit CONST.pri Hooks_Blank_Return1
  265. #emit STOR.S.pri pointer
  266. }
  267. }
  268. AMX_Write(addr, pointer);
  269. return ret;
  270. }
  271. return 0;
  272. }
  273. #define HOOKS_STRIP_ME)%0, ,
  274. #define HOOKS_DO_ONE_CALLBACK<%0> if(!Hooks_FindAll(#%0,cidx,_:YSI_g_sCallbackStart[ALS_On%0],_:YSI_g_sCallbackEnd[ALS_On%0]))Hooks_RemovePublic(#On%0(HOOKS_STRIP_ME),ALS_R_%0);
  275. //static Hooks_OnScriptInit()
  276. public OnScriptInit()
  277. {
  278. P:2("Hooks_OnScriptInit called");
  279. S@@_OnScriptInit();
  280. new
  281. cidx;
  282. printf(" ");
  283. for (new i = 0; i != 1000000; ++i) {}
  284. printf(" ");
  285. // Initialise the data for all the callbacks.
  286. HOOKS_DO_ONE_CALLBACK<ScriptInit>
  287. HOOKS_DO_ONE_CALLBACK<ScriptExit>
  288. HOOKS_DO_ONE_CALLBACK<GameModeInit>
  289. HOOKS_DO_ONE_CALLBACK<GameModeExit>
  290. HOOKS_DO_ONE_CALLBACK<FilterScriptInit>
  291. HOOKS_DO_ONE_CALLBACK<FilterScriptExit>
  292. HOOKS_DO_ONE_CALLBACK<PlayerConnect>
  293. HOOKS_DO_ONE_CALLBACK<PlayerDisconnect>
  294. HOOKS_DO_ONE_CALLBACK<PlayerSpawn>
  295. HOOKS_DO_ONE_CALLBACK<PlayerDeath>
  296. HOOKS_DO_ONE_CALLBACK<VehicleSpawn>
  297. HOOKS_DO_ONE_CALLBACK<VehicleDeath>
  298. HOOKS_DO_ONE_CALLBACK<PlayerText>
  299. HOOKS_DO_ONE_CALLBACK<PlayerCommandText>
  300. HOOKS_DO_ONE_CALLBACK<PlayerRequestClass>
  301. HOOKS_DO_ONE_CALLBACK<PlayerEnterVehicle>
  302. HOOKS_DO_ONE_CALLBACK<PlayerExitVehicle>
  303. HOOKS_DO_ONE_CALLBACK<PlayerStateChange>
  304. HOOKS_DO_ONE_CALLBACK<PlayerEnterCheckpoint>
  305. HOOKS_DO_ONE_CALLBACK<PlayerLeaveCheckpoint>
  306. HOOKS_DO_ONE_CALLBACK<PlayerEnterRaceCheckpoint>
  307. HOOKS_DO_ONE_CALLBACK<PlayerLeaveRaceCheckpoint>
  308. HOOKS_DO_ONE_CALLBACK<RconCommand>
  309. HOOKS_DO_ONE_CALLBACK<PlayerRequestSpawn>
  310. HOOKS_DO_ONE_CALLBACK<ObjectMoved>
  311. HOOKS_DO_ONE_CALLBACK<PlayerObjectMoved>
  312. HOOKS_DO_ONE_CALLBACK<PlayerPickUpPickup>
  313. HOOKS_DO_ONE_CALLBACK<VehicleMod>
  314. HOOKS_DO_ONE_CALLBACK<EnterExitModShop>
  315. HOOKS_DO_ONE_CALLBACK<VehiclePaintjob>
  316. HOOKS_DO_ONE_CALLBACK<VehicleRespray>
  317. HOOKS_DO_ONE_CALLBACK<VehicleDamageStatusUpdate>
  318. HOOKS_DO_ONE_CALLBACK<PlayerSelectedMenuRow>
  319. HOOKS_DO_ONE_CALLBACK<PlayerExitedMenu>
  320. HOOKS_DO_ONE_CALLBACK<PlayerInteriorChange>
  321. HOOKS_DO_ONE_CALLBACK<PlayerKeyStateChange>
  322. HOOKS_DO_ONE_CALLBACK<RconLoginAttempt>
  323. HOOKS_DO_ONE_CALLBACK<PlayerUpdate>
  324. HOOKS_DO_ONE_CALLBACK<PlayerStreamIn>
  325. HOOKS_DO_ONE_CALLBACK<PlayerStreamOut>
  326. HOOKS_DO_ONE_CALLBACK<VehicleStreamIn>
  327. HOOKS_DO_ONE_CALLBACK<VehicleStreamOut>
  328. HOOKS_DO_ONE_CALLBACK<DialogResponse>
  329. HOOKS_DO_ONE_CALLBACK<PlayerClickPlayer>
  330. HOOKS_DO_ONE_CALLBACK<PlayerGiveDamage>
  331. HOOKS_DO_ONE_CALLBACK<PlayerTakeDamage>
  332. HOOKS_DO_ONE_CALLBACK<PlayerClickMap>
  333. HOOKS_DO_ONE_CALLBACK<UnoccupiedVehicleUpdate>
  334. // 0.3e
  335. HOOKS_DO_ONE_CALLBACK<PlayerClickTextDraw>
  336. HOOKS_DO_ONE_CALLBACK<PlayerClickPlayerTextDraw>
  337. HOOKS_DO_ONE_CALLBACK<PlayerEditObject>
  338. HOOKS_DO_ONE_CALLBACK<PlayerEditAttachedObject>
  339. HOOKS_DO_ONE_CALLBACK<PlayerSelectObject>
  340. // Streamer plugin.
  341. #if defined _YSI_PLUGINS_STREAMER
  342. HOOKS_DO_ONE_CALLBACK<DynamicObjectMoved>
  343. HOOKS_DO_ONE_CALLBACK<PlayerEditDynamicObject>
  344. HOOKS_DO_ONE_CALLBACK<PlayerSelectDynamicObject>
  345. HOOKS_DO_ONE_CALLBACK<PlayerPickUpDynamicPickup>
  346. HOOKS_DO_ONE_CALLBACK<PlayerEnterDynamicCP>
  347. HOOKS_DO_ONE_CALLBACK<PlayerLeaveDynamicCP>
  348. HOOKS_DO_ONE_CALLBACK<PlayerEnterDynamicRaceCP>
  349. HOOKS_DO_ONE_CALLBACK<PlayerLeaveDynamicRaceCP>
  350. HOOKS_DO_ONE_CALLBACK<PlayerEnterDynamicArea>
  351. HOOKS_DO_ONE_CALLBACK<PlayerLeaveDynamicArea>
  352. #endif
  353. // YSI callbacks.
  354. HOOKS_DO_ONE_CALLBACK<PlayerLogin>
  355. HOOKS_DO_ONE_CALLBACK<PlayerLogout>
  356. #if defined YSI_LOCK_MODE
  357. YSI_gLockData[1] = floatround(floatlog(_LOCK_LEN_0 + 1), floatround_ceil);
  358. YSI_gLockData[0] = 5 + YSI_gLockData[1];
  359. YSI_gLockData[2] = YSI_gLockData[0] - 5;
  360. if (~strval(YSI_gLockData[5]) != ~_LOCK_IP_0)
  361. {
  362. y_lock 2;
  363. }
  364. YSI_gLockData[2] -= YSI_gLockData[1];
  365. YSI_gLockData[YSI_gLockData[2] + 1] -= YSI_gLockData[0];
  366. YSI_gLockData[1] += '.' + 5;
  367. #endif
  368. // Do all but one other callback - we already did the ALS forward first.
  369. new
  370. end = _:YSI_g_sCallbackEnd[ALS_OnScriptInit] - 1,
  371. start = _:YSI_g_sCallbackStart[ALS_OnScriptInit];
  372. while (start++ < end)
  373. {
  374. //printf("%d %d", start, end);
  375. #emit PUSH.C 0
  376. #emit CONST.alt YSI_g_sCallbackAddresses
  377. #emit LOAD.S.pri start
  378. #emit LIDX
  379. #emit MOVE.alt
  380. #emit LCTRL 6
  381. #emit ADD.C 24
  382. #emit PUSH.pri
  383. #emit MOVE.pri
  384. #emit SCTRL 6
  385. }
  386. return ALS_R_ScriptInit;
  387. }
  388. #if defined _ALS_OnScriptInit
  389. #undef OnScriptInit
  390. #else
  391. #define _ALS_OnScriptInit
  392. #endif
  393. #define OnScriptInit(%0) S@@_OnScriptInit(%0) <_ALS_:hooked>
  394. ALS_FORWARD<ScriptInit>
  395. public OnScriptExit()
  396. {
  397. P:2("Hooks_OnScriptExit called");
  398. new
  399. end = _:YSI_g_sCallbackEnd[ALS_OnScriptExit],
  400. start = _:YSI_g_sCallbackStart[ALS_OnScriptExit];
  401. do
  402. {
  403. #emit PUSH.C 0
  404. #emit CONST.alt YSI_g_sCallbackAddresses
  405. #emit LOAD.S.pri start
  406. #emit INC.pri
  407. #emit STOR.S.pri start
  408. #emit LIDX
  409. #emit MOVE.alt
  410. #emit LCTRL 6
  411. #emit ADD.C 24
  412. #emit PUSH.pri
  413. #emit MOVE.pri
  414. #emit SCTRL 6
  415. }
  416. while (start != end);
  417. return ALS_R_ScriptExit;
  418. }
  419. #if defined _ALS_OnScriptExit
  420. #undef OnScriptExit
  421. #else
  422. #define _ALS_OnScriptExit
  423. #endif
  424. #define OnScriptExit(%0) S@@_OnScriptExit(%0)
  425. HOOK_FORWARD<ScriptExit>
  426. public OnGameModeInit()
  427. {
  428. P:2("Hooks_OnGameModeInit called");
  429. new
  430. end = _:YSI_g_sCallbackEnd[ALS_OnGameModeInit],
  431. start = _:YSI_g_sCallbackStart[ALS_OnGameModeInit];
  432. do
  433. {
  434. //printf("Hooks_OnGameModeInit: %d %d %d", start, end, YSI_g_sCallbackAddresses[start]);
  435. #emit PUSH.C 0
  436. #emit CONST.alt YSI_g_sCallbackAddresses
  437. #emit LOAD.S.pri start
  438. #emit INC.pri
  439. #emit STOR.S.pri start
  440. #emit LIDX
  441. #emit MOVE.alt
  442. #emit LCTRL 6
  443. #emit ADD.C 24
  444. #emit PUSH.pri
  445. #emit MOVE.pri
  446. #emit SCTRL 6
  447. }
  448. while (start != end);
  449. return ALS_R_GameModeExit;
  450. }
  451. #if defined _ALS_OnGameModeInit
  452. #undef OnGameModeInit
  453. #else
  454. #define _ALS_OnGameModeInit
  455. #endif
  456. #define OnGameModeInit(%0) S@@_OnGameModeInit(%0)
  457. HOOK_FORWARD<GameModeInit>
  458. public OnGameModeExit()
  459. {
  460. P:2("Hooks_OnGameModeExit called");
  461. new
  462. end = _:YSI_g_sCallbackEnd[ALS_OnGameModeExit],
  463. start = _:YSI_g_sCallbackStart[ALS_OnGameModeExit];
  464. do
  465. {
  466. #emit PUSH.C 0
  467. #emit CONST.alt YSI_g_sCallbackAddresses
  468. #emit LOAD.S.pri start
  469. #emit INC.pri
  470. #emit STOR.S.pri start
  471. #emit LIDX
  472. #emit MOVE.alt
  473. #emit LCTRL 6
  474. #emit ADD.C 24
  475. #emit PUSH.pri
  476. #emit MOVE.pri
  477. #emit SCTRL 6
  478. }
  479. while (start != end);
  480. return ALS_R_GameModeExit;
  481. }
  482. #if defined _ALS_OnGameModeExit
  483. #undef OnGameModeExit
  484. #else
  485. #define _ALS_OnGameModeExit
  486. #endif
  487. #define OnGameModeExit(%0) S@@_OnGameModeExit(%0)
  488. HOOK_FORWARD<GameModeExit>
  489. public OnFilterScriptInit()
  490. {
  491. P:2("Hooks_OnFilterScriptInit called");
  492. #if defined YSI_LOCK_MODE
  493. 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)
  494. {
  495. y_lock 4;
  496. }
  497. #endif
  498. new
  499. end = _:YSI_g_sCallbackEnd[ALS_OnFilterScriptInit],
  500. start = _:YSI_g_sCallbackStart[ALS_OnFilterScriptInit];
  501. do
  502. {
  503. #emit PUSH.C 0
  504. #emit CONST.alt YSI_g_sCallbackAddresses
  505. #emit LOAD.S.pri start
  506. #emit INC.pri
  507. #emit STOR.S.pri start
  508. #emit LIDX
  509. #emit MOVE.alt
  510. #emit LCTRL 6
  511. #emit ADD.C 24
  512. #emit PUSH.pri
  513. #emit MOVE.pri
  514. #emit SCTRL 6
  515. }
  516. while (start != end);
  517. return ALS_R_FilterScriptInit;
  518. }
  519. #if defined _ALS_OnFilterScriptInit
  520. #undef OnFilterScriptInit
  521. #else
  522. #define _ALS_OnFilterScriptInit
  523. #endif
  524. #define OnFilterScriptInit(%0) S@@_OnFilterScriptInit(%0)
  525. HOOK_FORWARD<FilterScriptInit>
  526. public OnFilterScriptExit()
  527. {
  528. P:2("Hooks_OnFilterScriptExit called");
  529. new
  530. end = _:YSI_g_sCallbackEnd[ALS_OnFilterScriptExit],
  531. start = _:YSI_g_sCallbackStart[ALS_OnFilterScriptExit];
  532. do
  533. {
  534. #emit PUSH.C 0
  535. #emit CONST.alt YSI_g_sCallbackAddresses
  536. #emit LOAD.S.pri start
  537. #emit INC.pri
  538. #emit STOR.S.pri start
  539. #emit LIDX
  540. #emit MOVE.alt
  541. #emit LCTRL 6
  542. #emit ADD.C 24
  543. #emit PUSH.pri
  544. #emit MOVE.pri
  545. #emit SCTRL 6
  546. }
  547. while (start != end);
  548. return ALS_R_FilterScriptExit;
  549. }
  550. #if defined _ALS_OnFilterScriptExit
  551. #undef OnFilterScriptExit
  552. #else
  553. #define _ALS_OnFilterScriptExit
  554. #endif
  555. #define OnFilterScriptExit(%0) S@@_OnFilterScriptExit(%0)
  556. HOOK_FORWARD<FilterScriptExit>
  557. public OnPlayerConnect(playerid)
  558. {
  559. P:2("Hooks_OnPlayerConnect called: %d", playerid);
  560. new
  561. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerConnect],
  562. start = _:YSI_g_sCallbackStart[ALS_OnPlayerConnect],
  563. ret = ALS_R_PlayerConnect;
  564. do
  565. {
  566. #emit PUSH.S playerid
  567. #emit PUSH.C 4
  568. #emit CONST.alt YSI_g_sCallbackAddresses
  569. #emit LOAD.S.pri start
  570. #emit INC.pri
  571. #emit STOR.S.pri start
  572. #emit LIDX
  573. #emit MOVE.alt
  574. #emit LCTRL 6
  575. #emit ADD.C 24
  576. #emit PUSH.pri
  577. #emit MOVE.pri
  578. #emit SCTRL 6
  579. #emit MOVE.alt
  580. #emit CONST.pri 0xFFFFFFFE
  581. #emit AND
  582. #emit PUSH.pri
  583. #emit LOAD.S.pri ret
  584. #emit AND
  585. #emit POP.alt
  586. #emit OR
  587. #emit STOR.S.pri ret
  588. }
  589. while (start != end && ret >= 0);
  590. return (ret == 1);
  591. }
  592. #if defined _ALS_OnPlayerConnect
  593. #undef OnPlayerConnect
  594. #else
  595. #define _ALS_OnPlayerConnect
  596. #endif
  597. #define OnPlayerConnect(%0) S@@_OnPlayerConnect(%0)
  598. HOOK_FORWARD<PlayerConnect>
  599. public OnPlayerDisconnect(playerid, reason)
  600. {
  601. P:2("Hooks_OnPlayerDisconnect called: %d, %d", playerid, reason);
  602. new
  603. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerDisconnect],
  604. start = _:YSI_g_sCallbackStart[ALS_OnPlayerDisconnect],
  605. ret = ALS_R_PlayerDisconnect;
  606. do
  607. {
  608. #emit PUSH.S reason
  609. #emit PUSH.S playerid
  610. #emit PUSH.C 8
  611. #emit CONST.alt YSI_g_sCallbackAddresses
  612. #emit LOAD.S.pri start
  613. #emit INC.pri
  614. #emit STOR.S.pri start
  615. #emit LIDX
  616. #emit MOVE.alt
  617. #emit LCTRL 6
  618. #emit ADD.C 24
  619. #emit PUSH.pri
  620. #emit MOVE.pri
  621. #emit SCTRL 6
  622. #emit MOVE.alt
  623. #emit CONST.pri 0xFFFFFFFE
  624. #emit AND
  625. #emit PUSH.pri
  626. #emit LOAD.S.pri ret
  627. #emit AND
  628. #emit POP.alt
  629. #emit OR
  630. #emit STOR.S.pri ret
  631. }
  632. while (start != end && ret >= 0);
  633. return (ret == 1);
  634. }
  635. #if defined _ALS_OnPlayerDisconnect
  636. #undef OnPlayerDisconnect
  637. #else
  638. #define _ALS_OnPlayerDisconnect
  639. #endif
  640. #define OnPlayerDisconnect(%0) S@@_OnPlayerDisconnect(%0)
  641. HOOK_FORWARD<PlayerDisconnect>
  642. public OnPlayerSpawn(playerid)
  643. {
  644. P:2("Hooks_OnPlayerSpawn called: %d", playerid);
  645. new
  646. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerSpawn],
  647. start = _:YSI_g_sCallbackStart[ALS_OnPlayerSpawn],
  648. ret = ALS_R_PlayerSpawn;
  649. do
  650. {
  651. #emit PUSH.S playerid
  652. #emit PUSH.C 4
  653. #emit CONST.alt YSI_g_sCallbackAddresses
  654. #emit LOAD.S.pri start
  655. #emit INC.pri
  656. #emit STOR.S.pri start
  657. #emit LIDX
  658. #emit MOVE.alt
  659. #emit LCTRL 6
  660. #emit ADD.C 24
  661. #emit PUSH.pri
  662. #emit MOVE.pri
  663. #emit SCTRL 6
  664. #emit MOVE.alt
  665. #emit CONST.pri 0xFFFFFFFE
  666. #emit AND
  667. #emit PUSH.pri
  668. #emit LOAD.S.pri ret
  669. #emit AND
  670. #emit POP.alt
  671. #emit OR
  672. #emit STOR.S.pri ret
  673. }
  674. while (start != end && ret >= 0);
  675. return (ret == 1);
  676. }
  677. #if defined _ALS_OnPlayerSpawn
  678. #undef OnPlayerSpawn
  679. #else
  680. #define _ALS_OnPlayerSpawn
  681. #endif
  682. #define OnPlayerSpawn(%0) S@@_OnPlayerSpawn(%0)
  683. HOOK_FORWARD<PlayerSpawn>
  684. public OnPlayerDeath(playerid, killerid, reason)
  685. {
  686. P:2("Hooks_OnPlayerDeath called: %d, %d, %d", playerid, killerid, reason);
  687. new
  688. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerDeath],
  689. start = _:YSI_g_sCallbackStart[ALS_OnPlayerDeath],
  690. ret = ALS_R_PlayerDeath;
  691. do
  692. {
  693. #emit PUSH.S reason
  694. #emit PUSH.S killerid
  695. #emit PUSH.S playerid
  696. #emit PUSH.C 12
  697. #emit CONST.alt YSI_g_sCallbackAddresses
  698. #emit LOAD.S.pri start
  699. #emit INC.pri
  700. #emit STOR.S.pri start
  701. #emit LIDX
  702. #emit MOVE.alt
  703. #emit LCTRL 6
  704. #emit ADD.C 24
  705. #emit PUSH.pri
  706. #emit MOVE.pri
  707. #emit SCTRL 6
  708. #emit MOVE.alt
  709. #emit CONST.pri 0xFFFFFFFE
  710. #emit AND
  711. #emit PUSH.pri
  712. #emit LOAD.S.pri ret
  713. #emit AND
  714. #emit POP.alt
  715. #emit OR
  716. #emit STOR.S.pri ret
  717. }
  718. while (start != end && ret >= 0);
  719. return (ret == 1);
  720. }
  721. #if defined _ALS_OnPlayerDeath
  722. #undef OnPlayerDeath
  723. #else
  724. #define _ALS_OnPlayerDeath
  725. #endif
  726. #define OnPlayerDeath(%0) S@@_OnPlayerDeath(%0)
  727. HOOK_FORWARD<PlayerDeath>
  728. public OnVehicleSpawn(vehicleid)
  729. {
  730. P:2("Hooks_OnVehicleSpawn called: %d", vehicleid);
  731. new
  732. end = _:YSI_g_sCallbackEnd[ALS_OnVehicleSpawn],
  733. start = _:YSI_g_sCallbackStart[ALS_OnVehicleSpawn],
  734. ret = ALS_R_VehicleSpawn;
  735. do
  736. {
  737. #emit PUSH.S vehicleid
  738. #emit PUSH.C 4
  739. #emit CONST.alt YSI_g_sCallbackAddresses
  740. #emit LOAD.S.pri start
  741. #emit INC.pri
  742. #emit STOR.S.pri start
  743. #emit LIDX
  744. #emit MOVE.alt
  745. #emit LCTRL 6
  746. #emit ADD.C 24
  747. #emit PUSH.pri
  748. #emit MOVE.pri
  749. #emit SCTRL 6
  750. #emit MOVE.alt
  751. #emit CONST.pri 0xFFFFFFFE
  752. #emit AND
  753. #emit PUSH.pri
  754. #emit LOAD.S.pri ret
  755. #emit AND
  756. #emit POP.alt
  757. #emit OR
  758. #emit STOR.S.pri ret
  759. }
  760. while (start != end && ret >= 0);
  761. return (ret == 1);
  762. }
  763. #if defined _ALS_OnVehicleSpawn
  764. #undef OnVehicleSpawn
  765. #else
  766. #define _ALS_OnVehicleSpawn
  767. #endif
  768. #define OnVehicleSpawn(%0) S@@_OnVehicleSpawn(%0)
  769. HOOK_FORWARD<VehicleSpawn>
  770. public OnVehicleDeath(vehicleid, killerid)
  771. {
  772. P:2("Hooks_OnVehicleDeath called: %d, %d", vehicleid, killerid);
  773. new
  774. end = _:YSI_g_sCallbackEnd[ALS_OnVehicleDeath],
  775. start = _:YSI_g_sCallbackStart[ALS_OnVehicleDeath],
  776. ret = ALS_R_VehicleDeath;
  777. do
  778. {
  779. #emit PUSH.S killerid
  780. #emit PUSH.S vehicleid
  781. #emit PUSH.C 8
  782. #emit CONST.alt YSI_g_sCallbackAddresses
  783. #emit LOAD.S.pri start
  784. #emit INC.pri
  785. #emit STOR.S.pri start
  786. #emit LIDX
  787. #emit MOVE.alt
  788. #emit LCTRL 6
  789. #emit ADD.C 24
  790. #emit PUSH.pri
  791. #emit MOVE.pri
  792. #emit SCTRL 6
  793. #emit MOVE.alt
  794. #emit CONST.pri 0xFFFFFFFE
  795. #emit AND
  796. #emit PUSH.pri
  797. #emit LOAD.S.pri ret
  798. #emit AND
  799. #emit POP.alt
  800. #emit OR
  801. #emit STOR.S.pri ret
  802. }
  803. while (start != end && ret >= 0);
  804. return (ret == 1);
  805. }
  806. #if defined _ALS_OnVehicleDeath
  807. #undef OnVehicleDeath
  808. #else
  809. #define _ALS_OnVehicleDeath
  810. #endif
  811. #define OnVehicleDeath(%0) S@@_OnVehicleDeath(%0)
  812. HOOK_FORWARD<VehicleDeath>
  813. public OnPlayerText(playerid, text[])
  814. {
  815. P:2("Hooks_OnPlayerText called: %d, \"%s\"", playerid, text);
  816. new
  817. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerText],
  818. start = _:YSI_g_sCallbackStart[ALS_OnPlayerText],
  819. ret = ALS_R_PlayerText;
  820. do
  821. {
  822. #emit PUSH.S text
  823. #emit PUSH.S playerid
  824. #emit PUSH.C 8
  825. #emit CONST.alt YSI_g_sCallbackAddresses
  826. #emit LOAD.S.pri start
  827. #emit INC.pri
  828. #emit STOR.S.pri start
  829. #emit LIDX
  830. #emit MOVE.alt
  831. #emit LCTRL 6
  832. #emit ADD.C 24
  833. #emit PUSH.pri
  834. #emit MOVE.pri
  835. #emit SCTRL 6
  836. #emit MOVE.alt
  837. #emit CONST.pri 0xFFFFFFFE
  838. #emit AND
  839. #emit PUSH.pri
  840. #emit LOAD.S.pri ret
  841. #emit AND
  842. #emit POP.alt
  843. #emit OR
  844. #emit STOR.S.pri ret
  845. }
  846. while (start != end && ret >= 0);
  847. return (ret == 1);
  848. }
  849. #if defined _ALS_OnPlayerText
  850. #undef OnPlayerText
  851. #else
  852. #define _ALS_OnPlayerText
  853. #endif
  854. #define OnPlayerText(%0) S@@_OnPlayerText(%0)
  855. HOOK_FORWARD<PlayerText>
  856. public OnPlayerCommandText(playerid, cmdtext[])
  857. {
  858. P:2("Hooks_OnPlayerCommandText called: %d, \"%s\"", playerid, cmdtext);
  859. new
  860. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerCommandText],
  861. start = _:YSI_g_sCallbackStart[ALS_OnPlayerCommandText],
  862. ret = ALS_R_PlayerCommandText;
  863. do
  864. {
  865. #emit PUSH.S cmdtext
  866. #emit PUSH.S playerid
  867. #emit PUSH.C 8
  868. #emit CONST.alt YSI_g_sCallbackAddresses
  869. #emit LOAD.S.pri start
  870. #emit INC.pri
  871. #emit STOR.S.pri start
  872. #emit LIDX
  873. #emit MOVE.alt
  874. #emit LCTRL 6
  875. #emit ADD.C 24
  876. #emit PUSH.pri
  877. #emit MOVE.pri
  878. #emit SCTRL 6
  879. // THIS CODE IS SUBTLY DIFFERENT!
  880. #emit LOAD.S.alt ret
  881. #emit OR
  882. #emit STOR.S.pri ret
  883. }
  884. while (start != end && ret >= 0);
  885. return (ret == 1);
  886. }
  887. #if defined _ALS_OnPlayerCommandText
  888. #undef OnPlayerCommandText
  889. #else
  890. #define _ALS_OnPlayerCommandText
  891. #endif
  892. #define OnPlayerCommandText(%0) S@@_OnPlayerCommandText(%0)
  893. HOOK_FORWARD<PlayerCommandText>
  894. public OnPlayerRequestClass(playerid, classid)
  895. {
  896. P:2("Hooks_OnPlayerRequestClass called: %d, %d", playerid, classid);
  897. new
  898. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerRequestClass],
  899. start = _:YSI_g_sCallbackStart[ALS_OnPlayerRequestClass],
  900. ret = ALS_R_PlayerRequestClass;
  901. do
  902. {
  903. #emit PUSH.S classid
  904. #emit PUSH.S playerid
  905. #emit PUSH.C 8
  906. #emit CONST.alt YSI_g_sCallbackAddresses
  907. #emit LOAD.S.pri start
  908. #emit INC.pri
  909. #emit STOR.S.pri start
  910. #emit LIDX
  911. #emit MOVE.alt
  912. #emit LCTRL 6
  913. #emit ADD.C 24
  914. #emit PUSH.pri
  915. #emit MOVE.pri
  916. #emit SCTRL 6
  917. #emit MOVE.alt
  918. #emit CONST.pri 0xFFFFFFFE
  919. #emit AND
  920. #emit PUSH.pri
  921. #emit LOAD.S.pri ret
  922. #emit AND
  923. #emit POP.alt
  924. #emit OR
  925. #emit STOR.S.pri ret
  926. }
  927. while (start != end && ret >= 0);
  928. return (ret == 1);
  929. }
  930. #if defined _ALS_OnPlayerRequestClass
  931. #undef OnPlayerRequestClass
  932. #else
  933. #define _ALS_OnPlayerRequestClass
  934. #endif
  935. #define OnPlayerRequestClass(%0) S@@_OnPlayerRequestClass(%0)
  936. HOOK_FORWARD<PlayerRequestClass>
  937. public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
  938. {
  939. P:2("Hooks_OnPlayerEnterVehicle called: %d, %d, %d", playerid, vehicleid, ispassenger);
  940. new
  941. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerEnterVehicle],
  942. start = _:YSI_g_sCallbackStart[ALS_OnPlayerEnterVehicle],
  943. ret = ALS_R_PlayerEnterVehicle;
  944. do
  945. {
  946. #emit PUSH.S ispassenger
  947. #emit PUSH.S vehicleid
  948. #emit PUSH.S playerid
  949. #emit PUSH.C 12
  950. #emit CONST.alt YSI_g_sCallbackAddresses
  951. #emit LOAD.S.pri start
  952. #emit INC.pri
  953. #emit STOR.S.pri start
  954. #emit LIDX
  955. #emit MOVE.alt
  956. #emit LCTRL 6
  957. #emit ADD.C 24
  958. #emit PUSH.pri
  959. #emit MOVE.pri
  960. #emit SCTRL 6
  961. #emit MOVE.alt
  962. #emit CONST.pri 0xFFFFFFFE
  963. #emit AND
  964. #emit PUSH.pri
  965. #emit LOAD.S.pri ret
  966. #emit AND
  967. #emit POP.alt
  968. #emit OR
  969. #emit STOR.S.pri ret
  970. }
  971. while (start != end && ret >= 0);
  972. return (ret == 1);
  973. }
  974. #if defined _ALS_OnPlayerEnterVehicle
  975. #undef OnPlayerEnterVehicle
  976. #else
  977. #define _ALS_OnPlayerEnterVehicle
  978. #endif
  979. #define OnPlayerEnterVehicle(%0) S@@_OnPlayerEnterVehicle(%0)
  980. HOOK_FORWARD<PlayerEnterVehicle>
  981. public OnPlayerExitVehicle(playerid, vehicleid)
  982. {
  983. P:2("Hooks_OnPlayerExitVehicle called: %d, %d", playerid, vehicleid);
  984. new
  985. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerExitVehicle],
  986. start = _:YSI_g_sCallbackStart[ALS_OnPlayerExitVehicle],
  987. ret = ALS_R_PlayerExitVehicle;
  988. do
  989. {
  990. #emit PUSH.S vehicleid
  991. #emit PUSH.S playerid
  992. #emit PUSH.C 8
  993. #emit CONST.alt YSI_g_sCallbackAddresses
  994. #emit LOAD.S.pri start
  995. #emit INC.pri
  996. #emit STOR.S.pri start
  997. #emit LIDX
  998. #emit MOVE.alt
  999. #emit LCTRL 6
  1000. #emit ADD.C 24
  1001. #emit PUSH.pri
  1002. #emit MOVE.pri
  1003. #emit SCTRL 6
  1004. #emit MOVE.alt
  1005. #emit CONST.pri 0xFFFFFFFE
  1006. #emit AND
  1007. #emit PUSH.pri
  1008. #emit LOAD.S.pri ret
  1009. #emit AND
  1010. #emit POP.alt
  1011. #emit OR
  1012. #emit STOR.S.pri ret
  1013. }
  1014. while (start != end && ret >= 0);
  1015. return (ret == 1);
  1016. }
  1017. #if defined _ALS_OnPlayerExitVehicle
  1018. #undef OnPlayerExitVehicle
  1019. #else
  1020. #define _ALS_OnPlayerExitVehicle
  1021. #endif
  1022. #define OnPlayerExitVehicle(%0) S@@_OnPlayerExitVehicle(%0)
  1023. HOOK_FORWARD<PlayerExitVehicle>
  1024. public OnPlayerStateChange(playerid, newstate, oldstate)
  1025. {
  1026. P:2("Hooks_OnPlayerStateChange called: %d, %d, %d", playerid, newstate, oldstate);
  1027. new
  1028. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerStateChange],
  1029. start = _:YSI_g_sCallbackStart[ALS_OnPlayerStateChange],
  1030. ret = ALS_R_PlayerStateChange;
  1031. do
  1032. {
  1033. #emit PUSH.S oldstate
  1034. #emit PUSH.S newstate
  1035. #emit PUSH.S playerid
  1036. #emit PUSH.C 12
  1037. #emit CONST.alt YSI_g_sCallbackAddresses
  1038. #emit LOAD.S.pri start
  1039. #emit INC.pri
  1040. #emit STOR.S.pri start
  1041. #emit LIDX
  1042. #emit MOVE.alt
  1043. #emit LCTRL 6
  1044. #emit ADD.C 24
  1045. #emit PUSH.pri
  1046. #emit MOVE.pri
  1047. #emit SCTRL 6
  1048. #emit MOVE.alt
  1049. #emit CONST.pri 0xFFFFFFFE
  1050. #emit AND
  1051. #emit PUSH.pri
  1052. #emit LOAD.S.pri ret
  1053. #emit AND
  1054. #emit POP.alt
  1055. #emit OR
  1056. #emit STOR.S.pri ret
  1057. }
  1058. while (start != end && ret >= 0);
  1059. return (ret == 1);
  1060. }
  1061. #if defined _ALS_OnPlayerStateChange
  1062. #undef OnPlayerStateChange
  1063. #else
  1064. #define _ALS_OnPlayerStateChange
  1065. #endif
  1066. #define OnPlayerStateChange(%0) S@@_OnPlayerStateChange(%0)
  1067. HOOK_FORWARD<PlayerStateChange>
  1068. public OnPlayerEnterCheckpoint(playerid)
  1069. {
  1070. P:2("Hooks_OnPlayerEnterCheckpoint called: %d", playerid);
  1071. new
  1072. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerEnterCheckpoint],
  1073. start = _:YSI_g_sCallbackStart[ALS_OnPlayerEnterCheckpoint],
  1074. ret = ALS_R_PlayerEnterCheckpoint;
  1075. do
  1076. {
  1077. #emit PUSH.S playerid
  1078. #emit PUSH.C 4
  1079. #emit CONST.alt YSI_g_sCallbackAddresses
  1080. #emit LOAD.S.pri start
  1081. #emit INC.pri
  1082. #emit STOR.S.pri start
  1083. #emit LIDX
  1084. #emit MOVE.alt
  1085. #emit LCTRL 6
  1086. #emit ADD.C 24
  1087. #emit PUSH.pri
  1088. #emit MOVE.pri
  1089. #emit SCTRL 6
  1090. #emit MOVE.alt
  1091. #emit CONST.pri 0xFFFFFFFE
  1092. #emit AND
  1093. #emit PUSH.pri
  1094. #emit LOAD.S.pri ret
  1095. #emit AND
  1096. #emit POP.alt
  1097. #emit OR
  1098. #emit STOR.S.pri ret
  1099. }
  1100. while (start != end && ret >= 0);
  1101. return (ret == 1);
  1102. }
  1103. #if defined _ALS_OnPlayerEnterCheckpoint
  1104. #undef OnPlayerEnterCheckpoint
  1105. #else
  1106. #define _ALS_OnPlayerEnterCheckpoint
  1107. #endif
  1108. #define OnPlayerEnterCheckpoint(%0) S@@_OnPlayerEnterCheckpoint(%0)
  1109. HOOK_FORWARD<PlayerEnterCheckpoint>
  1110. public OnPlayerLeaveCheckpoint(playerid)
  1111. {
  1112. P:2("Hooks_OnPlayerLeaveCheckpoint called: %d", playerid);
  1113. new
  1114. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerLeaveCheckpoint],
  1115. start = _:YSI_g_sCallbackStart[ALS_OnPlayerLeaveCheckpoint],
  1116. ret = ALS_R_PlayerLeaveCheckpoint;
  1117. do
  1118. {
  1119. #emit PUSH.S playerid
  1120. #emit PUSH.C 4
  1121. #emit CONST.alt YSI_g_sCallbackAddresses
  1122. #emit LOAD.S.pri start
  1123. #emit INC.pri
  1124. #emit STOR.S.pri start
  1125. #emit LIDX
  1126. #emit MOVE.alt
  1127. #emit LCTRL 6
  1128. #emit ADD.C 24
  1129. #emit PUSH.pri
  1130. #emit MOVE.pri
  1131. #emit SCTRL 6
  1132. #emit MOVE.alt
  1133. #emit CONST.pri 0xFFFFFFFE
  1134. #emit AND
  1135. #emit PUSH.pri
  1136. #emit LOAD.S.pri ret
  1137. #emit AND
  1138. #emit POP.alt
  1139. #emit OR
  1140. #emit STOR.S.pri ret
  1141. }
  1142. while (start != end && ret >= 0);
  1143. return (ret == 1);
  1144. }
  1145. #if defined _ALS_OnPlayerLeaveCheckpoint
  1146. #undef OnPlayerLeaveCheckpoint
  1147. #else
  1148. #define _ALS_OnPlayerLeaveCheckpoint
  1149. #endif
  1150. #define OnPlayerLeaveCheckpoint(%0) S@@_OnPlayerLeaveCheckpoint(%0)
  1151. HOOK_FORWARD<PlayerLeaveCheckpoint>
  1152. public OnPlayerEnterRaceCheckpoint(playerid)
  1153. {
  1154. P:2("Hooks_OnPlayerEnterRaceCheckpoint called: %d", playerid);
  1155. new
  1156. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerEnterRaceCheckpoint],
  1157. start = _:YSI_g_sCallbackStart[ALS_OnPlayerEnterRaceCheckpoint],
  1158. ret = ALS_R_PlayerEnterRaceCheckpoint;
  1159. do
  1160. {
  1161. #emit PUSH.S playerid
  1162. #emit PUSH.C 4
  1163. #emit CONST.alt YSI_g_sCallbackAddresses
  1164. #emit LOAD.S.pri start
  1165. #emit INC.pri
  1166. #emit STOR.S.pri start
  1167. #emit LIDX
  1168. #emit MOVE.alt
  1169. #emit LCTRL 6
  1170. #emit ADD.C 24
  1171. #emit PUSH.pri
  1172. #emit MOVE.pri
  1173. #emit SCTRL 6
  1174. #emit MOVE.alt
  1175. #emit CONST.pri 0xFFFFFFFE
  1176. #emit AND
  1177. #emit PUSH.pri
  1178. #emit LOAD.S.pri ret
  1179. #emit AND
  1180. #emit POP.alt
  1181. #emit OR
  1182. #emit STOR.S.pri ret
  1183. }
  1184. while (start != end && ret >= 0);
  1185. return (ret == 1);
  1186. }
  1187. #if defined _ALS_OnPlayerEnterRaceCP
  1188. #undef OnPlayerEnterRaceCheckpoint
  1189. #else
  1190. #define _ALS_OnPlayerEnterRaceCP
  1191. #endif
  1192. #define OnPlayerEnterRaceCheckpoint(%0) S@@_OnPlayerEnterRaceCheckpoint(%0)
  1193. HOOK_FORWARD<PlayerEnterRaceCheckpoint>
  1194. public OnPlayerLeaveRaceCheckpoint(playerid)
  1195. {
  1196. P:2("Hooks_OnPlayerLeaveRaceCheckpoint called: %d", playerid);
  1197. new
  1198. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerLeaveRaceCheckpoint],
  1199. start = _:YSI_g_sCallbackStart[ALS_OnPlayerLeaveRaceCheckpoint],
  1200. ret = ALS_R_PlayerLeaveRaceCheckpoint;
  1201. do
  1202. {
  1203. #emit PUSH.S playerid
  1204. #emit PUSH.C 4
  1205. #emit CONST.alt YSI_g_sCallbackAddresses
  1206. #emit LOAD.S.pri start
  1207. #emit INC.pri
  1208. #emit STOR.S.pri start
  1209. #emit LIDX
  1210. #emit MOVE.alt
  1211. #emit LCTRL 6
  1212. #emit ADD.C 24
  1213. #emit PUSH.pri
  1214. #emit MOVE.pri
  1215. #emit SCTRL 6
  1216. #emit MOVE.alt
  1217. #emit CONST.pri 0xFFFFFFFE
  1218. #emit AND
  1219. #emit PUSH.pri
  1220. #emit LOAD.S.pri ret
  1221. #emit AND
  1222. #emit POP.alt
  1223. #emit OR
  1224. #emit STOR.S.pri ret
  1225. }
  1226. while (start != end && ret >= 0);
  1227. return (ret == 1);
  1228. }
  1229. #if defined _ALS_OnPlayerLeaveRaceCP
  1230. #undef OnPlayerLeaveRaceCheckpoint
  1231. #else
  1232. #define _ALS_OnPlayerLeaveRaceCP
  1233. #endif
  1234. #define OnPlayerLeaveRaceCheckpoint(%0) S@@_OnPlayerLeaveRaceCheckpoint(%0)
  1235. HOOK_FORWARD<PlayerLeaveRaceCheckpoint>
  1236. public OnRconCommand(cmd[])
  1237. {
  1238. P:2("Hooks_OnRconCommand called: \"%s\"", cmd);
  1239. new
  1240. end = _:YSI_g_sCallbackEnd[ALS_OnRconCommand],
  1241. start = _:YSI_g_sCallbackStart[ALS_OnRconCommand],
  1242. ret = ALS_R_RconCommand;
  1243. do
  1244. {
  1245. #emit PUSH.S cmd
  1246. #emit PUSH.C 4
  1247. #emit CONST.alt YSI_g_sCallbackAddresses
  1248. #emit LOAD.S.pri start
  1249. #emit INC.pri
  1250. #emit STOR.S.pri start
  1251. #emit LIDX
  1252. #emit MOVE.alt
  1253. #emit LCTRL 6
  1254. #emit ADD.C 24
  1255. #emit PUSH.pri
  1256. #emit MOVE.pri
  1257. #emit SCTRL 6
  1258. #emit MOVE.alt
  1259. #emit CONST.pri 0xFFFFFFFE
  1260. #emit AND
  1261. #emit PUSH.pri
  1262. #emit LOAD.S.pri ret
  1263. #emit AND
  1264. #emit POP.alt
  1265. #emit OR
  1266. #emit STOR.S.pri ret
  1267. }
  1268. while (start != end && ret >= 0);
  1269. return (ret == 1);
  1270. }
  1271. #if defined _ALS_OnRconCommand
  1272. #undef OnRconCommand
  1273. #else
  1274. #define _ALS_OnRconCommand
  1275. #endif
  1276. #define OnRconCommand(%0) S@@_OnRconCommand(%0)
  1277. HOOK_FORWARD<RconCommand>
  1278. public OnPlayerRequestSpawn(playerid)
  1279. {
  1280. P:2("Hooks_OnPlayerRequestSpawn called: %d", playerid);
  1281. new
  1282. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerRequestSpawn],
  1283. start = _:YSI_g_sCallbackStart[ALS_OnPlayerRequestSpawn],
  1284. ret = ALS_R_PlayerRequestSpawn;
  1285. do
  1286. {
  1287. //printf("start: %d", start);
  1288. #emit PUSH.S playerid
  1289. #emit PUSH.C 4
  1290. #emit CONST.alt YSI_g_sCallbackAddresses
  1291. #emit LOAD.S.pri start
  1292. #emit INC.pri
  1293. #emit STOR.S.pri start
  1294. #emit LIDX
  1295. #emit MOVE.alt
  1296. #emit LCTRL 6
  1297. #emit ADD.C 24
  1298. #emit PUSH.pri
  1299. #emit MOVE.pri
  1300. #emit SCTRL 6
  1301. #emit MOVE.alt
  1302. #emit CONST.pri 0xFFFFFFFE
  1303. #emit AND
  1304. #emit PUSH.pri
  1305. #emit LOAD.S.pri ret
  1306. #emit AND
  1307. #emit POP.alt
  1308. #emit OR
  1309. #emit STOR.S.pri ret
  1310. //printf("ret: %d", ret);
  1311. }
  1312. while (start != end && ret >= 0);
  1313. return (ret == 1);
  1314. }
  1315. #if defined _ALS_OnPlayerRequestSpawn
  1316. #undef OnPlayerRequestSpawn
  1317. #else
  1318. #define _ALS_OnPlayerRequestSpawn
  1319. #endif
  1320. #define OnPlayerRequestSpawn(%0) S@@_OnPlayerRequestSpawn(%0)
  1321. HOOK_FORWARD<PlayerRequestSpawn>
  1322. public OnObjectMoved(objectid)
  1323. {
  1324. P:2("Hooks_OnObjectMoved called: %d", objectid);
  1325. new
  1326. end = _:YSI_g_sCallbackEnd[ALS_OnObjectMoved],
  1327. start = _:YSI_g_sCallbackStart[ALS_OnObjectMoved],
  1328. ret = ALS_R_ObjectMoved;
  1329. do
  1330. {
  1331. #emit PUSH.S objectid
  1332. #emit PUSH.C 4
  1333. #emit CONST.alt YSI_g_sCallbackAddresses
  1334. #emit LOAD.S.pri start
  1335. #emit INC.pri
  1336. #emit STOR.S.pri start
  1337. #emit LIDX
  1338. #emit MOVE.alt
  1339. #emit LCTRL 6
  1340. #emit ADD.C 24
  1341. #emit PUSH.pri
  1342. #emit MOVE.pri
  1343. #emit SCTRL 6
  1344. #emit MOVE.alt
  1345. #emit CONST.pri 0xFFFFFFFE
  1346. #emit AND
  1347. #emit PUSH.pri
  1348. #emit LOAD.S.pri ret
  1349. #emit AND
  1350. #emit POP.alt
  1351. #emit OR
  1352. #emit STOR.S.pri ret
  1353. }
  1354. while (start != end && ret >= 0);
  1355. return (ret == 1);
  1356. }
  1357. #if defined _ALS_OnObjectMoved
  1358. #undef OnObjectMoved
  1359. #else
  1360. #define _ALS_OnObjectMoved
  1361. #endif
  1362. #define OnObjectMoved(%0) S@@_OnObjectMoved(%0)
  1363. HOOK_FORWARD<ObjectMoved>
  1364. public OnPlayerObjectMoved(playerid, objectid)
  1365. {
  1366. P:2("Hooks_OnPlayerObjectMoved called: %d, %d", playerid, objectid);
  1367. new
  1368. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerObjectMoved],
  1369. start = _:YSI_g_sCallbackStart[ALS_OnPlayerObjectMoved],
  1370. ret = ALS_R_PlayerObjectMoved;
  1371. do
  1372. {
  1373. #emit PUSH.S objectid
  1374. #emit PUSH.S playerid
  1375. #emit PUSH.C 8
  1376. #emit CONST.alt YSI_g_sCallbackAddresses
  1377. #emit LOAD.S.pri start
  1378. #emit INC.pri
  1379. #emit STOR.S.pri start
  1380. #emit LIDX
  1381. #emit MOVE.alt
  1382. #emit LCTRL 6
  1383. #emit ADD.C 24
  1384. #emit PUSH.pri
  1385. #emit MOVE.pri
  1386. #emit SCTRL 6
  1387. #emit MOVE.alt
  1388. #emit CONST.pri 0xFFFFFFFE
  1389. #emit AND
  1390. #emit PUSH.pri
  1391. #emit LOAD.S.pri ret
  1392. #emit AND
  1393. #emit POP.alt
  1394. #emit OR
  1395. #emit STOR.S.pri ret
  1396. }
  1397. while (start != end && ret >= 0);
  1398. return (ret == 1);
  1399. }
  1400. #if defined _ALS_OnPlayerObjectMoved
  1401. #undef OnPlayerObjectMoved
  1402. #else
  1403. #define _ALS_OnPlayerObjectMoved
  1404. #endif
  1405. #define OnPlayerObjectMoved(%0) S@@_OnPlayerObjectMoved(%0)
  1406. HOOK_FORWARD<PlayerObjectMoved>
  1407. public OnPlayerPickUpPickup(playerid, pickupid)
  1408. {
  1409. P:2("Hooks_OnPlayerPickUpPickup called: %d, %d", playerid, pickupid);
  1410. new
  1411. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerPickUpPickup],
  1412. start = _:YSI_g_sCallbackStart[ALS_OnPlayerPickUpPickup],
  1413. ret = ALS_R_PlayerPickUpPickup;
  1414. do
  1415. {
  1416. #emit PUSH.S pickupid
  1417. #emit PUSH.S playerid
  1418. #emit PUSH.C 8
  1419. #emit CONST.alt YSI_g_sCallbackAddresses
  1420. #emit LOAD.S.pri start
  1421. #emit INC.pri
  1422. #emit STOR.S.pri start
  1423. #emit LIDX
  1424. #emit MOVE.alt
  1425. #emit LCTRL 6
  1426. #emit ADD.C 24
  1427. #emit PUSH.pri
  1428. #emit MOVE.pri
  1429. #emit SCTRL 6
  1430. #emit MOVE.alt
  1431. #emit CONST.pri 0xFFFFFFFE
  1432. #emit AND
  1433. #emit PUSH.pri
  1434. #emit LOAD.S.pri ret
  1435. #emit AND
  1436. #emit POP.alt
  1437. #emit OR
  1438. #emit STOR.S.pri ret
  1439. }
  1440. while (start != end && ret >= 0);
  1441. return (ret == 1);
  1442. }
  1443. #if defined _ALS_OnPlayerPickUpPickup
  1444. #undef OnPlayerPickUpPickup
  1445. #else
  1446. #define _ALS_OnPlayerPickUpPickup
  1447. #endif
  1448. #define OnPlayerPickUpPickup(%0) S@@_OnPlayerPickUpPickup(%0)
  1449. HOOK_FORWARD<PlayerPickUpPickup>
  1450. public OnVehicleMod(playerid, vehicleid, componentid)
  1451. {
  1452. P:2("Hooks_OnVehicleMod called: %d, %d, %d", playerid, vehicleid, componentid);
  1453. new
  1454. end = _:YSI_g_sCallbackEnd[ALS_OnVehicleMod],
  1455. start = _:YSI_g_sCallbackStart[ALS_OnVehicleMod],
  1456. ret = ALS_R_VehicleMod;
  1457. do
  1458. {
  1459. #emit PUSH.S componentid
  1460. #emit PUSH.S vehicleid
  1461. #emit PUSH.S playerid
  1462. #emit PUSH.C 12
  1463. #emit CONST.alt YSI_g_sCallbackAddresses
  1464. #emit LOAD.S.pri start
  1465. #emit INC.pri
  1466. #emit STOR.S.pri start
  1467. #emit LIDX
  1468. #emit MOVE.alt
  1469. #emit LCTRL 6
  1470. #emit ADD.C 24
  1471. #emit PUSH.pri
  1472. #emit MOVE.pri
  1473. #emit SCTRL 6
  1474. #emit MOVE.alt
  1475. #emit CONST.pri 0xFFFFFFFE
  1476. #emit AND
  1477. #emit PUSH.pri
  1478. #emit LOAD.S.pri ret
  1479. #emit AND
  1480. #emit POP.alt
  1481. #emit OR
  1482. #emit STOR.S.pri ret
  1483. }
  1484. while (start != end && ret >= 0);
  1485. return (ret == 1);
  1486. }
  1487. #if defined _ALS_OnVehicleMod
  1488. #undef OnVehicleMod
  1489. #else
  1490. #define _ALS_OnVehicleMod
  1491. #endif
  1492. #define OnVehicleMod(%0) S@@_OnVehicleMod(%0)
  1493. HOOK_FORWARD<VehicleMod>
  1494. public OnEnterExitModShop(playerid, enterexit, interiorid)
  1495. {
  1496. P:2("Hooks_OnEnterExitModShop called: %d, %d, %d", playerid, enterexit, interiorid);
  1497. new
  1498. end = _:YSI_g_sCallbackEnd[ALS_OnEnterExitModShop],
  1499. start = _:YSI_g_sCallbackStart[ALS_OnEnterExitModShop],
  1500. ret = ALS_R_EnterExitModShop;
  1501. do
  1502. {
  1503. #emit PUSH.S interiorid
  1504. #emit PUSH.S enterexit
  1505. #emit PUSH.S playerid
  1506. #emit PUSH.C 12
  1507. #emit CONST.alt YSI_g_sCallbackAddresses
  1508. #emit LOAD.S.pri start
  1509. #emit INC.pri
  1510. #emit STOR.S.pri start
  1511. #emit LIDX
  1512. #emit MOVE.alt
  1513. #emit LCTRL 6
  1514. #emit ADD.C 24
  1515. #emit PUSH.pri
  1516. #emit MOVE.pri
  1517. #emit SCTRL 6
  1518. #emit MOVE.alt
  1519. #emit CONST.pri 0xFFFFFFFE
  1520. #emit AND
  1521. #emit PUSH.pri
  1522. #emit LOAD.S.pri ret
  1523. #emit AND
  1524. #emit POP.alt
  1525. #emit OR
  1526. #emit STOR.S.pri ret
  1527. }
  1528. while (start != end && ret >= 0);
  1529. return (ret == 1);
  1530. }
  1531. #if defined _ALS_OnEnterExitModShop
  1532. #undef OnEnterExitModShop
  1533. #else
  1534. #define _ALS_OnEnterExitModShop
  1535. #endif
  1536. #define OnEnterExitModShop(%0) S@@_OnEnterExitModShop(%0)
  1537. HOOK_FORWARD<EnterExitModShop>
  1538. public OnVehiclePaintjob(playerid, vehicleid, paintjobid)
  1539. {
  1540. P:2("Hooks_OnVehiclePaintjob called: %d, %d, %d", playerid, vehicleid, paintjobid);
  1541. new
  1542. end = _:YSI_g_sCallbackEnd[ALS_OnVehiclePaintjob],
  1543. start = _:YSI_g_sCallbackStart[ALS_OnVehiclePaintjob],
  1544. ret = ALS_R_VehiclePaintjob;
  1545. do
  1546. {
  1547. #emit PUSH.S paintjobid
  1548. #emit PUSH.S vehicleid
  1549. #emit PUSH.S playerid
  1550. #emit PUSH.C 12
  1551. #emit CONST.alt YSI_g_sCallbackAddresses
  1552. #emit LOAD.S.pri start
  1553. #emit INC.pri
  1554. #emit STOR.S.pri start
  1555. #emit LIDX
  1556. #emit MOVE.alt
  1557. #emit LCTRL 6
  1558. #emit ADD.C 24
  1559. #emit PUSH.pri
  1560. #emit MOVE.pri
  1561. #emit SCTRL 6
  1562. #emit MOVE.alt
  1563. #emit CONST.pri 0xFFFFFFFE
  1564. #emit AND
  1565. #emit PUSH.pri
  1566. #emit LOAD.S.pri ret
  1567. #emit AND
  1568. #emit POP.alt
  1569. #emit OR
  1570. #emit STOR.S.pri ret
  1571. }
  1572. while (start != end && ret >= 0);
  1573. return (ret == 1);
  1574. }
  1575. #if defined _ALS_OnVehiclePaintjob
  1576. #undef OnVehiclePaintjob
  1577. #else
  1578. #define _ALS_OnVehiclePaintjob
  1579. #endif
  1580. #define OnVehiclePaintjob(%0) S@@_OnVehiclePaintjob(%0)
  1581. HOOK_FORWARD<VehiclePaintjob>
  1582. public OnVehicleRespray(playerid, vehicleid, color1, color2)
  1583. {
  1584. P:2("Hooks_OnVehicleRespray called: %d, %d, %d, %d", playerid, vehicleid, color1, color2);
  1585. new
  1586. end = _:YSI_g_sCallbackEnd[ALS_OnVehicleRespray],
  1587. start = _:YSI_g_sCallbackStart[ALS_OnVehicleRespray],
  1588. ret = ALS_R_VehicleRespray;
  1589. do
  1590. {
  1591. #emit PUSH.S color2
  1592. #emit PUSH.S color1
  1593. #emit PUSH.S vehicleid
  1594. #emit PUSH.S playerid
  1595. #emit PUSH.C 16
  1596. #emit CONST.alt YSI_g_sCallbackAddresses
  1597. #emit LOAD.S.pri start
  1598. #emit INC.pri
  1599. #emit STOR.S.pri start
  1600. #emit LIDX
  1601. #emit MOVE.alt
  1602. #emit LCTRL 6
  1603. #emit ADD.C 24
  1604. #emit PUSH.pri
  1605. #emit MOVE.pri
  1606. #emit SCTRL 6
  1607. #emit MOVE.alt
  1608. #emit CONST.pri 0xFFFFFFFE
  1609. #emit AND
  1610. #emit PUSH.pri
  1611. #emit LOAD.S.pri ret
  1612. #emit AND
  1613. #emit POP.alt
  1614. #emit OR
  1615. #emit STOR.S.pri ret
  1616. }
  1617. while (start != end && ret >= 0);
  1618. return (ret == 1);
  1619. }
  1620. #if defined _ALS_OnVehicleRespray
  1621. #undef OnVehicleRespray
  1622. #else
  1623. #define _ALS_OnVehicleRespray
  1624. #endif
  1625. #define OnVehicleRespray(%0) S@@_OnVehicleRespray(%0)
  1626. HOOK_FORWARD<VehicleRespray>
  1627. public OnVehicleDamageStatusUpdate(vehicleid, playerid)
  1628. {
  1629. P:2("Hooks_OnVehicleDamageStatusUpdate called: %d, %d", vehicleid, playerid);
  1630. new
  1631. end = _:YSI_g_sCallbackEnd[ALS_OnVehicleDamageStatusUpdate],
  1632. start = _:YSI_g_sCallbackStart[ALS_OnVehicleDamageStatusUpdate],
  1633. ret = ALS_R_VehicleDamageStatusUpdate;
  1634. do
  1635. {
  1636. #emit PUSH.S playerid
  1637. #emit PUSH.S vehicleid
  1638. #emit PUSH.C 8
  1639. #emit CONST.alt YSI_g_sCallbackAddresses
  1640. #emit LOAD.S.pri start
  1641. #emit INC.pri
  1642. #emit STOR.S.pri start
  1643. #emit LIDX
  1644. #emit MOVE.alt
  1645. #emit LCTRL 6
  1646. #emit ADD.C 24
  1647. #emit PUSH.pri
  1648. #emit MOVE.pri
  1649. #emit SCTRL 6
  1650. #emit MOVE.alt
  1651. #emit CONST.pri 0xFFFFFFFE
  1652. #emit AND
  1653. #emit PUSH.pri
  1654. #emit LOAD.S.pri ret
  1655. #emit AND
  1656. #emit POP.alt
  1657. #emit OR
  1658. #emit STOR.S.pri ret
  1659. }
  1660. while (start != end && ret >= 0);
  1661. return (ret == 1);
  1662. }
  1663. #if defined _ALS_OnVehicleDamageStatusUpd
  1664. #undef OnVehicleDamageStatusUpdate
  1665. #else
  1666. #define _ALS_OnVehicleDamageStatusUpd
  1667. #endif
  1668. #define OnVehicleDamageStatusUpdate(%0) S@@_OnVehicleDamageStatusUpdate(%0)
  1669. HOOK_FORWARD<VehicleDamageStatusUpdate>
  1670. public OnUnoccupiedVehicleUpdate(vehicleid, playerid, passenger_seat)
  1671. {
  1672. P:2("Hooks_OnUnoccupiedVehicleUpdate called: %d, %d, %d", vehicleid, playerid, passenger_seat);
  1673. new
  1674. end = _:YSI_g_sCallbackEnd[ALS_OnUnoccupiedVehicleUpdate],
  1675. start = _:YSI_g_sCallbackStart[ALS_OnUnoccupiedVehicleUpdate],
  1676. ret = ALS_R_UnoccupiedVehicleUpdate;
  1677. do
  1678. {
  1679. #emit PUSH.S passenger_seat
  1680. #emit PUSH.S playerid
  1681. #emit PUSH.S vehicleid
  1682. // I wonder if I could hack the stack with a negative number so that when
  1683. // the called function returns it puts all the header data BACK on to the
  1684. // stack instead of removing the parameters and header.
  1685. #emit PUSH.C 12
  1686. #emit CONST.alt YSI_g_sCallbackAddresses
  1687. #emit LOAD.S.pri start
  1688. #emit INC.pri
  1689. #emit STOR.S.pri start
  1690. #emit LIDX
  1691. #emit MOVE.alt
  1692. #emit LCTRL 6
  1693. #emit ADD.C 24
  1694. #emit PUSH.pri
  1695. #emit MOVE.pri
  1696. #emit SCTRL 6
  1697. #emit MOVE.alt
  1698. #emit CONST.pri 0xFFFFFFFE
  1699. #emit AND
  1700. #emit PUSH.pri
  1701. #emit LOAD.S.pri ret
  1702. #emit AND
  1703. #emit POP.alt
  1704. #emit OR
  1705. #emit STOR.S.pri ret
  1706. }
  1707. while (start != end && ret >= 0);
  1708. return (ret == 1);
  1709. }
  1710. #if defined _ALS_OnUnoccupiedVehicleUpdate
  1711. #undef OnUnoccupiedVehicleUpdate
  1712. #else
  1713. #define _ALS_OnUnoccupiedVehicleUpdate
  1714. #endif
  1715. #define OnUnoccupiedVehicleUpdate(%0) S@@_OnUnoccupiedVehicleUpdate(%0)
  1716. HOOK_FORWARD<UnoccupiedVehicleUpdate>
  1717. public OnPlayerSelectedMenuRow(playerid, row)
  1718. {
  1719. P:2("Hooks_OnPlayerSelectedMenuRow called: %d, %d", playerid, row);
  1720. new
  1721. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerSelectedMenuRow],
  1722. start = _:YSI_g_sCallbackStart[ALS_OnPlayerSelectedMenuRow],
  1723. ret = ALS_R_PlayerSelectedMenuRow;
  1724. do
  1725. {
  1726. #emit PUSH.S row
  1727. #emit PUSH.S playerid
  1728. #emit PUSH.C 8
  1729. #emit CONST.alt YSI_g_sCallbackAddresses
  1730. #emit LOAD.S.pri start
  1731. #emit INC.pri
  1732. #emit STOR.S.pri start
  1733. #emit LIDX
  1734. #emit MOVE.alt
  1735. #emit LCTRL 6
  1736. #emit ADD.C 24
  1737. #emit PUSH.pri
  1738. #emit MOVE.pri
  1739. #emit SCTRL 6
  1740. #emit MOVE.alt
  1741. #emit CONST.pri 0xFFFFFFFE
  1742. #emit AND
  1743. #emit PUSH.pri
  1744. #emit LOAD.S.pri ret
  1745. #emit AND
  1746. #emit POP.alt
  1747. #emit OR
  1748. #emit STOR.S.pri ret
  1749. }
  1750. while (start != end && ret >= 0);
  1751. return (ret == 1);
  1752. }
  1753. #if defined _ALS_OnPlayerSelectedMenuRow
  1754. #undef OnPlayerSelectedMenuRow
  1755. #else
  1756. #define _ALS_OnPlayerSelectedMenuRow
  1757. #endif
  1758. #define OnPlayerSelectedMenuRow(%0) S@@_OnPlayerSelectedMenuRow(%0)
  1759. HOOK_FORWARD<PlayerSelectedMenuRow>
  1760. public OnPlayerExitedMenu(playerid)
  1761. {
  1762. P:2("Hooks_OnPlayerExitedMenu called: %d", playerid);
  1763. new
  1764. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerExitedMenu],
  1765. start = _:YSI_g_sCallbackStart[ALS_OnPlayerExitedMenu],
  1766. ret = ALS_R_PlayerExitedMenu;
  1767. do
  1768. {
  1769. #emit PUSH.S playerid
  1770. #emit PUSH.C 4
  1771. #emit CONST.alt YSI_g_sCallbackAddresses
  1772. #emit LOAD.S.pri start
  1773. #emit INC.pri
  1774. #emit STOR.S.pri start
  1775. #emit LIDX
  1776. #emit MOVE.alt
  1777. #emit LCTRL 6
  1778. #emit ADD.C 24
  1779. #emit PUSH.pri
  1780. #emit MOVE.pri
  1781. #emit SCTRL 6
  1782. #emit MOVE.alt
  1783. #emit CONST.pri 0xFFFFFFFE
  1784. #emit AND
  1785. #emit PUSH.pri
  1786. #emit LOAD.S.pri ret
  1787. #emit AND
  1788. #emit POP.alt
  1789. #emit OR
  1790. #emit STOR.S.pri ret
  1791. }
  1792. while (start != end && ret >= 0);
  1793. return (ret == 1);
  1794. }
  1795. #if defined _ALS_OnPlayerExitedMenu
  1796. #undef OnPlayerExitedMenu
  1797. #else
  1798. #define _ALS_OnPlayerExitedMenu
  1799. #endif
  1800. #define OnPlayerExitedMenu(%0) S@@_OnPlayerExitedMenu(%0)
  1801. HOOK_FORWARD<PlayerExitedMenu>
  1802. public OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid)
  1803. {
  1804. P:2("Hooks_OnPlayerInteriorChange called: %d, %d, %d", playerid, newinteriorid, oldinteriorid);
  1805. new
  1806. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerInteriorChange],
  1807. start = _:YSI_g_sCallbackStart[ALS_OnPlayerInteriorChange],
  1808. ret = ALS_R_PlayerInteriorChange;
  1809. do
  1810. {
  1811. #emit PUSH.S oldinteriorid
  1812. #emit PUSH.S newinteriorid
  1813. #emit PUSH.S playerid
  1814. #emit PUSH.C 12
  1815. #emit CONST.alt YSI_g_sCallbackAddresses
  1816. #emit LOAD.S.pri start
  1817. #emit INC.pri
  1818. #emit STOR.S.pri start
  1819. #emit LIDX
  1820. #emit MOVE.alt
  1821. #emit LCTRL 6
  1822. #emit ADD.C 24
  1823. #emit PUSH.pri
  1824. #emit MOVE.pri
  1825. #emit SCTRL 6
  1826. #emit MOVE.alt
  1827. #emit CONST.pri 0xFFFFFFFE
  1828. #emit AND
  1829. #emit PUSH.pri
  1830. #emit LOAD.S.pri ret
  1831. #emit AND
  1832. #emit POP.alt
  1833. #emit OR
  1834. #emit STOR.S.pri ret
  1835. }
  1836. while (start != end && ret >= 0);
  1837. return (ret == 1);
  1838. }
  1839. #if defined _ALS_OnPlayerInteriorChange
  1840. #undef OnPlayerInteriorChange
  1841. #else
  1842. #define _ALS_OnPlayerInteriorChange
  1843. #endif
  1844. #define OnPlayerInteriorChange(%0) S@@_OnPlayerInteriorChange(%0)
  1845. HOOK_FORWARD<PlayerInteriorChange>
  1846. public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
  1847. {
  1848. P:2("Hooks_OnPlayerKeyStateChange called: %d, %d, %d", playerid, newkeys, oldkeys);
  1849. new
  1850. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerKeyStateChange],
  1851. start = _:YSI_g_sCallbackStart[ALS_OnPlayerKeyStateChange],
  1852. ret = ALS_R_PlayerKeyStateChange;
  1853. do
  1854. {
  1855. #emit PUSH.S oldkeys
  1856. #emit PUSH.S newkeys
  1857. #emit PUSH.S playerid
  1858. #emit PUSH.C 12
  1859. #emit CONST.alt YSI_g_sCallbackAddresses
  1860. #emit LOAD.S.pri start
  1861. #emit INC.pri
  1862. #emit STOR.S.pri start
  1863. #emit LIDX
  1864. #emit MOVE.alt
  1865. #emit LCTRL 6
  1866. #emit ADD.C 24
  1867. #emit PUSH.pri
  1868. #emit MOVE.pri
  1869. #emit SCTRL 6
  1870. #emit MOVE.alt
  1871. #emit CONST.pri 0xFFFFFFFE
  1872. #emit AND
  1873. #emit PUSH.pri
  1874. #emit LOAD.S.pri ret
  1875. #emit AND
  1876. #emit POP.alt
  1877. #emit OR
  1878. #emit STOR.S.pri ret
  1879. }
  1880. while (start != end && ret >= 0);
  1881. return (ret == 1);
  1882. }
  1883. #if defined _ALS_OnPlayerKeyStateChange
  1884. #undef OnPlayerKeyStateChange
  1885. #else
  1886. #define _ALS_OnPlayerKeyStateChange
  1887. #endif
  1888. #define OnPlayerKeyStateChange(%0) S@@_OnPlayerKeyStateChange(%0)
  1889. HOOK_FORWARD<PlayerKeyStateChange>
  1890. public OnRconLoginAttempt(ip[], password[], success)
  1891. {
  1892. P:2("Hooks_OnRconLoginAttempt called: \"%s\", \"%s\", %d", ip, password, success);
  1893. new
  1894. end = _:YSI_g_sCallbackEnd[ALS_OnRconLoginAttempt],
  1895. start = _:YSI_g_sCallbackStart[ALS_OnRconLoginAttempt],
  1896. ret = ALS_R_RconLoginAttempt;
  1897. do
  1898. {
  1899. #emit PUSH.S success
  1900. #emit PUSH.S password
  1901. #emit PUSH.S ip
  1902. #emit PUSH.C 12
  1903. #emit CONST.alt YSI_g_sCallbackAddresses
  1904. #emit LOAD.S.pri start
  1905. #emit INC.pri
  1906. #emit STOR.S.pri start
  1907. #emit LIDX
  1908. #emit MOVE.alt
  1909. #emit LCTRL 6
  1910. #emit ADD.C 24
  1911. #emit PUSH.pri
  1912. #emit MOVE.pri
  1913. #emit SCTRL 6
  1914. #emit MOVE.alt
  1915. #emit CONST.pri 0xFFFFFFFE
  1916. #emit AND
  1917. #emit PUSH.pri
  1918. #emit LOAD.S.pri ret
  1919. #emit AND
  1920. #emit POP.alt
  1921. #emit OR
  1922. #emit STOR.S.pri ret
  1923. }
  1924. while (start != end && ret >= 0);
  1925. return (ret == 1);
  1926. }
  1927. #if defined _ALS_OnRconLoginAttempt
  1928. #undef OnRconLoginAttempt
  1929. #else
  1930. #define _ALS_OnRconLoginAttempt
  1931. #endif
  1932. #define OnRconLoginAttempt(%0) S@@_OnRconLoginAttempt(%0)
  1933. HOOK_FORWARD<RconLoginAttempt>
  1934. public OnPlayerUpdate(playerid)
  1935. {
  1936. P:7("Hooks_OnPlayerUpdate called: %d", playerid);
  1937. new
  1938. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerUpdate],
  1939. start = _:YSI_g_sCallbackStart[ALS_OnPlayerUpdate],
  1940. ret = ALS_R_PlayerUpdate;
  1941. do
  1942. {
  1943. #emit PUSH.S playerid
  1944. #emit PUSH.C 4
  1945. #emit CONST.alt YSI_g_sCallbackAddresses
  1946. #emit LOAD.S.pri start
  1947. #emit INC.pri
  1948. #emit STOR.S.pri start
  1949. #emit LIDX
  1950. #emit MOVE.alt
  1951. #emit LCTRL 6
  1952. #emit ADD.C 24
  1953. #emit PUSH.pri
  1954. #emit MOVE.pri
  1955. #emit SCTRL 6
  1956. #emit MOVE.alt
  1957. #emit CONST.pri 0xFFFFFFFE
  1958. #emit AND
  1959. #emit PUSH.pri
  1960. #emit LOAD.S.pri ret
  1961. #emit AND
  1962. #emit POP.alt
  1963. #emit OR
  1964. #emit STOR.S.pri ret
  1965. }
  1966. while (start != end && ret >= 0);
  1967. return (ret == 1);
  1968. }
  1969. #if defined _ALS_OnPlayerUpdate
  1970. #undef OnPlayerUpdate
  1971. #else
  1972. #define _ALS_OnPlayerUpdate
  1973. #endif
  1974. #define OnPlayerUpdate(%0) S@@_OnPlayerUpdate(%0)
  1975. HOOK_FORWARD<PlayerUpdate>
  1976. public OnPlayerStreamIn(playerid, forplayerid)
  1977. {
  1978. P:2("Hooks_OnPlayerStreamIn called: %d, %d", playerid, forplayerid);
  1979. new
  1980. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerStreamIn],
  1981. start = _:YSI_g_sCallbackStart[ALS_OnPlayerStreamIn],
  1982. ret = ALS_R_PlayerStreamIn;
  1983. do
  1984. {
  1985. #emit PUSH.S forplayerid
  1986. #emit PUSH.S playerid
  1987. #emit PUSH.C 8
  1988. #emit CONST.alt YSI_g_sCallbackAddresses
  1989. #emit LOAD.S.pri start
  1990. #emit INC.pri
  1991. #emit STOR.S.pri start
  1992. #emit LIDX
  1993. #emit MOVE.alt
  1994. #emit LCTRL 6
  1995. #emit ADD.C 24
  1996. #emit PUSH.pri
  1997. #emit MOVE.pri
  1998. #emit SCTRL 6
  1999. #emit MOVE.alt
  2000. #emit CONST.pri 0xFFFFFFFE
  2001. #emit AND
  2002. #emit PUSH.pri
  2003. #emit LOAD.S.pri ret
  2004. #emit AND
  2005. #emit POP.alt
  2006. #emit OR
  2007. #emit STOR.S.pri ret
  2008. }
  2009. while (start != end && ret >= 0);
  2010. return (ret == 1);
  2011. }
  2012. #if defined _ALS_OnPlayerStreamIn
  2013. #undef OnPlayerStreamIn
  2014. #else
  2015. #define _ALS_OnPlayerStreamIn
  2016. #endif
  2017. #define OnPlayerStreamIn(%0) S@@_OnPlayerStreamIn(%0)
  2018. HOOK_FORWARD<PlayerStreamIn>
  2019. public OnPlayerStreamOut(playerid, forplayerid)
  2020. {
  2021. P:2("Hooks_OnPlayerStreamOut called: %d, %d", playerid, forplayerid);
  2022. new
  2023. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerStreamOut],
  2024. start = _:YSI_g_sCallbackStart[ALS_OnPlayerStreamOut],
  2025. ret = ALS_R_PlayerStreamOut;
  2026. do
  2027. {
  2028. #emit PUSH.S forplayerid
  2029. #emit PUSH.S playerid
  2030. #emit PUSH.C 8
  2031. #emit CONST.alt YSI_g_sCallbackAddresses
  2032. #emit LOAD.S.pri start
  2033. #emit INC.pri
  2034. #emit STOR.S.pri start
  2035. #emit LIDX
  2036. #emit MOVE.alt
  2037. #emit LCTRL 6
  2038. #emit ADD.C 24
  2039. #emit PUSH.pri
  2040. #emit MOVE.pri
  2041. #emit SCTRL 6
  2042. #emit MOVE.alt
  2043. #emit CONST.pri 0xFFFFFFFE
  2044. #emit AND
  2045. #emit PUSH.pri
  2046. #emit LOAD.S.pri ret
  2047. #emit AND
  2048. #emit POP.alt
  2049. #emit OR
  2050. #emit STOR.S.pri ret
  2051. }
  2052. while (start != end && ret >= 0);
  2053. return (ret == 1);
  2054. }
  2055. #if defined _ALS_OnPlayerStreamOut
  2056. #undef OnPlayerStreamOut
  2057. #else
  2058. #define _ALS_OnPlayerStreamOut
  2059. #endif
  2060. #define OnPlayerStreamOut(%0) S@@_OnPlayerStreamOut(%0)
  2061. HOOK_FORWARD<PlayerStreamOut>
  2062. public OnVehicleStreamIn(vehicleid, forplayerid)
  2063. {
  2064. P:2("Hooks_OnVehicleStreamIn called: %d, %d", vehicleid, forplayerid);
  2065. new
  2066. end = _:YSI_g_sCallbackEnd[ALS_OnVehicleStreamIn],
  2067. start = _:YSI_g_sCallbackStart[ALS_OnVehicleStreamIn],
  2068. ret = ALS_R_VehicleStreamIn;
  2069. do
  2070. {
  2071. #emit PUSH.S forplayerid
  2072. #emit PUSH.S vehicleid
  2073. #emit PUSH.C 8
  2074. #emit CONST.alt YSI_g_sCallbackAddresses
  2075. #emit LOAD.S.pri start
  2076. #emit INC.pri
  2077. #emit STOR.S.pri start
  2078. #emit LIDX
  2079. #emit MOVE.alt
  2080. #emit LCTRL 6
  2081. #emit ADD.C 24
  2082. #emit PUSH.pri
  2083. #emit MOVE.pri
  2084. #emit SCTRL 6
  2085. #emit MOVE.alt
  2086. #emit CONST.pri 0xFFFFFFFE
  2087. #emit AND
  2088. #emit PUSH.pri
  2089. #emit LOAD.S.pri ret
  2090. #emit AND
  2091. #emit POP.alt
  2092. #emit OR
  2093. #emit STOR.S.pri ret
  2094. }
  2095. while (start != end && ret >= 0);
  2096. return (ret == 1);
  2097. }
  2098. #if defined _ALS_OnVehicleStreamIn
  2099. #undef OnVehicleStreamIn
  2100. #else
  2101. #define _ALS_OnVehicleStreamIn
  2102. #endif
  2103. #define OnVehicleStreamIn(%0) S@@_OnVehicleStreamIn(%0)
  2104. HOOK_FORWARD<VehicleStreamIn>
  2105. public OnVehicleStreamOut(vehicleid, forplayerid)
  2106. {
  2107. P:2("Hooks_OnVehicleStreamOut called: %d, %d", vehicleid, forplayerid);
  2108. new
  2109. end = _:YSI_g_sCallbackEnd[ALS_OnVehicleStreamOut],
  2110. start = _:YSI_g_sCallbackStart[ALS_OnVehicleStreamOut],
  2111. ret = ALS_R_VehicleStreamOut;
  2112. do
  2113. {
  2114. #emit PUSH.S forplayerid
  2115. #emit PUSH.S vehicleid
  2116. #emit PUSH.C 8
  2117. #emit CONST.alt YSI_g_sCallbackAddresses
  2118. #emit LOAD.S.pri start
  2119. #emit INC.pri
  2120. #emit STOR.S.pri start
  2121. #emit LIDX
  2122. #emit MOVE.alt
  2123. #emit LCTRL 6
  2124. #emit ADD.C 24
  2125. #emit PUSH.pri
  2126. #emit MOVE.pri
  2127. #emit SCTRL 6
  2128. #emit MOVE.alt
  2129. #emit CONST.pri 0xFFFFFFFE
  2130. #emit AND
  2131. #emit PUSH.pri
  2132. #emit LOAD.S.pri ret
  2133. #emit AND
  2134. #emit POP.alt
  2135. #emit OR
  2136. #emit STOR.S.pri ret
  2137. }
  2138. while (start != end && ret >= 0);
  2139. return (ret == 1);
  2140. }
  2141. #if defined _ALS_OnVehicleStreamOut
  2142. #undef OnVehicleStreamOut
  2143. #else
  2144. #define _ALS_OnVehicleStreamOut
  2145. #endif
  2146. #define OnVehicleStreamOut(%0) S@@_OnVehicleStreamOut(%0)
  2147. HOOK_FORWARD<VehicleStreamOut>
  2148. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  2149. {
  2150. P:2("Hooks_OnDialogResponse called: %d, %d, %d, %d, \"%s\"", playerid, dialogid, response, listitem, inputtext);
  2151. new
  2152. end = _:YSI_g_sCallbackEnd[ALS_OnDialogResponse],
  2153. start = _:YSI_g_sCallbackStart[ALS_OnDialogResponse],
  2154. ret = ALS_R_DialogResponse;
  2155. do
  2156. {
  2157. #emit PUSH.S inputtext
  2158. #emit PUSH.S listitem
  2159. #emit PUSH.S response
  2160. #emit PUSH.S dialogid
  2161. #emit PUSH.S playerid
  2162. #emit PUSH.C 20
  2163. #emit CONST.alt YSI_g_sCallbackAddresses
  2164. #emit LOAD.S.pri start
  2165. #emit INC.pri
  2166. #emit STOR.S.pri start
  2167. #emit LIDX
  2168. #emit MOVE.alt
  2169. #emit LCTRL 6
  2170. #emit ADD.C 24
  2171. #emit PUSH.pri
  2172. #emit MOVE.pri
  2173. #emit SCTRL 6
  2174. #emit MOVE.alt
  2175. #emit CONST.pri 0xFFFFFFFE
  2176. #emit AND
  2177. #emit PUSH.pri
  2178. #emit LOAD.S.pri ret
  2179. #emit AND
  2180. #emit POP.alt
  2181. #emit OR
  2182. #emit STOR.S.pri ret
  2183. }
  2184. while (start != end && ret >= 0);
  2185. return (ret == 1);
  2186. }
  2187. #if defined _ALS_OnDialogResponse
  2188. #undef OnDialogResponse
  2189. #else
  2190. #define _ALS_OnDialogResponse
  2191. #endif
  2192. #define OnDialogResponse(%0) S@@_OnDialogResponse(%0)
  2193. HOOK_FORWARD<DialogResponse>
  2194. public OnPlayerClickPlayer(playerid, clickedplayerid, source)
  2195. {
  2196. P:2("Hooks_OnPlayerClickPlayer called: %d, %d, %d", playerid, clickedplayerid, source);
  2197. new
  2198. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerClickPlayer],
  2199. start = _:YSI_g_sCallbackStart[ALS_OnPlayerClickPlayer],
  2200. ret = ALS_R_PlayerClickPlayer;
  2201. do
  2202. {
  2203. #emit PUSH.S source
  2204. #emit PUSH.S clickedplayerid
  2205. #emit PUSH.S playerid
  2206. #emit PUSH.C 12
  2207. #emit CONST.alt YSI_g_sCallbackAddresses
  2208. #emit LOAD.S.pri start
  2209. #emit INC.pri
  2210. #emit STOR.S.pri start
  2211. #emit LIDX
  2212. #emit MOVE.alt
  2213. #emit LCTRL 6
  2214. #emit ADD.C 24
  2215. #emit PUSH.pri
  2216. #emit MOVE.pri
  2217. #emit SCTRL 6
  2218. #emit MOVE.alt
  2219. #emit CONST.pri 0xFFFFFFFE
  2220. #emit AND
  2221. #emit PUSH.pri
  2222. #emit LOAD.S.pri ret
  2223. #emit AND
  2224. #emit POP.alt
  2225. #emit OR
  2226. #emit STOR.S.pri ret
  2227. }
  2228. while (start != end && ret >= 0);
  2229. return (ret == 1);
  2230. }
  2231. #if defined _ALS_OnPlayerClickPlayer
  2232. #undef OnPlayerClickPlayer
  2233. #else
  2234. #define _ALS_OnPlayerClickPlayer
  2235. #endif
  2236. #define OnPlayerClickPlayer(%0) S@@_OnPlayerClickPlayer(%0)
  2237. HOOK_FORWARD<PlayerClickPlayer>
  2238. public OnPlayerTakeDamage(playerid, issuerid, Float:amount, weaponid)
  2239. {
  2240. P:2("Hooks_OnPlayerTakeDamage called: %d, %d, %f, %d", playerid, issuerid, Float:amount, weaponid);
  2241. new
  2242. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerTakeDamage],
  2243. start = _:YSI_g_sCallbackStart[ALS_OnPlayerTakeDamage],
  2244. ret = ALS_R_PlayerTakeDamage;
  2245. do
  2246. {
  2247. #emit PUSH.S weaponid
  2248. #emit PUSH.S amount
  2249. #emit PUSH.S issuerid
  2250. #emit PUSH.S playerid
  2251. #emit PUSH.C 16
  2252. #emit CONST.alt YSI_g_sCallbackAddresses
  2253. #emit LOAD.S.pri start
  2254. #emit INC.pri
  2255. #emit STOR.S.pri start
  2256. #emit LIDX
  2257. #emit MOVE.alt
  2258. #emit LCTRL 6
  2259. #emit ADD.C 24
  2260. #emit PUSH.pri
  2261. #emit MOVE.pri
  2262. #emit SCTRL 6
  2263. #emit MOVE.alt
  2264. #emit CONST.pri 0xFFFFFFFE
  2265. #emit AND
  2266. #emit PUSH.pri
  2267. #emit LOAD.S.pri ret
  2268. #emit AND
  2269. #emit POP.alt
  2270. #emit OR
  2271. #emit STOR.S.pri ret
  2272. }
  2273. while (start != end && ret >= 0);
  2274. return (ret == 1);
  2275. }
  2276. #if defined _ALS_OnPlayerTakeDamage
  2277. #undef OnPlayerTakeDamage
  2278. #else
  2279. #define _ALS_OnPlayerTakeDamage
  2280. #endif
  2281. #define OnPlayerTakeDamage(%0) S@@_OnPlayerTakeDamage(%0)
  2282. HOOK_FORWARD<PlayerTakeDamage>
  2283. public OnPlayerGiveDamage(playerid, damagedid, Float:amount, weaponid)
  2284. {
  2285. P:2("Hooks_OnPlayerGiveDamage called: %d, %d, %f, %d", playerid, damagedid, Float:amount, weaponid);
  2286. new
  2287. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerGiveDamage],
  2288. start = _:YSI_g_sCallbackStart[ALS_OnPlayerGiveDamage],
  2289. ret = ALS_R_PlayerGiveDamage;
  2290. do
  2291. {
  2292. #emit PUSH.S weaponid
  2293. #emit PUSH.S amount
  2294. #emit PUSH.S damagedid
  2295. #emit PUSH.S playerid
  2296. #emit PUSH.C 16
  2297. #emit CONST.alt YSI_g_sCallbackAddresses
  2298. #emit LOAD.S.pri start
  2299. #emit INC.pri
  2300. #emit STOR.S.pri start
  2301. #emit LIDX
  2302. #emit MOVE.alt
  2303. #emit LCTRL 6
  2304. #emit ADD.C 24
  2305. #emit PUSH.pri
  2306. #emit MOVE.pri
  2307. #emit SCTRL 6
  2308. #emit MOVE.alt
  2309. #emit CONST.pri 0xFFFFFFFE
  2310. #emit AND
  2311. #emit PUSH.pri
  2312. #emit LOAD.S.pri ret
  2313. #emit AND
  2314. #emit POP.alt
  2315. #emit OR
  2316. #emit STOR.S.pri ret
  2317. }
  2318. while (start != end && ret >= 0);
  2319. return (ret == 1);
  2320. }
  2321. #if defined _ALS_OnPlayerGiveDamage
  2322. #undef OnPlayerGiveDamage
  2323. #else
  2324. #define _ALS_OnPlayerGiveDamage
  2325. #endif
  2326. #define OnPlayerGiveDamage(%0) S@@_OnPlayerGiveDamage(%0)
  2327. HOOK_FORWARD<PlayerGiveDamage>
  2328. #if !defined _ALS_OnPlayerLogin
  2329. forward OnPlayerLogin(playerid, uid);
  2330. #endif
  2331. public OnPlayerLogin(playerid, uid)
  2332. {
  2333. P:2("Hooks_OnPlayerLogin called: %d, %d", playerid, uid);
  2334. new
  2335. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerLogin],
  2336. start = _:YSI_g_sCallbackStart[ALS_OnPlayerLogin],
  2337. ret = ALS_R_PlayerLogin;
  2338. do
  2339. {
  2340. #emit PUSH.S uid
  2341. #emit PUSH.S playerid
  2342. #emit PUSH.C 8
  2343. #emit CONST.alt YSI_g_sCallbackAddresses
  2344. #emit LOAD.S.pri start
  2345. #emit INC.pri
  2346. #emit STOR.S.pri start
  2347. #emit LIDX
  2348. #emit MOVE.alt
  2349. #emit LCTRL 6
  2350. #emit ADD.C 24
  2351. #emit PUSH.pri
  2352. #emit MOVE.pri
  2353. #emit SCTRL 6
  2354. #emit MOVE.alt
  2355. #emit CONST.pri 0xFFFFFFFE
  2356. #emit AND
  2357. #emit PUSH.pri
  2358. #emit LOAD.S.pri ret
  2359. #emit AND
  2360. #emit POP.alt
  2361. #emit OR
  2362. #emit STOR.S.pri ret
  2363. }
  2364. while (start != end && ret >= 0);
  2365. return (ret == 1);
  2366. }
  2367. #if defined _ALS_OnPlayerLogin
  2368. #undef OnPlayerLogin
  2369. #else
  2370. #define _ALS_OnPlayerLogin
  2371. #endif
  2372. #define OnPlayerLogin(%0) S@@_OnPlayerLogin(%0)
  2373. HOOK_FORWARD<PlayerLogin>
  2374. #if !defined _ALS_OnPlayerLogout
  2375. forward OnPlayerLogout(playerid, uid);
  2376. #endif
  2377. public OnPlayerLogout(playerid, uid)
  2378. {
  2379. P:2("Hooks_OnPlayerLogout called: %d, %d", playerid, uid);
  2380. new
  2381. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerLogout],
  2382. start = _:YSI_g_sCallbackStart[ALS_OnPlayerLogout],
  2383. ret = ALS_R_PlayerLogout;
  2384. do
  2385. {
  2386. #emit PUSH.S uid
  2387. #emit PUSH.S playerid
  2388. #emit PUSH.C 8
  2389. #emit CONST.alt YSI_g_sCallbackAddresses
  2390. #emit LOAD.S.pri start
  2391. #emit INC.pri
  2392. #emit STOR.S.pri start
  2393. #emit LIDX
  2394. #emit MOVE.alt
  2395. #emit LCTRL 6
  2396. #emit ADD.C 24
  2397. #emit PUSH.pri
  2398. #emit MOVE.pri
  2399. #emit SCTRL 6
  2400. #emit MOVE.alt
  2401. #emit CONST.pri 0xFFFFFFFE
  2402. #emit AND
  2403. #emit PUSH.pri
  2404. #emit LOAD.S.pri ret
  2405. #emit AND
  2406. #emit POP.alt
  2407. #emit OR
  2408. #emit STOR.S.pri ret
  2409. }
  2410. while (start != end && ret >= 0);
  2411. return (ret == 1);
  2412. }
  2413. #if defined _ALS_OnPlayerLogout
  2414. #undef OnPlayerLogout
  2415. #else
  2416. #define _ALS_OnPlayerLogout
  2417. #endif
  2418. #define OnPlayerLogout(%0) S@@_OnPlayerlogout(%0)
  2419. HOOK_FORWARD<PlayerLogout>
  2420. #if !defined OnPlayerClickMap
  2421. #undef ALS_MAKE
  2422. #endinput
  2423. #endif
  2424. public OnPlayerClickMap(playerid, Float:fX, Float:fY, Float:fZ)
  2425. {
  2426. P:2("Hooks_OnPlayerClickMap called: %d, %f, %f, %f", playerid, fX, fY, fZ);
  2427. new
  2428. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerClickMap],
  2429. start = _:YSI_g_sCallbackStart[ALS_OnPlayerClickMap],
  2430. ret = ALS_R_PlayerClickMap;
  2431. do
  2432. {
  2433. #emit PUSH.S fZ
  2434. #emit PUSH.S fY
  2435. #emit PUSH.S fX
  2436. #emit PUSH.S playerid
  2437. #emit PUSH.C 16
  2438. #emit CONST.alt YSI_g_sCallbackAddresses
  2439. #emit LOAD.S.pri start
  2440. #emit INC.pri
  2441. #emit STOR.S.pri start
  2442. #emit LIDX
  2443. #emit MOVE.alt
  2444. #emit LCTRL 6
  2445. #emit ADD.C 24
  2446. #emit PUSH.pri
  2447. #emit MOVE.pri
  2448. #emit SCTRL 6
  2449. #emit MOVE.alt
  2450. #emit CONST.pri 0xFFFFFFFE
  2451. #emit AND
  2452. #emit PUSH.pri
  2453. #emit LOAD.S.pri ret
  2454. #emit AND
  2455. #emit POP.alt
  2456. #emit OR
  2457. #emit STOR.S.pri ret
  2458. }
  2459. while (start != end && ret >= 0);
  2460. return (ret == 1);
  2461. }
  2462. #if defined _ALS_OnPlayerClickMap
  2463. #undef OnPlayerClickMap
  2464. #else
  2465. #define _ALS_OnPlayerClickMap
  2466. #endif
  2467. #define OnPlayerClickMap(%0) S@@_OnPlayerClickMap(%0)
  2468. HOOK_FORWARD<PlayerClickMap>
  2469. public OnPlayerClickTextDraw(playerid, Text:clickedid)
  2470. {
  2471. P:2("Hooks_OnPlayerClickTextDraw called: %d, %d", playerid, _:clickedid);
  2472. new
  2473. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerClickTextDraw],
  2474. start = _:YSI_g_sCallbackStart[ALS_OnPlayerClickTextDraw],
  2475. ret = ALS_R_PlayerClickTextDraw;
  2476. do
  2477. {
  2478. #emit PUSH.S clickedid
  2479. #emit PUSH.S playerid
  2480. #emit PUSH.C 8
  2481. #emit CONST.alt YSI_g_sCallbackAddresses
  2482. #emit LOAD.S.pri start
  2483. #emit INC.pri
  2484. #emit STOR.S.pri start
  2485. #emit LIDX
  2486. #emit MOVE.alt
  2487. #emit LCTRL 6
  2488. #emit ADD.C 24
  2489. #emit PUSH.pri
  2490. #emit MOVE.pri
  2491. #emit SCTRL 6
  2492. #emit MOVE.alt
  2493. #emit CONST.pri 0xFFFFFFFE
  2494. #emit AND
  2495. #emit PUSH.pri
  2496. #emit LOAD.S.pri ret
  2497. #emit AND
  2498. #emit POP.alt
  2499. #emit OR
  2500. #emit STOR.S.pri ret
  2501. }
  2502. while (start != end && ret >= 0);
  2503. return (ret == 1);
  2504. }
  2505. #if defined _ALS_OnPlayerClickTextDraw
  2506. #undef OnPlayerClickTextDraw
  2507. #else
  2508. #define _ALS_OnPlayerClickTextDraw
  2509. #endif
  2510. #define OnPlayerClickTextDraw(%0) S@@_OnPlayerClickTextDraw(%0)
  2511. HOOK_FORWARD<PlayerClickTextDraw>
  2512. public OnPlayerClickPlayerTextDraw(playerid, PlayerText:playertextid)
  2513. {
  2514. P:2("Hooks_OnPlayerClickPlayerTextDraw called: %d, %d", playerid, _:playertextid);
  2515. new
  2516. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerClickPlayerTextDraw],
  2517. start = _:YSI_g_sCallbackStart[ALS_OnPlayerClickPlayerTextDraw],
  2518. ret = ALS_R_PlayerClickPlayerTextDraw;
  2519. do
  2520. {
  2521. #emit PUSH.S playertextid
  2522. #emit PUSH.S playerid
  2523. #emit PUSH.C 8
  2524. #emit CONST.alt YSI_g_sCallbackAddresses
  2525. #emit LOAD.S.pri start
  2526. #emit INC.pri
  2527. #emit STOR.S.pri start
  2528. #emit LIDX
  2529. #emit MOVE.alt
  2530. #emit LCTRL 6
  2531. #emit ADD.C 24
  2532. #emit PUSH.pri
  2533. #emit MOVE.pri
  2534. #emit SCTRL 6
  2535. #emit MOVE.alt
  2536. #emit CONST.pri 0xFFFFFFFE
  2537. #emit AND
  2538. #emit PUSH.pri
  2539. #emit LOAD.S.pri ret
  2540. #emit AND
  2541. #emit POP.alt
  2542. #emit OR
  2543. #emit STOR.S.pri ret
  2544. }
  2545. while (start != end && ret >= 0);
  2546. return (ret == 1);
  2547. }
  2548. #if defined _ALS_OnPlayerClickPlayerTD
  2549. #undef OnPlayerClickPlayerTextDraw
  2550. #else
  2551. #define _ALS_OnPlayerClickPlayerTD
  2552. #endif
  2553. #define OnPlayerClickPlayerTextDraw(%0) S@@_OnPlayerClickPlayerTextDraw(%0)
  2554. HOOK_FORWARD<PlayerClickPlayerTextDraw>
  2555. public OnPlayerEditObject(playerid, playerobject, objectid, response, Float:fX, Float:fY, Float:fZ, Float:fRotX, Float:fRotY, Float:fRotZ)
  2556. {
  2557. P:2("Hooks_OnPlayerEditObject called: %d, %d, %d, %d, %f, %f, %f, %f, %f, %f", playerid, playerobject, objectid, response, fX, fY, fZ, fRotX, fRotY, fRotZ);
  2558. new
  2559. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerEditObject],
  2560. start = _:YSI_g_sCallbackStart[ALS_OnPlayerEditObject],
  2561. ret = ALS_R_PlayerEditObject;
  2562. do
  2563. {
  2564. #emit PUSH.S fRotZ
  2565. #emit PUSH.S fRotY
  2566. #emit PUSH.S fRotX
  2567. #emit PUSH.S fZ
  2568. #emit PUSH.S fY
  2569. #emit PUSH.S fX
  2570. #emit PUSH.S response
  2571. #emit PUSH.S objectid
  2572. #emit PUSH.S playerobject
  2573. #emit PUSH.S playerid
  2574. #emit PUSH.C 40
  2575. #emit CONST.alt YSI_g_sCallbackAddresses
  2576. #emit LOAD.S.pri start
  2577. #emit INC.pri
  2578. #emit STOR.S.pri start
  2579. #emit LIDX
  2580. #emit MOVE.alt
  2581. #emit LCTRL 6
  2582. #emit ADD.C 24
  2583. #emit PUSH.pri
  2584. #emit MOVE.pri
  2585. #emit SCTRL 6
  2586. #emit MOVE.alt
  2587. #emit CONST.pri 0xFFFFFFFE
  2588. #emit AND
  2589. #emit PUSH.pri
  2590. #emit LOAD.S.pri ret
  2591. #emit AND
  2592. #emit POP.alt
  2593. #emit OR
  2594. #emit STOR.S.pri ret
  2595. }
  2596. while (start != end && ret >= 0);
  2597. return (ret == 1);
  2598. }
  2599. #if defined _ALS_OnPlayerEditObject
  2600. #undef OnPlayerEditObject
  2601. #else
  2602. #define _ALS_OnPlayerEditObject
  2603. #endif
  2604. #define OnPlayerEditObject(%0) S@@_OnPlayerEditObject(%0)
  2605. HOOK_FORWARD<PlayerEditObject>
  2606. //forward S@@_OnPlayerEditObject(playerid,playerobject,objectid,response,Float:fX,Float:fY,Float:fZ,Float:fRotX,Float:fRotY,Float:fRotZ);
  2607. //public S@@_OnPlayerEditObject(playerid,playerobject,objectid,response,Float:fX,Float:fY,Float:fZ,Float:fRotX,Float:fRotY,Float:fRotZ)<_ALS_:unhooked>{return 1;}
  2608. //public S@@_OnPlayerEditObject(playerid,playerobject,objectid,response,Float:fX,Float:fY,Float:fZ,Float:fRotX,Float:fRotY,Float:fRotZ)<>{return 1;}
  2609. public OnPlayerEditAttachedObject(playerid, response, index, modelid, boneid, Float:fOffsetX, Float:fOffsetY, Float:fOffsetZ, Float:fRotX, Float:fRotY, Float:fRotZ, Float:fScaleX, Float:fScaleY, Float:fScaleZ)
  2610. {
  2611. P:2("Hooks_OnPlayerEditAttachedObject called: %d, %d, %d, %d, %d, %f, %f, %f, %f, %f, %f, %f, %f, %f", playerid, response, index, modelid, boneid, fOffsetX, fOffsetY, fOffsetZ, fRotX, fRotY, fRotZ, fScaleX, fScaleY, fScaleZ);
  2612. new
  2613. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerEditAttachedObject],
  2614. start = _:YSI_g_sCallbackStart[ALS_OnPlayerEditAttachedObject],
  2615. ret = ALS_R_PlayerEditAttachedObject;
  2616. do
  2617. {
  2618. #emit PUSH.S fScaleZ
  2619. #emit PUSH.S fScaleY
  2620. #emit PUSH.S fScaleX
  2621. #emit PUSH.S fRotZ
  2622. #emit PUSH.S fRotY
  2623. #emit PUSH.S fRotX
  2624. #emit PUSH.S fOffsetZ
  2625. #emit PUSH.S fOffsetY
  2626. #emit PUSH.S fOffsetX
  2627. #emit PUSH.S boneid
  2628. #emit PUSH.S modelid
  2629. #emit PUSH.S index
  2630. #emit PUSH.S response
  2631. #emit PUSH.S playerid
  2632. #emit PUSH.C 56
  2633. #emit CONST.alt YSI_g_sCallbackAddresses
  2634. #emit LOAD.S.pri start
  2635. #emit INC.pri
  2636. #emit STOR.S.pri start
  2637. #emit LIDX
  2638. #emit MOVE.alt
  2639. #emit LCTRL 6
  2640. #emit ADD.C 24
  2641. #emit PUSH.pri
  2642. #emit MOVE.pri
  2643. #emit SCTRL 6
  2644. #emit MOVE.alt
  2645. #emit CONST.pri 0xFFFFFFFE
  2646. #emit AND
  2647. #emit PUSH.pri
  2648. #emit LOAD.S.pri ret
  2649. #emit AND
  2650. #emit POP.alt
  2651. #emit OR
  2652. #emit STOR.S.pri ret
  2653. }
  2654. while (start != end && ret >= 0);
  2655. return (ret == 1);
  2656. }
  2657. #if defined _ALS_OnPlayerEditAttachedObject
  2658. #undef OnPlayerEditAttachedObject
  2659. #else
  2660. #define _ALS_OnPlayerEditAttachedObject
  2661. #endif
  2662. #define OnPlayerEditAttachedObject(%0) S@@_OnPlayerEditAttachedObject(%0)
  2663. HOOK_FORWARD<PlayerEditAttachedObject>
  2664. //forward S@@_OnPlayerEditAttachedObject(playerid,response,index,modelid,boneid,Float:fOffsetX,Float:fOffsetY,Float:fOffsetZ,Float:fRotX,Float:fRotY,Float:fRotZ,Float:fScaleX,Float:fScaleY,Float:fScaleZ);
  2665. //public S@@_OnPlayerEditAttachedObject(playerid,response,index,modelid,boneid,Float:fOffsetX,Float:fOffsetY,Float:fOffsetZ,Float:fRotX,Float:fRotY,Float:fRotZ,Float:fScaleX,Float:fScaleY,Float:fScaleZ)<_ALS_:unhooked>{return 1;}
  2666. //public S@@_OnPlayerEditAttachedObject(playerid,response,index,modelid,boneid,Float:fOffsetX,Float:fOffsetY,Float:fOffsetZ,Float:fRotX,Float:fRotY,Float:fRotZ,Float:fScaleX,Float:fScaleY,Float:fScaleZ)<>{return 1;}
  2667. public OnPlayerSelectObject(playerid, type, objectid, modelid, Float:fX, Float:fY, Float:fZ)
  2668. {
  2669. P:2("Hooks_OnPlayerSelectObject called: %d, %d, %d, %d, %f, %f, %f", playerid, type, objectid, modelid, fX, fY, fZ);
  2670. new
  2671. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerSelectObject],
  2672. start = _:YSI_g_sCallbackStart[ALS_OnPlayerSelectObject],
  2673. ret = ALS_R_PlayerSelectObject;
  2674. do
  2675. {
  2676. #emit PUSH.S fZ
  2677. #emit PUSH.S fY
  2678. #emit PUSH.S fX
  2679. #emit PUSH.S modelid
  2680. #emit PUSH.S objectid
  2681. #emit PUSH.S type
  2682. #emit PUSH.S playerid
  2683. #emit PUSH.C 28
  2684. #emit CONST.alt YSI_g_sCallbackAddresses
  2685. #emit LOAD.S.pri start
  2686. #emit INC.pri
  2687. #emit STOR.S.pri start
  2688. #emit LIDX
  2689. #emit MOVE.alt
  2690. #emit LCTRL 6
  2691. #emit ADD.C 24
  2692. #emit PUSH.pri
  2693. #emit MOVE.pri
  2694. #emit SCTRL 6
  2695. #emit MOVE.alt
  2696. #emit CONST.pri 0xFFFFFFFE
  2697. #emit AND
  2698. #emit PUSH.pri
  2699. #emit LOAD.S.pri ret
  2700. #emit AND
  2701. #emit POP.alt
  2702. #emit OR
  2703. #emit STOR.S.pri ret
  2704. }
  2705. while (start != end && ret >= 0);
  2706. return (ret == 1);
  2707. }
  2708. #if defined _ALS_OnPlayerSelectObject
  2709. #undef OnPlayerSelectObject
  2710. #else
  2711. #define _ALS_OnPlayerSelectObject
  2712. #endif
  2713. #define OnPlayerSelectObject(%0) S@@_OnPlayerSelectObject(%0)
  2714. HOOK_FORWARD<PlayerSelectObject>
  2715. // Allow hooking of streamer plugin callbacks.
  2716. #if !defined _YSI_PLUGINS_STREAMER
  2717. #undef ALS_MAKE
  2718. #endinput
  2719. #endif
  2720. public OnDynamicObjectMoved(objectid)
  2721. {
  2722. P:2("Hooks_OnDynamicObjectMoved called: %d", objectid);
  2723. new
  2724. end = _:YSI_g_sCallbackEnd[ALS_OnDynamicObjectMoved],
  2725. start = _:YSI_g_sCallbackStart[ALS_OnDynamicObjectMoved],
  2726. ret = ALS_R_DynamicObjectMoved;
  2727. do
  2728. {
  2729. #emit PUSH.S objectid
  2730. #emit PUSH.C 4
  2731. #emit CONST.alt YSI_g_sCallbackAddresses
  2732. #emit LOAD.S.pri start
  2733. #emit INC.pri
  2734. #emit STOR.S.pri start
  2735. #emit LIDX
  2736. #emit MOVE.alt
  2737. #emit LCTRL 6
  2738. #emit ADD.C 24
  2739. #emit PUSH.pri
  2740. #emit MOVE.pri
  2741. #emit SCTRL 6
  2742. #emit MOVE.alt
  2743. #emit CONST.pri 0xFFFFFFFE
  2744. #emit AND
  2745. #emit PUSH.pri
  2746. #emit LOAD.S.pri ret
  2747. #emit AND
  2748. #emit POP.alt
  2749. #emit OR
  2750. #emit STOR.S.pri ret
  2751. }
  2752. while (start != end && ret >= 0);
  2753. return (ret == 1);
  2754. }
  2755. #if defined _ALS_OnDynamicObjectMoved
  2756. #undef OnDynamicObjectMoved
  2757. #else
  2758. #define _ALS_OnDynamicObjectMoved
  2759. #endif
  2760. #define OnDynamicObjectMoved(%0) S@@_OnDynamicObjectMoved(%0)
  2761. HOOK_FORWARD<DynamicObjectMoved>
  2762. public OnPlayerEditDynamicObject(playerid, objectid, response, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz)
  2763. {
  2764. P:2("Hooks_OnPlayerEditDynamicObject called: %d, %d, %d, %f, %f, %f, %f, %f, %f", playerid, objectid, response, x, y, z, rx, ry, rz);
  2765. new
  2766. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerEditDynamicObject],
  2767. start = _:YSI_g_sCallbackStart[ALS_OnPlayerEditDynamicObject],
  2768. ret = ALS_R_PlayerEditDynamicObject;
  2769. do
  2770. {
  2771. #emit PUSH.S rz
  2772. #emit PUSH.S ry
  2773. #emit PUSH.S rx
  2774. #emit PUSH.S z
  2775. #emit PUSH.S y
  2776. #emit PUSH.S x
  2777. #emit PUSH.S response
  2778. #emit PUSH.S objectid
  2779. #emit PUSH.S playerid
  2780. #emit PUSH.C 36
  2781. #emit CONST.alt YSI_g_sCallbackAddresses
  2782. #emit LOAD.S.pri start
  2783. #emit INC.pri
  2784. #emit STOR.S.pri start
  2785. #emit LIDX
  2786. #emit MOVE.alt
  2787. #emit LCTRL 6
  2788. #emit ADD.C 24
  2789. #emit PUSH.pri
  2790. #emit MOVE.pri
  2791. #emit SCTRL 6
  2792. #emit MOVE.alt
  2793. #emit CONST.pri 0xFFFFFFFE
  2794. #emit AND
  2795. #emit PUSH.pri
  2796. #emit LOAD.S.pri ret
  2797. #emit AND
  2798. #emit POP.alt
  2799. #emit OR
  2800. #emit STOR.S.pri ret
  2801. }
  2802. while (start != end && ret >= 0);
  2803. return (ret == 1);
  2804. }
  2805. #if defined _ALS_OnPlayerEditDynamicObject
  2806. #undef OnPlayerEditDynamicObject
  2807. #else
  2808. #define _ALS_OnPlayerEditDynamicObject
  2809. #endif
  2810. #define OnPlayerEditDynamicObject(%0) S@@_OnPlayerEditDynamicObject(%0)
  2811. HOOK_FORWARD<PlayerEditDynamicObject>
  2812. //forward S@@_OnPlayerEditDynamicObject(playerid, objectid, response, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz);
  2813. //public S@@_OnPlayerEditDynamicObject(playerid, objectid, response, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz)<_ALS_:unhooked>{return 1;}
  2814. //public S@@_OnPlayerEditDynamicObject(playerid, objectid, response, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz)<>{return 1;}
  2815. public OnPlayerSelectDynamicObject(playerid, objectid, modelid, Float:x, Float:y, Float:z)
  2816. {
  2817. P:2("Hooks_OnPlayerSelectDynamicObject called: %d, %d, %d, %f, %f, %f", playerid, objectid, modelid, x, y, z);
  2818. new
  2819. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerSelectDynamicObject],
  2820. start = _:YSI_g_sCallbackStart[ALS_OnPlayerSelectDynamicObject],
  2821. ret = ALS_R_PlayerSelectDynamicObject;
  2822. do
  2823. {
  2824. #emit PUSH.S z
  2825. #emit PUSH.S y
  2826. #emit PUSH.S x
  2827. #emit PUSH.S modelid
  2828. #emit PUSH.S objectid
  2829. #emit PUSH.S playerid
  2830. #emit PUSH.C 24
  2831. #emit CONST.alt YSI_g_sCallbackAddresses
  2832. #emit LOAD.S.pri start
  2833. #emit INC.pri
  2834. #emit STOR.S.pri start
  2835. #emit LIDX
  2836. #emit MOVE.alt
  2837. #emit LCTRL 6
  2838. #emit ADD.C 24
  2839. #emit PUSH.pri
  2840. #emit MOVE.pri
  2841. #emit SCTRL 6
  2842. #emit MOVE.alt
  2843. #emit CONST.pri 0xFFFFFFFE
  2844. #emit AND
  2845. #emit PUSH.pri
  2846. #emit LOAD.S.pri ret
  2847. #emit AND
  2848. #emit POP.alt
  2849. #emit OR
  2850. #emit STOR.S.pri ret
  2851. }
  2852. while (start != end && ret >= 0);
  2853. return (ret == 1);
  2854. }
  2855. #if defined _ALS_OnPlayerSelectDynamicObj
  2856. #undef OnPlayerSelectDynamicObject
  2857. #else
  2858. #define _ALS_OnPlayerSelectDynamicObj
  2859. #endif
  2860. #define OnPlayerSelectDynamicObject(%0) S@@_OnPlayerSelectDynamicObject(%0)
  2861. HOOK_FORWARD<PlayerSelectDynamicObject>
  2862. //forward S@@_OnPlayerEditDynamicObject(playerid, objectid, modelid, Float:x, Float:y, Float:z);
  2863. //public S@@_OnPlayerEditDynamicObject(playerid, objectid, modelid, Float:x, Float:y, Float:z)<_ALS_:unhooked>{return 1;}
  2864. //public S@@_OnPlayerEditDynamicObject(playerid, objectid, modelid, Float:x, Float:y, Float:z)<>{return 1;}
  2865. public OnPlayerPickUpDynamicPickup(playerid, pickupid)
  2866. {
  2867. P:2("Hooks_OnPlayerPickUpDynamicPickup called: %d, %d", playerid, pickupid);
  2868. new
  2869. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerPickUpDynamicPickup],
  2870. start = _:YSI_g_sCallbackStart[ALS_OnPlayerPickUpDynamicPickup],
  2871. ret = ALS_R_PlayerPickUpDynamicPickup;
  2872. do
  2873. {
  2874. #emit PUSH.S pickupid
  2875. #emit PUSH.S playerid
  2876. #emit PUSH.C 8
  2877. #emit CONST.alt YSI_g_sCallbackAddresses
  2878. #emit LOAD.S.pri start
  2879. #emit INC.pri
  2880. #emit STOR.S.pri start
  2881. #emit LIDX
  2882. #emit MOVE.alt
  2883. #emit LCTRL 6
  2884. #emit ADD.C 24
  2885. #emit PUSH.pri
  2886. #emit MOVE.pri
  2887. #emit SCTRL 6
  2888. #emit MOVE.alt
  2889. #emit CONST.pri 0xFFFFFFFE
  2890. #emit AND
  2891. #emit PUSH.pri
  2892. #emit LOAD.S.pri ret
  2893. #emit AND
  2894. #emit POP.alt
  2895. #emit OR
  2896. #emit STOR.S.pri ret
  2897. }
  2898. while (start != end && ret >= 0);
  2899. return (ret == 1);
  2900. }
  2901. #if defined _ALS_OnPlayerPickUpDynamicPUp
  2902. #undef OnPlayerPickUpDynamicPickup
  2903. #else
  2904. #define _ALS_OnPlayerPickUpDynamicPUp
  2905. #endif
  2906. #define OnPlayerPickUpDynamicPickup(%0) S@@_OnPlayerPickUpDynamicPickup(%0)
  2907. HOOK_FORWARD<PlayerPickUpDynamicPickup>
  2908. public OnPlayerEnterDynamicCP(playerid, checkpointid)
  2909. {
  2910. P:2("Hooks_OnPlayerEnterDynamicCP called: %d, %d", playerid, checkpointid);
  2911. new
  2912. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerEnterDynamicCP],
  2913. start = _:YSI_g_sCallbackStart[ALS_OnPlayerEnterDynamicCP],
  2914. ret = ALS_R_PlayerEnterDynamicCP;
  2915. do
  2916. {
  2917. #emit PUSH.S checkpointid
  2918. #emit PUSH.S playerid
  2919. #emit PUSH.C 8
  2920. #emit CONST.alt YSI_g_sCallbackAddresses
  2921. #emit LOAD.S.pri start
  2922. #emit INC.pri
  2923. #emit STOR.S.pri start
  2924. #emit LIDX
  2925. #emit MOVE.alt
  2926. #emit LCTRL 6
  2927. #emit ADD.C 24
  2928. #emit PUSH.pri
  2929. #emit MOVE.pri
  2930. #emit SCTRL 6
  2931. #emit MOVE.alt
  2932. #emit CONST.pri 0xFFFFFFFE
  2933. #emit AND
  2934. #emit PUSH.pri
  2935. #emit LOAD.S.pri ret
  2936. #emit AND
  2937. #emit POP.alt
  2938. #emit OR
  2939. #emit STOR.S.pri ret
  2940. }
  2941. while (start != end && ret >= 0);
  2942. return (ret == 1);
  2943. }
  2944. #if defined _ALS_OnPlayerEnterDynamicCP
  2945. #undef OnPlayerEnterDynamicCP
  2946. #else
  2947. #define _ALS_OnPlayerEnterDynamicCP
  2948. #endif
  2949. #define OnPlayerEnterDynamicCP(%0) S@@_OnPlayerEnterDynamicCP(%0)
  2950. HOOK_FORWARD<PlayerEnterDynamicCP>
  2951. public OnPlayerLeaveDynamicCP(playerid, checkpointid)
  2952. {
  2953. P:2("Hooks_OnPlayerLeaveDynamicCP called: %d, %d", playerid, checkpointid);
  2954. new
  2955. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerLeaveDynamicCP],
  2956. start = _:YSI_g_sCallbackStart[ALS_OnPlayerLeaveDynamicCP],
  2957. ret = ALS_R_PlayerLeaveDynamicCP;
  2958. do
  2959. {
  2960. #emit PUSH.S checkpointid
  2961. #emit PUSH.S playerid
  2962. #emit PUSH.C 8
  2963. #emit CONST.alt YSI_g_sCallbackAddresses
  2964. #emit LOAD.S.pri start
  2965. #emit INC.pri
  2966. #emit STOR.S.pri start
  2967. #emit LIDX
  2968. #emit MOVE.alt
  2969. #emit LCTRL 6
  2970. #emit ADD.C 24
  2971. #emit PUSH.pri
  2972. #emit MOVE.pri
  2973. #emit SCTRL 6
  2974. #emit MOVE.alt
  2975. #emit CONST.pri 0xFFFFFFFE
  2976. #emit AND
  2977. #emit PUSH.pri
  2978. #emit LOAD.S.pri ret
  2979. #emit AND
  2980. #emit POP.alt
  2981. #emit OR
  2982. #emit STOR.S.pri ret
  2983. }
  2984. while (start != end && ret >= 0);
  2985. return (ret == 1);
  2986. }
  2987. #if defined _ALS_OnPlayerLeaveDynamicCP
  2988. #undef OnPlayerLeaveDynamicCP
  2989. #else
  2990. #define _ALS_OnPlayerLeaveDynamicCP
  2991. #endif
  2992. #define OnPlayerLeaveDynamicCP(%0) S@@_OnPlayerLeaveDynamicCP(%0)
  2993. HOOK_FORWARD<PlayerLeaveDynamicCP>
  2994. public OnPlayerEnterDynamicRaceCP(playerid, checkpointid)
  2995. {
  2996. P:2("Hooks_OnPlayerEnterDynamicRaceCP called: %d, %d", playerid, checkpointid);
  2997. new
  2998. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerEnterDynamicRaceCP],
  2999. start = _:YSI_g_sCallbackStart[ALS_OnPlayerEnterDynamicRaceCP],
  3000. ret = ALS_R_PlayerEnterDynamicRaceCP;
  3001. do
  3002. {
  3003. #emit PUSH.S checkpointid
  3004. #emit PUSH.S playerid
  3005. #emit PUSH.C 8
  3006. #emit CONST.alt YSI_g_sCallbackAddresses
  3007. #emit LOAD.S.pri start
  3008. #emit INC.pri
  3009. #emit STOR.S.pri start
  3010. #emit LIDX
  3011. #emit MOVE.alt
  3012. #emit LCTRL 6
  3013. #emit ADD.C 24
  3014. #emit PUSH.pri
  3015. #emit MOVE.pri
  3016. #emit SCTRL 6
  3017. #emit MOVE.alt
  3018. #emit CONST.pri 0xFFFFFFFE
  3019. #emit AND
  3020. #emit PUSH.pri
  3021. #emit LOAD.S.pri ret
  3022. #emit AND
  3023. #emit POP.alt
  3024. #emit OR
  3025. #emit STOR.S.pri ret
  3026. }
  3027. while (start != end && ret >= 0);
  3028. return (ret == 1);
  3029. }
  3030. #if defined _ALS_OnPlayerEnterDynamicRaceCP
  3031. #undef OnPlayerEnterDynamicRaceCP
  3032. #else
  3033. #define _ALS_OnPlayerEnterDynamicRaceCP
  3034. #endif
  3035. #define OnPlayerEnterDynamicRaceCP(%0) S@@_OnPlayerEnterDynamicRaceCP(%0)
  3036. HOOK_FORWARD<PlayerEnterDynamicRaceCP>
  3037. public OnPlayerLeaveDynamicRaceCP(playerid, checkpointid)
  3038. {
  3039. P:2("Hooks_OnPlayerLeaveDynamicRaceCP called: %d, %d", playerid, checkpointid);
  3040. new
  3041. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerLeaveDynamicRaceCP],
  3042. start = _:YSI_g_sCallbackStart[ALS_OnPlayerLeaveDynamicRaceCP],
  3043. ret = ALS_R_PlayerLeaveDynamicRaceCP;
  3044. do
  3045. {
  3046. #emit PUSH.S checkpointid
  3047. #emit PUSH.S playerid
  3048. #emit PUSH.C 8
  3049. #emit CONST.alt YSI_g_sCallbackAddresses
  3050. #emit LOAD.S.pri start
  3051. #emit INC.pri
  3052. #emit STOR.S.pri start
  3053. #emit LIDX
  3054. #emit MOVE.alt
  3055. #emit LCTRL 6
  3056. #emit ADD.C 24
  3057. #emit PUSH.pri
  3058. #emit MOVE.pri
  3059. #emit SCTRL 6
  3060. #emit MOVE.alt
  3061. #emit CONST.pri 0xFFFFFFFE
  3062. #emit AND
  3063. #emit PUSH.pri
  3064. #emit LOAD.S.pri ret
  3065. #emit AND
  3066. #emit POP.alt
  3067. #emit OR
  3068. #emit STOR.S.pri ret
  3069. }
  3070. while (start != end && ret >= 0);
  3071. return (ret == 1);
  3072. }
  3073. #if defined _ALS_OnPlayerLeaveDynamicRaceCP
  3074. #undef OnPlayerLeaveDynamicRaceCP
  3075. #else
  3076. #define _ALS_OnPlayerLeaveDynamicRaceCP
  3077. #endif
  3078. #define OnPlayerLeaveDynamicRaceCP(%0) S@@_OnPlayerLeaveDynamicRaceCP(%0)
  3079. HOOK_FORWARD<PlayerLeaveDynamicRaceCP>
  3080. public OnPlayerEnterDynamicArea(playerid, areaid)
  3081. {
  3082. P:2("Hooks_OnPlayerEnterDynamicArea called: %d, %d", playerid, areaid);
  3083. new
  3084. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerEnterDynamicArea],
  3085. start = _:YSI_g_sCallbackStart[ALS_OnPlayerEnterDynamicArea],
  3086. ret = ALS_R_PlayerEnterDynamicArea;
  3087. do
  3088. {
  3089. #emit PUSH.S areaid
  3090. #emit PUSH.S playerid
  3091. #emit PUSH.C 8
  3092. #emit CONST.alt YSI_g_sCallbackAddresses
  3093. #emit LOAD.S.pri start
  3094. #emit INC.pri
  3095. #emit STOR.S.pri start
  3096. #emit LIDX
  3097. #emit MOVE.alt
  3098. #emit LCTRL 6
  3099. #emit ADD.C 24
  3100. #emit PUSH.pri
  3101. #emit MOVE.pri
  3102. #emit SCTRL 6
  3103. #emit MOVE.alt
  3104. #emit CONST.pri 0xFFFFFFFE
  3105. #emit AND
  3106. #emit PUSH.pri
  3107. #emit LOAD.S.pri ret
  3108. #emit AND
  3109. #emit POP.alt
  3110. #emit OR
  3111. #emit STOR.S.pri ret
  3112. }
  3113. while (start != end && ret >= 0);
  3114. return (ret == 1);
  3115. }
  3116. #if defined _ALS_OnPlayerEnterDynamicArea
  3117. #undef OnPlayerEnterDynamicArea
  3118. #else
  3119. #define _ALS_OnPlayerEnterDynamicArea
  3120. #endif
  3121. #define OnPlayerEnterDynamicArea(%0) S@@_OnPlayerEnterDynamicArea(%0)
  3122. HOOK_FORWARD<PlayerEnterDynamicArea>
  3123. public OnPlayerLeaveDynamicArea(playerid, areaid)
  3124. {
  3125. P:2("Hooks_OnPlayerLeaveDynamicArea called: %d, %d", playerid, areaid);
  3126. new
  3127. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerLeaveDynamicArea],
  3128. start = _:YSI_g_sCallbackStart[ALS_OnPlayerLeaveDynamicArea],
  3129. ret = ALS_R_PlayerLeaveDynamicArea;
  3130. do
  3131. {
  3132. #emit PUSH.S areaid
  3133. #emit PUSH.S playerid
  3134. #emit PUSH.C 8
  3135. #emit CONST.alt YSI_g_sCallbackAddresses
  3136. #emit LOAD.S.pri start
  3137. #emit INC.pri
  3138. #emit STOR.S.pri start
  3139. #emit LIDX
  3140. #emit MOVE.alt
  3141. #emit LCTRL 6
  3142. #emit ADD.C 24
  3143. #emit PUSH.pri
  3144. #emit MOVE.pri
  3145. #emit SCTRL 6
  3146. #emit MOVE.alt
  3147. #emit CONST.pri 0xFFFFFFFE
  3148. #emit AND
  3149. #emit PUSH.pri
  3150. #emit LOAD.S.pri ret
  3151. #emit AND
  3152. #emit POP.alt
  3153. #emit OR
  3154. #emit STOR.S.pri ret
  3155. }
  3156. while (start != end && ret >= 0);
  3157. return (ret == 1);
  3158. }
  3159. #if defined _ALS_OnPlayerLeaveDynamicArea
  3160. #undef OnPlayerLeaveDynamicArea
  3161. #else
  3162. #define _ALS_OnPlayerLeaveDynamicArea
  3163. #endif
  3164. #define OnPlayerLeaveDynamicArea(%0) S@@_OnPlayerLeaveDynamicArea(%0)
  3165. HOOK_FORWARD<PlayerLeaveDynamicArea>
  3166. #undef ALS_MAKE