impl.inc 85 KB

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