impl.inc 85 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528
  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. // alt = f()
  636. // pri = 0xFFFFFFFE
  637. // push (f() & 0xFFFFFFFE)
  638. // pri = ret & f()
  639. // ret = (f() & 0xFFFFFFFE) | (ret & f())
  640. #emit MOVE.alt
  641. #emit CONST.pri 0xFFFFFFFE
  642. #emit AND
  643. #emit PUSH.pri
  644. #emit LOAD.S.pri ret
  645. #emit AND
  646. #emit POP.alt
  647. #emit OR
  648. #emit STOR.S.pri ret
  649. if (ret < 0) return ret + 1;
  650. }
  651. return ret;
  652. }
  653. #if defined _ALS_OnPlayerDisconnect
  654. #undef OnPlayerDisconnect
  655. #else
  656. #define _ALS_OnPlayerDisconnect
  657. #endif
  658. #define OnPlayerDisconnect S@@_OnPlayerDisconnect
  659. HOOK_FORWARD<PlayerDisconnect>
  660. public OnPlayerSpawn(playerid)
  661. {
  662. P:2("Hooks_OnPlayerSpawn called: %d", playerid);
  663. new
  664. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerSpawn],
  665. start = _:YSI_g_sCallbackStart[ALS_OnPlayerSpawn],
  666. ret = ALS_R_PlayerSpawn;
  667. while (start++ != end)
  668. {
  669. #emit PUSH.S playerid
  670. #emit PUSH.C 4
  671. #emit CONST.alt YSI_g_sCallbackAddresses
  672. #emit LOAD.S.pri start
  673. //#emit INC.pri
  674. //#emit STOR.S.pri start
  675. #emit LIDX
  676. #emit MOVE.alt
  677. #emit LCTRL 6
  678. #emit ADD.C 24
  679. #emit PUSH.pri
  680. #emit MOVE.pri
  681. #emit SCTRL 6
  682. #emit MOVE.alt
  683. #emit CONST.pri 0xFFFFFFFE
  684. #emit AND
  685. #emit PUSH.pri
  686. #emit LOAD.S.pri ret
  687. #emit AND
  688. #emit POP.alt
  689. #emit OR
  690. #emit STOR.S.pri ret
  691. if (ret < 0) return ret + 1;
  692. }
  693. return ret;
  694. }
  695. #if defined _ALS_OnPlayerSpawn
  696. #undef OnPlayerSpawn
  697. #else
  698. #define _ALS_OnPlayerSpawn
  699. #endif
  700. #define OnPlayerSpawn S@@_OnPlayerSpawn
  701. HOOK_FORWARD<PlayerSpawn>
  702. public OnPlayerDeath(playerid, killerid, reason)
  703. {
  704. P:2("Hooks_OnPlayerDeath called: %d, %d, %d", playerid, killerid, reason);
  705. new
  706. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerDeath],
  707. start = _:YSI_g_sCallbackStart[ALS_OnPlayerDeath],
  708. ret = ALS_R_PlayerDeath;
  709. while (start++ != end)
  710. {
  711. #emit PUSH.S reason
  712. #emit PUSH.S killerid
  713. #emit PUSH.S playerid
  714. #emit PUSH.C 12
  715. #emit CONST.alt YSI_g_sCallbackAddresses
  716. #emit LOAD.S.pri start
  717. //#emit INC.pri
  718. //#emit STOR.S.pri start
  719. #emit LIDX
  720. #emit MOVE.alt
  721. #emit LCTRL 6
  722. #emit ADD.C 24
  723. #emit PUSH.pri
  724. #emit MOVE.pri
  725. #emit SCTRL 6
  726. #emit MOVE.alt
  727. #emit CONST.pri 0xFFFFFFFE
  728. #emit AND
  729. #emit PUSH.pri
  730. #emit LOAD.S.pri ret
  731. #emit AND
  732. #emit POP.alt
  733. #emit OR
  734. #emit STOR.S.pri ret
  735. if (ret < 0) return ret + 1;
  736. }
  737. return ret;
  738. }
  739. #if defined _ALS_OnPlayerDeath
  740. #undef OnPlayerDeath
  741. #else
  742. #define _ALS_OnPlayerDeath
  743. #endif
  744. #define OnPlayerDeath S@@_OnPlayerDeath
  745. HOOK_FORWARD<PlayerDeath>
  746. public OnVehicleSpawn(vehicleid)
  747. {
  748. P:2("Hooks_OnVehicleSpawn called: %d", vehicleid);
  749. new
  750. end = _:YSI_g_sCallbackEnd[ALS_OnVehicleSpawn],
  751. start = _:YSI_g_sCallbackStart[ALS_OnVehicleSpawn],
  752. ret = ALS_R_VehicleSpawn;
  753. while (start++ != end)
  754. {
  755. #emit PUSH.S vehicleid
  756. #emit PUSH.C 4
  757. #emit CONST.alt YSI_g_sCallbackAddresses
  758. #emit LOAD.S.pri start
  759. //#emit INC.pri
  760. //#emit STOR.S.pri start
  761. #emit LIDX
  762. #emit MOVE.alt
  763. #emit LCTRL 6
  764. #emit ADD.C 24
  765. #emit PUSH.pri
  766. #emit MOVE.pri
  767. #emit SCTRL 6
  768. #emit MOVE.alt
  769. #emit CONST.pri 0xFFFFFFFE
  770. #emit AND
  771. #emit PUSH.pri
  772. #emit LOAD.S.pri ret
  773. #emit AND
  774. #emit POP.alt
  775. #emit OR
  776. #emit STOR.S.pri ret
  777. if (ret < 0) return ret + 1;
  778. }
  779. return ret;
  780. }
  781. #if defined _ALS_OnVehicleSpawn
  782. #undef OnVehicleSpawn
  783. #else
  784. #define _ALS_OnVehicleSpawn
  785. #endif
  786. #define OnVehicleSpawn S@@_OnVehicleSpawn
  787. HOOK_FORWARD<VehicleSpawn>
  788. public OnVehicleDeath(vehicleid, killerid)
  789. {
  790. P:2("Hooks_OnVehicleDeath called: %d, %d", vehicleid, killerid);
  791. new
  792. end = _:YSI_g_sCallbackEnd[ALS_OnVehicleDeath],
  793. start = _:YSI_g_sCallbackStart[ALS_OnVehicleDeath],
  794. ret = ALS_R_VehicleDeath;
  795. while (start++ != end)
  796. {
  797. #emit PUSH.S killerid
  798. #emit PUSH.S vehicleid
  799. #emit PUSH.C 8
  800. #emit CONST.alt YSI_g_sCallbackAddresses
  801. #emit LOAD.S.pri start
  802. //#emit INC.pri
  803. //#emit STOR.S.pri start
  804. #emit LIDX
  805. #emit MOVE.alt
  806. #emit LCTRL 6
  807. #emit ADD.C 24
  808. #emit PUSH.pri
  809. #emit MOVE.pri
  810. #emit SCTRL 6
  811. #emit MOVE.alt
  812. #emit CONST.pri 0xFFFFFFFE
  813. #emit AND
  814. #emit PUSH.pri
  815. #emit LOAD.S.pri ret
  816. #emit AND
  817. #emit POP.alt
  818. #emit OR
  819. #emit STOR.S.pri ret
  820. if (ret < 0) return ret + 1;
  821. }
  822. return ret;
  823. }
  824. #if defined _ALS_OnVehicleDeath
  825. #undef OnVehicleDeath
  826. #else
  827. #define _ALS_OnVehicleDeath
  828. #endif
  829. #define OnVehicleDeath S@@_OnVehicleDeath
  830. HOOK_FORWARD<VehicleDeath>
  831. public OnPlayerText(playerid, text[])
  832. {
  833. P:2("Hooks_OnPlayerText called: %d, \"%s\"", playerid, text);
  834. new
  835. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerText],
  836. start = _:YSI_g_sCallbackStart[ALS_OnPlayerText],
  837. ret = ALS_R_PlayerText;
  838. while (start++ != end)
  839. {
  840. #emit PUSH.S text
  841. #emit PUSH.S playerid
  842. #emit PUSH.C 8
  843. #emit CONST.alt YSI_g_sCallbackAddresses
  844. #emit LOAD.S.pri start
  845. //#emit INC.pri
  846. //#emit STOR.S.pri start
  847. #emit LIDX
  848. #emit MOVE.alt
  849. #emit LCTRL 6
  850. #emit ADD.C 24
  851. #emit PUSH.pri
  852. #emit MOVE.pri
  853. #emit SCTRL 6
  854. #emit MOVE.alt
  855. #emit CONST.pri 0xFFFFFFFE
  856. #emit AND
  857. #emit PUSH.pri
  858. #emit LOAD.S.pri ret
  859. #emit AND
  860. #emit POP.alt
  861. #emit OR
  862. #emit STOR.S.pri ret
  863. if (ret < 0) return ret + 1;
  864. }
  865. return ret;
  866. }
  867. #if defined _ALS_OnPlayerText
  868. #undef OnPlayerText
  869. #else
  870. #define _ALS_OnPlayerText
  871. #endif
  872. #define OnPlayerText S@@_OnPlayerText
  873. HOOK_FORWARD<PlayerText>
  874. public OnPlayerCommandText(playerid, cmdtext[])
  875. {
  876. P:2("Hooks_OnPlayerCommandText called: %d, \"%s\"", playerid, cmdtext);
  877. new
  878. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerCommandText],
  879. start = _:YSI_g_sCallbackStart[ALS_OnPlayerCommandText],
  880. ret = ALS_R_PlayerCommandText;
  881. while (start++ != end)
  882. {
  883. #emit PUSH.S cmdtext
  884. #emit PUSH.S playerid
  885. #emit PUSH.C 8
  886. #emit CONST.alt YSI_g_sCallbackAddresses
  887. #emit LOAD.S.pri start
  888. //#emit INC.pri
  889. //#emit STOR.S.pri start
  890. #emit LIDX
  891. #emit MOVE.alt
  892. #emit LCTRL 6
  893. #emit ADD.C 24
  894. #emit PUSH.pri
  895. #emit MOVE.pri
  896. #emit SCTRL 6
  897. // THIS CODE IS SUBTLY DIFFERENT!
  898. #emit LOAD.S.alt ret
  899. #emit OR
  900. #emit STOR.S.pri ret
  901. if (ret < 0) return ret + 1;
  902. }
  903. return ret;
  904. }
  905. #if defined _ALS_OnPlayerCommandText
  906. #undef OnPlayerCommandText
  907. #else
  908. #define _ALS_OnPlayerCommandText
  909. #endif
  910. #define OnPlayerCommandText S@@_OnPlayerCommandText
  911. HOOK_FORWARD<PlayerCommandText>
  912. public OnPlayerRequestClass(playerid, classid)
  913. {
  914. P:2("Hooks_OnPlayerRequestClass called: %d, %d", playerid, classid);
  915. new
  916. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerRequestClass],
  917. start = _:YSI_g_sCallbackStart[ALS_OnPlayerRequestClass],
  918. ret = ALS_R_PlayerRequestClass;
  919. while (start++ != end)
  920. {
  921. #emit PUSH.S classid
  922. #emit PUSH.S playerid
  923. #emit PUSH.C 8
  924. #emit CONST.alt YSI_g_sCallbackAddresses
  925. #emit LOAD.S.pri start
  926. //#emit INC.pri
  927. //#emit STOR.S.pri start
  928. #emit LIDX
  929. #emit MOVE.alt
  930. #emit LCTRL 6
  931. #emit ADD.C 24
  932. #emit PUSH.pri
  933. #emit MOVE.pri
  934. #emit SCTRL 6
  935. #emit MOVE.alt
  936. #emit CONST.pri 0xFFFFFFFE
  937. #emit AND
  938. #emit PUSH.pri
  939. #emit LOAD.S.pri ret
  940. #emit AND
  941. #emit POP.alt
  942. #emit OR
  943. #emit STOR.S.pri ret
  944. if (ret < 0) return ret + 1;
  945. }
  946. return ret;
  947. }
  948. #if defined _ALS_OnPlayerRequestClass
  949. #undef OnPlayerRequestClass
  950. #else
  951. #define _ALS_OnPlayerRequestClass
  952. #endif
  953. #define OnPlayerRequestClass S@@_OnPlayerRequestClass
  954. HOOK_FORWARD<PlayerRequestClass>
  955. public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
  956. {
  957. P:2("Hooks_OnPlayerEnterVehicle called: %d, %d, %d", playerid, vehicleid, ispassenger);
  958. new
  959. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerEnterVehicle],
  960. start = _:YSI_g_sCallbackStart[ALS_OnPlayerEnterVehicle],
  961. ret = ALS_R_PlayerEnterVehicle;
  962. while (start++ != end)
  963. {
  964. #emit PUSH.S ispassenger
  965. #emit PUSH.S vehicleid
  966. #emit PUSH.S playerid
  967. #emit PUSH.C 12
  968. #emit CONST.alt YSI_g_sCallbackAddresses
  969. #emit LOAD.S.pri start
  970. //#emit INC.pri
  971. //#emit STOR.S.pri start
  972. #emit LIDX
  973. #emit MOVE.alt
  974. #emit LCTRL 6
  975. #emit ADD.C 24
  976. #emit PUSH.pri
  977. #emit MOVE.pri
  978. #emit SCTRL 6
  979. #emit MOVE.alt
  980. #emit CONST.pri 0xFFFFFFFE
  981. #emit AND
  982. #emit PUSH.pri
  983. #emit LOAD.S.pri ret
  984. #emit AND
  985. #emit POP.alt
  986. #emit OR
  987. #emit STOR.S.pri ret
  988. if (ret < 0) return ret + 1;
  989. }
  990. return ret;
  991. }
  992. #if defined _ALS_OnPlayerEnterVehicle
  993. #undef OnPlayerEnterVehicle
  994. #else
  995. #define _ALS_OnPlayerEnterVehicle
  996. #endif
  997. #define OnPlayerEnterVehicle S@@_OnPlayerEnterVehicle
  998. HOOK_FORWARD<PlayerEnterVehicle>
  999. public OnPlayerExitVehicle(playerid, vehicleid)
  1000. {
  1001. P:2("Hooks_OnPlayerExitVehicle called: %d, %d", playerid, vehicleid);
  1002. new
  1003. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerExitVehicle],
  1004. start = _:YSI_g_sCallbackStart[ALS_OnPlayerExitVehicle],
  1005. ret = ALS_R_PlayerExitVehicle;
  1006. while (start++ != end)
  1007. {
  1008. #emit PUSH.S vehicleid
  1009. #emit PUSH.S playerid
  1010. #emit PUSH.C 8
  1011. #emit CONST.alt YSI_g_sCallbackAddresses
  1012. #emit LOAD.S.pri start
  1013. //#emit INC.pri
  1014. //#emit STOR.S.pri start
  1015. #emit LIDX
  1016. #emit MOVE.alt
  1017. #emit LCTRL 6
  1018. #emit ADD.C 24
  1019. #emit PUSH.pri
  1020. #emit MOVE.pri
  1021. #emit SCTRL 6
  1022. #emit MOVE.alt
  1023. #emit CONST.pri 0xFFFFFFFE
  1024. #emit AND
  1025. #emit PUSH.pri
  1026. #emit LOAD.S.pri ret
  1027. #emit AND
  1028. #emit POP.alt
  1029. #emit OR
  1030. #emit STOR.S.pri ret
  1031. if (ret < 0) return ret + 1;
  1032. }
  1033. return ret;
  1034. }
  1035. #if defined _ALS_OnPlayerExitVehicle
  1036. #undef OnPlayerExitVehicle
  1037. #else
  1038. #define _ALS_OnPlayerExitVehicle
  1039. #endif
  1040. #define OnPlayerExitVehicle S@@_OnPlayerExitVehicle
  1041. HOOK_FORWARD<PlayerExitVehicle>
  1042. public OnPlayerStateChange(playerid, newstate, oldstate)
  1043. {
  1044. P:2("Hooks_OnPlayerStateChange called: %d, %d, %d", playerid, newstate, oldstate);
  1045. new
  1046. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerStateChange],
  1047. start = _:YSI_g_sCallbackStart[ALS_OnPlayerStateChange],
  1048. ret = ALS_R_PlayerStateChange;
  1049. while (start++ != end)
  1050. {
  1051. #emit PUSH.S oldstate
  1052. #emit PUSH.S newstate
  1053. #emit PUSH.S playerid
  1054. #emit PUSH.C 12
  1055. #emit CONST.alt YSI_g_sCallbackAddresses
  1056. #emit LOAD.S.pri start
  1057. //#emit INC.pri
  1058. //#emit STOR.S.pri start
  1059. #emit LIDX
  1060. #emit MOVE.alt
  1061. #emit LCTRL 6
  1062. #emit ADD.C 24
  1063. #emit PUSH.pri
  1064. #emit MOVE.pri
  1065. #emit SCTRL 6
  1066. #emit MOVE.alt
  1067. #emit CONST.pri 0xFFFFFFFE
  1068. #emit AND
  1069. #emit PUSH.pri
  1070. #emit LOAD.S.pri ret
  1071. #emit AND
  1072. #emit POP.alt
  1073. #emit OR
  1074. #emit STOR.S.pri ret
  1075. if (ret < 0) return ret + 1;
  1076. }
  1077. return ret;
  1078. }
  1079. #if defined _ALS_OnPlayerStateChange
  1080. #undef OnPlayerStateChange
  1081. #else
  1082. #define _ALS_OnPlayerStateChange
  1083. #endif
  1084. #define OnPlayerStateChange S@@_OnPlayerStateChange
  1085. HOOK_FORWARD<PlayerStateChange>
  1086. public OnPlayerEnterCheckpoint(playerid)
  1087. {
  1088. P:2("Hooks_OnPlayerEnterCheckpoint called: %d", playerid);
  1089. new
  1090. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerEnterCheckpoint],
  1091. start = _:YSI_g_sCallbackStart[ALS_OnPlayerEnterCheckpoint],
  1092. ret = ALS_R_PlayerEnterCheckpoint;
  1093. while (start++ != end)
  1094. {
  1095. #emit PUSH.S playerid
  1096. #emit PUSH.C 4
  1097. #emit CONST.alt YSI_g_sCallbackAddresses
  1098. #emit LOAD.S.pri start
  1099. //#emit INC.pri
  1100. //#emit STOR.S.pri start
  1101. #emit LIDX
  1102. #emit MOVE.alt
  1103. #emit LCTRL 6
  1104. #emit ADD.C 24
  1105. #emit PUSH.pri
  1106. #emit MOVE.pri
  1107. #emit SCTRL 6
  1108. #emit MOVE.alt
  1109. #emit CONST.pri 0xFFFFFFFE
  1110. #emit AND
  1111. #emit PUSH.pri
  1112. #emit LOAD.S.pri ret
  1113. #emit AND
  1114. #emit POP.alt
  1115. #emit OR
  1116. #emit STOR.S.pri ret
  1117. if (ret < 0) return ret + 1;
  1118. }
  1119. return ret;
  1120. }
  1121. #if defined _ALS_OnPlayerEnterCheckpoint
  1122. #undef OnPlayerEnterCheckpoint
  1123. #else
  1124. #define _ALS_OnPlayerEnterCheckpoint
  1125. #endif
  1126. #define OnPlayerEnterCheckpoint S@@_OnPlayerEnterCheckpoint
  1127. HOOK_FORWARD<PlayerEnterCheckpoint>
  1128. public OnPlayerLeaveCheckpoint(playerid)
  1129. {
  1130. P:2("Hooks_OnPlayerLeaveCheckpoint called: %d", playerid);
  1131. new
  1132. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerLeaveCheckpoint],
  1133. start = _:YSI_g_sCallbackStart[ALS_OnPlayerLeaveCheckpoint],
  1134. ret = ALS_R_PlayerLeaveCheckpoint;
  1135. while (start++ != end)
  1136. {
  1137. #emit PUSH.S playerid
  1138. #emit PUSH.C 4
  1139. #emit CONST.alt YSI_g_sCallbackAddresses
  1140. #emit LOAD.S.pri start
  1141. //#emit INC.pri
  1142. //#emit STOR.S.pri start
  1143. #emit LIDX
  1144. #emit MOVE.alt
  1145. #emit LCTRL 6
  1146. #emit ADD.C 24
  1147. #emit PUSH.pri
  1148. #emit MOVE.pri
  1149. #emit SCTRL 6
  1150. #emit MOVE.alt
  1151. #emit CONST.pri 0xFFFFFFFE
  1152. #emit AND
  1153. #emit PUSH.pri
  1154. #emit LOAD.S.pri ret
  1155. #emit AND
  1156. #emit POP.alt
  1157. #emit OR
  1158. #emit STOR.S.pri ret
  1159. if (ret < 0) return ret + 1;
  1160. }
  1161. return ret;
  1162. }
  1163. #if defined _ALS_OnPlayerLeaveCheckpoint
  1164. #undef OnPlayerLeaveCheckpoint
  1165. #else
  1166. #define _ALS_OnPlayerLeaveCheckpoint
  1167. #endif
  1168. #define OnPlayerLeaveCheckpoint S@@_OnPlayerLeaveCheckpoint
  1169. HOOK_FORWARD<PlayerLeaveCheckpoint>
  1170. public OnPlayerEnterRaceCheckpoint(playerid)
  1171. {
  1172. P:2("Hooks_OnPlayerEnterRaceCheckpoint called: %d", playerid);
  1173. new
  1174. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerEnterRaceCheckpoint],
  1175. start = _:YSI_g_sCallbackStart[ALS_OnPlayerEnterRaceCheckpoint],
  1176. ret = ALS_R_PlayerEnterRaceCheckpoint;
  1177. while (start++ != end)
  1178. {
  1179. #emit PUSH.S playerid
  1180. #emit PUSH.C 4
  1181. #emit CONST.alt YSI_g_sCallbackAddresses
  1182. #emit LOAD.S.pri start
  1183. //#emit INC.pri
  1184. //#emit STOR.S.pri start
  1185. #emit LIDX
  1186. #emit MOVE.alt
  1187. #emit LCTRL 6
  1188. #emit ADD.C 24
  1189. #emit PUSH.pri
  1190. #emit MOVE.pri
  1191. #emit SCTRL 6
  1192. #emit MOVE.alt
  1193. #emit CONST.pri 0xFFFFFFFE
  1194. #emit AND
  1195. #emit PUSH.pri
  1196. #emit LOAD.S.pri ret
  1197. #emit AND
  1198. #emit POP.alt
  1199. #emit OR
  1200. #emit STOR.S.pri ret
  1201. if (ret < 0) return ret + 1;
  1202. }
  1203. return ret;
  1204. }
  1205. #if defined _ALS_OnPlayerEnterRaceCP
  1206. #undef OnPlayerEnterRaceCheckpoint
  1207. #else
  1208. #define _ALS_OnPlayerEnterRaceCP
  1209. #endif
  1210. #define OnPlayerEnterRaceCheckpoint S@@_OnPlayerEnterRaceCheckpoint
  1211. HOOK_FORWARD<PlayerEnterRaceCheckpoint>
  1212. public OnPlayerLeaveRaceCheckpoint(playerid)
  1213. {
  1214. P:2("Hooks_OnPlayerLeaveRaceCheckpoint called: %d", playerid);
  1215. new
  1216. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerLeaveRaceCheckpoint],
  1217. start = _:YSI_g_sCallbackStart[ALS_OnPlayerLeaveRaceCheckpoint],
  1218. ret = ALS_R_PlayerLeaveRaceCheckpoint;
  1219. while (start++ != end)
  1220. {
  1221. #emit PUSH.S playerid
  1222. #emit PUSH.C 4
  1223. #emit CONST.alt YSI_g_sCallbackAddresses
  1224. #emit LOAD.S.pri start
  1225. //#emit INC.pri
  1226. //#emit STOR.S.pri start
  1227. #emit LIDX
  1228. #emit MOVE.alt
  1229. #emit LCTRL 6
  1230. #emit ADD.C 24
  1231. #emit PUSH.pri
  1232. #emit MOVE.pri
  1233. #emit SCTRL 6
  1234. #emit MOVE.alt
  1235. #emit CONST.pri 0xFFFFFFFE
  1236. #emit AND
  1237. #emit PUSH.pri
  1238. #emit LOAD.S.pri ret
  1239. #emit AND
  1240. #emit POP.alt
  1241. #emit OR
  1242. #emit STOR.S.pri ret
  1243. if (ret < 0) return ret + 1;
  1244. }
  1245. return ret;
  1246. }
  1247. #if defined _ALS_OnPlayerLeaveRaceCP
  1248. #undef OnPlayerLeaveRaceCheckpoint
  1249. #else
  1250. #define _ALS_OnPlayerLeaveRaceCP
  1251. #endif
  1252. #define OnPlayerLeaveRaceCheckpoint S@@_OnPlayerLeaveRaceCheckpoint
  1253. HOOK_FORWARD<PlayerLeaveRaceCheckpoint>
  1254. public OnRconCommand(cmd[])
  1255. {
  1256. P:2("Hooks_OnRconCommand called: \"%s\"", cmd);
  1257. new
  1258. end = _:YSI_g_sCallbackEnd[ALS_OnRconCommand],
  1259. start = _:YSI_g_sCallbackStart[ALS_OnRconCommand],
  1260. ret = ALS_R_RconCommand;
  1261. while (start++ != end)
  1262. {
  1263. #emit PUSH.S cmd
  1264. #emit PUSH.C 4
  1265. #emit CONST.alt YSI_g_sCallbackAddresses
  1266. #emit LOAD.S.pri start
  1267. //#emit INC.pri
  1268. //#emit STOR.S.pri start
  1269. #emit LIDX
  1270. #emit MOVE.alt
  1271. #emit LCTRL 6
  1272. #emit ADD.C 24
  1273. #emit PUSH.pri
  1274. #emit MOVE.pri
  1275. #emit SCTRL 6
  1276. #emit MOVE.alt
  1277. #emit CONST.pri 0xFFFFFFFE
  1278. #emit AND
  1279. #emit PUSH.pri
  1280. #emit LOAD.S.pri ret
  1281. #emit AND
  1282. #emit POP.alt
  1283. #emit OR
  1284. #emit STOR.S.pri ret
  1285. if (ret < 0) return ret + 1;
  1286. }
  1287. return ret;
  1288. }
  1289. #if defined _ALS_OnRconCommand
  1290. #undef OnRconCommand
  1291. #else
  1292. #define _ALS_OnRconCommand
  1293. #endif
  1294. #define OnRconCommand S@@_OnRconCommand
  1295. HOOK_FORWARD<RconCommand>
  1296. public OnPlayerRequestSpawn(playerid)
  1297. {
  1298. P:2("Hooks_OnPlayerRequestSpawn called: %d", playerid);
  1299. new
  1300. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerRequestSpawn],
  1301. start = _:YSI_g_sCallbackStart[ALS_OnPlayerRequestSpawn],
  1302. ret = ALS_R_PlayerRequestSpawn;
  1303. while (start++ != end)
  1304. {
  1305. //printf("start: %d", start);
  1306. #emit PUSH.S playerid
  1307. #emit PUSH.C 4
  1308. #emit CONST.alt YSI_g_sCallbackAddresses
  1309. #emit LOAD.S.pri start
  1310. //#emit INC.pri
  1311. //#emit STOR.S.pri start
  1312. #emit LIDX
  1313. #emit MOVE.alt
  1314. #emit LCTRL 6
  1315. #emit ADD.C 24
  1316. #emit PUSH.pri
  1317. #emit MOVE.pri
  1318. #emit SCTRL 6
  1319. #emit MOVE.alt
  1320. #emit CONST.pri 0xFFFFFFFE
  1321. #emit AND
  1322. #emit PUSH.pri
  1323. #emit LOAD.S.pri ret
  1324. #emit AND
  1325. #emit POP.alt
  1326. #emit OR
  1327. #emit STOR.S.pri ret
  1328. if (ret < 0) return ret + 1;
  1329. //printf("ret: %d", ret);
  1330. }
  1331. return ret;
  1332. }
  1333. #if defined _ALS_OnPlayerRequestSpawn
  1334. #undef OnPlayerRequestSpawn
  1335. #else
  1336. #define _ALS_OnPlayerRequestSpawn
  1337. #endif
  1338. #define OnPlayerRequestSpawn S@@_OnPlayerRequestSpawn
  1339. HOOK_FORWARD<PlayerRequestSpawn>
  1340. public OnObjectMoved(objectid)
  1341. {
  1342. P:2("Hooks_OnObjectMoved called: %d", objectid);
  1343. new
  1344. end = _:YSI_g_sCallbackEnd[ALS_OnObjectMoved],
  1345. start = _:YSI_g_sCallbackStart[ALS_OnObjectMoved],
  1346. ret = ALS_R_ObjectMoved;
  1347. while (start++ != end)
  1348. {
  1349. #emit PUSH.S objectid
  1350. #emit PUSH.C 4
  1351. #emit CONST.alt YSI_g_sCallbackAddresses
  1352. #emit LOAD.S.pri start
  1353. //#emit INC.pri
  1354. //#emit STOR.S.pri start
  1355. #emit LIDX
  1356. #emit MOVE.alt
  1357. #emit LCTRL 6
  1358. #emit ADD.C 24
  1359. #emit PUSH.pri
  1360. #emit MOVE.pri
  1361. #emit SCTRL 6
  1362. #emit MOVE.alt
  1363. #emit CONST.pri 0xFFFFFFFE
  1364. #emit AND
  1365. #emit PUSH.pri
  1366. #emit LOAD.S.pri ret
  1367. #emit AND
  1368. #emit POP.alt
  1369. #emit OR
  1370. #emit STOR.S.pri ret
  1371. if (ret < 0) return ret + 1;
  1372. }
  1373. return ret;
  1374. }
  1375. #if defined _ALS_OnObjectMoved
  1376. #undef OnObjectMoved
  1377. #else
  1378. #define _ALS_OnObjectMoved
  1379. #endif
  1380. #define OnObjectMoved S@@_OnObjectMoved
  1381. HOOK_FORWARD<ObjectMoved>
  1382. public OnPlayerObjectMoved(playerid, objectid)
  1383. {
  1384. P:2("Hooks_OnPlayerObjectMoved called: %d, %d", playerid, objectid);
  1385. new
  1386. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerObjectMoved],
  1387. start = _:YSI_g_sCallbackStart[ALS_OnPlayerObjectMoved],
  1388. ret = ALS_R_PlayerObjectMoved;
  1389. while (start++ != end)
  1390. {
  1391. #emit PUSH.S objectid
  1392. #emit PUSH.S playerid
  1393. #emit PUSH.C 8
  1394. #emit CONST.alt YSI_g_sCallbackAddresses
  1395. #emit LOAD.S.pri start
  1396. //#emit INC.pri
  1397. //#emit STOR.S.pri start
  1398. #emit LIDX
  1399. #emit MOVE.alt
  1400. #emit LCTRL 6
  1401. #emit ADD.C 24
  1402. #emit PUSH.pri
  1403. #emit MOVE.pri
  1404. #emit SCTRL 6
  1405. #emit MOVE.alt
  1406. #emit CONST.pri 0xFFFFFFFE
  1407. #emit AND
  1408. #emit PUSH.pri
  1409. #emit LOAD.S.pri ret
  1410. #emit AND
  1411. #emit POP.alt
  1412. #emit OR
  1413. #emit STOR.S.pri ret
  1414. if (ret < 0) return ret + 1;
  1415. }
  1416. return ret;
  1417. }
  1418. #if defined _ALS_OnPlayerObjectMoved
  1419. #undef OnPlayerObjectMoved
  1420. #else
  1421. #define _ALS_OnPlayerObjectMoved
  1422. #endif
  1423. #define OnPlayerObjectMoved S@@_OnPlayerObjectMoved
  1424. HOOK_FORWARD<PlayerObjectMoved>
  1425. public OnPlayerPickUpPickup(playerid, pickupid)
  1426. {
  1427. P:2("Hooks_OnPlayerPickUpPickup called: %d, %d", playerid, pickupid);
  1428. new
  1429. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerPickUpPickup],
  1430. start = _:YSI_g_sCallbackStart[ALS_OnPlayerPickUpPickup],
  1431. ret = ALS_R_PlayerPickUpPickup;
  1432. while (start++ != end)
  1433. {
  1434. #emit PUSH.S pickupid
  1435. #emit PUSH.S playerid
  1436. #emit PUSH.C 8
  1437. #emit CONST.alt YSI_g_sCallbackAddresses
  1438. #emit LOAD.S.pri start
  1439. //#emit INC.pri
  1440. //#emit STOR.S.pri start
  1441. #emit LIDX
  1442. #emit MOVE.alt
  1443. #emit LCTRL 6
  1444. #emit ADD.C 24
  1445. #emit PUSH.pri
  1446. #emit MOVE.pri
  1447. #emit SCTRL 6
  1448. #emit MOVE.alt
  1449. #emit CONST.pri 0xFFFFFFFE
  1450. #emit AND
  1451. #emit PUSH.pri
  1452. #emit LOAD.S.pri ret
  1453. #emit AND
  1454. #emit POP.alt
  1455. #emit OR
  1456. #emit STOR.S.pri ret
  1457. if (ret < 0) return ret + 1;
  1458. }
  1459. return ret;
  1460. }
  1461. #if defined _ALS_OnPlayerPickUpPickup
  1462. #undef OnPlayerPickUpPickup
  1463. #else
  1464. #define _ALS_OnPlayerPickUpPickup
  1465. #endif
  1466. #define OnPlayerPickUpPickup S@@_OnPlayerPickUpPickup
  1467. HOOK_FORWARD<PlayerPickUpPickup>
  1468. public OnVehicleMod(playerid, vehicleid, componentid)
  1469. {
  1470. P:2("Hooks_OnVehicleMod called: %d, %d, %d", playerid, vehicleid, componentid);
  1471. new
  1472. end = _:YSI_g_sCallbackEnd[ALS_OnVehicleMod],
  1473. start = _:YSI_g_sCallbackStart[ALS_OnVehicleMod],
  1474. ret = ALS_R_VehicleMod;
  1475. while (start++ != end)
  1476. {
  1477. #emit PUSH.S componentid
  1478. #emit PUSH.S vehicleid
  1479. #emit PUSH.S playerid
  1480. #emit PUSH.C 12
  1481. #emit CONST.alt YSI_g_sCallbackAddresses
  1482. #emit LOAD.S.pri start
  1483. //#emit INC.pri
  1484. //#emit STOR.S.pri start
  1485. #emit LIDX
  1486. #emit MOVE.alt
  1487. #emit LCTRL 6
  1488. #emit ADD.C 24
  1489. #emit PUSH.pri
  1490. #emit MOVE.pri
  1491. #emit SCTRL 6
  1492. #emit MOVE.alt
  1493. #emit CONST.pri 0xFFFFFFFE
  1494. #emit AND
  1495. #emit PUSH.pri
  1496. #emit LOAD.S.pri ret
  1497. #emit AND
  1498. #emit POP.alt
  1499. #emit OR
  1500. #emit STOR.S.pri ret
  1501. if (ret < 0) return ret + 1;
  1502. }
  1503. return ret;
  1504. }
  1505. #if defined _ALS_OnVehicleMod
  1506. #undef OnVehicleMod
  1507. #else
  1508. #define _ALS_OnVehicleMod
  1509. #endif
  1510. #define OnVehicleMod S@@_OnVehicleMod
  1511. HOOK_FORWARD<VehicleMod>
  1512. public OnEnterExitModShop(playerid, enterexit, interiorid)
  1513. {
  1514. P:2("Hooks_OnEnterExitModShop called: %d, %d, %d", playerid, enterexit, interiorid);
  1515. new
  1516. end = _:YSI_g_sCallbackEnd[ALS_OnEnterExitModShop],
  1517. start = _:YSI_g_sCallbackStart[ALS_OnEnterExitModShop],
  1518. ret = ALS_R_EnterExitModShop;
  1519. while (start++ != end)
  1520. {
  1521. #emit PUSH.S interiorid
  1522. #emit PUSH.S enterexit
  1523. #emit PUSH.S playerid
  1524. #emit PUSH.C 12
  1525. #emit CONST.alt YSI_g_sCallbackAddresses
  1526. #emit LOAD.S.pri start
  1527. //#emit INC.pri
  1528. //#emit STOR.S.pri start
  1529. #emit LIDX
  1530. #emit MOVE.alt
  1531. #emit LCTRL 6
  1532. #emit ADD.C 24
  1533. #emit PUSH.pri
  1534. #emit MOVE.pri
  1535. #emit SCTRL 6
  1536. #emit MOVE.alt
  1537. #emit CONST.pri 0xFFFFFFFE
  1538. #emit AND
  1539. #emit PUSH.pri
  1540. #emit LOAD.S.pri ret
  1541. #emit AND
  1542. #emit POP.alt
  1543. #emit OR
  1544. #emit STOR.S.pri ret
  1545. if (ret < 0) return ret + 1;
  1546. }
  1547. return ret;
  1548. }
  1549. #if defined _ALS_OnEnterExitModShop
  1550. #undef OnEnterExitModShop
  1551. #else
  1552. #define _ALS_OnEnterExitModShop
  1553. #endif
  1554. #define OnEnterExitModShop S@@_OnEnterExitModShop
  1555. HOOK_FORWARD<EnterExitModShop>
  1556. public OnVehiclePaintjob(playerid, vehicleid, paintjobid)
  1557. {
  1558. P:2("Hooks_OnVehiclePaintjob called: %d, %d, %d", playerid, vehicleid, paintjobid);
  1559. new
  1560. end = _:YSI_g_sCallbackEnd[ALS_OnVehiclePaintjob],
  1561. start = _:YSI_g_sCallbackStart[ALS_OnVehiclePaintjob],
  1562. ret = ALS_R_VehiclePaintjob;
  1563. while (start++ != end)
  1564. {
  1565. #emit PUSH.S paintjobid
  1566. #emit PUSH.S vehicleid
  1567. #emit PUSH.S playerid
  1568. #emit PUSH.C 12
  1569. #emit CONST.alt YSI_g_sCallbackAddresses
  1570. #emit LOAD.S.pri start
  1571. //#emit INC.pri
  1572. //#emit STOR.S.pri start
  1573. #emit LIDX
  1574. #emit MOVE.alt
  1575. #emit LCTRL 6
  1576. #emit ADD.C 24
  1577. #emit PUSH.pri
  1578. #emit MOVE.pri
  1579. #emit SCTRL 6
  1580. #emit MOVE.alt
  1581. #emit CONST.pri 0xFFFFFFFE
  1582. #emit AND
  1583. #emit PUSH.pri
  1584. #emit LOAD.S.pri ret
  1585. #emit AND
  1586. #emit POP.alt
  1587. #emit OR
  1588. #emit STOR.S.pri ret
  1589. if (ret < 0) return ret + 1;
  1590. }
  1591. return ret;
  1592. }
  1593. #if defined _ALS_OnVehiclePaintjob
  1594. #undef OnVehiclePaintjob
  1595. #else
  1596. #define _ALS_OnVehiclePaintjob
  1597. #endif
  1598. #define OnVehiclePaintjob S@@_OnVehiclePaintjob
  1599. HOOK_FORWARD<VehiclePaintjob>
  1600. public OnVehicleRespray(playerid, vehicleid, color1, color2)
  1601. {
  1602. P:2("Hooks_OnVehicleRespray called: %d, %d, %d, %d", playerid, vehicleid, color1, color2);
  1603. new
  1604. end = _:YSI_g_sCallbackEnd[ALS_OnVehicleRespray],
  1605. start = _:YSI_g_sCallbackStart[ALS_OnVehicleRespray],
  1606. ret = ALS_R_VehicleRespray;
  1607. while (start++ != end)
  1608. {
  1609. #emit PUSH.S color2
  1610. #emit PUSH.S color1
  1611. #emit PUSH.S vehicleid
  1612. #emit PUSH.S playerid
  1613. #emit PUSH.C 16
  1614. #emit CONST.alt YSI_g_sCallbackAddresses
  1615. #emit LOAD.S.pri start
  1616. //#emit INC.pri
  1617. //#emit STOR.S.pri start
  1618. #emit LIDX
  1619. #emit MOVE.alt
  1620. #emit LCTRL 6
  1621. #emit ADD.C 24
  1622. #emit PUSH.pri
  1623. #emit MOVE.pri
  1624. #emit SCTRL 6
  1625. #emit MOVE.alt
  1626. #emit CONST.pri 0xFFFFFFFE
  1627. #emit AND
  1628. #emit PUSH.pri
  1629. #emit LOAD.S.pri ret
  1630. #emit AND
  1631. #emit POP.alt
  1632. #emit OR
  1633. #emit STOR.S.pri ret
  1634. if (ret < 0) return ret + 1;
  1635. }
  1636. return ret;
  1637. }
  1638. #if defined _ALS_OnVehicleRespray
  1639. #undef OnVehicleRespray
  1640. #else
  1641. #define _ALS_OnVehicleRespray
  1642. #endif
  1643. #define OnVehicleRespray S@@_OnVehicleRespray
  1644. HOOK_FORWARD<VehicleRespray>
  1645. public OnVehicleDamageStatusUpdate(vehicleid, playerid)
  1646. {
  1647. P:2("Hooks_OnVehicleDamageStatusUpdate called: %d, %d", vehicleid, playerid);
  1648. new
  1649. end = _:YSI_g_sCallbackEnd[ALS_OnVehicleDamageStatusUpdate],
  1650. start = _:YSI_g_sCallbackStart[ALS_OnVehicleDamageStatusUpdate],
  1651. ret = ALS_R_VehicleDamageStatusUpdate;
  1652. while (start++ != end)
  1653. {
  1654. #emit PUSH.S playerid
  1655. #emit PUSH.S vehicleid
  1656. #emit PUSH.C 8
  1657. #emit CONST.alt YSI_g_sCallbackAddresses
  1658. #emit LOAD.S.pri start
  1659. //#emit INC.pri
  1660. //#emit STOR.S.pri start
  1661. #emit LIDX
  1662. #emit MOVE.alt
  1663. #emit LCTRL 6
  1664. #emit ADD.C 24
  1665. #emit PUSH.pri
  1666. #emit MOVE.pri
  1667. #emit SCTRL 6
  1668. #emit MOVE.alt
  1669. #emit CONST.pri 0xFFFFFFFE
  1670. #emit AND
  1671. #emit PUSH.pri
  1672. #emit LOAD.S.pri ret
  1673. #emit AND
  1674. #emit POP.alt
  1675. #emit OR
  1676. #emit STOR.S.pri ret
  1677. if (ret < 0) return ret + 1;
  1678. }
  1679. return ret;
  1680. }
  1681. #if defined _ALS_OnVehicleDamageStatusUpd
  1682. #undef OnVehicleDamageStatusUpdate
  1683. #else
  1684. #define _ALS_OnVehicleDamageStatusUpd
  1685. #endif
  1686. #define OnVehicleDamageStatusUpdate S@@_OnVehicleDamageStatusUpdate
  1687. HOOK_FORWARD<VehicleDamageStatusUpdate>
  1688. public OnUnoccupiedVehicleUpdate(vehicleid, playerid, passenger_seat)
  1689. {
  1690. P:2("Hooks_OnUnoccupiedVehicleUpdate called: %d, %d, %d", vehicleid, playerid, passenger_seat);
  1691. new
  1692. end = _:YSI_g_sCallbackEnd[ALS_OnUnoccupiedVehicleUpdate],
  1693. start = _:YSI_g_sCallbackStart[ALS_OnUnoccupiedVehicleUpdate],
  1694. ret = ALS_R_UnoccupiedVehicleUpdate;
  1695. while (start++ != end)
  1696. {
  1697. #emit PUSH.S passenger_seat
  1698. #emit PUSH.S playerid
  1699. #emit PUSH.S vehicleid
  1700. // I wonder if I could hack the stack with a negative number so that when
  1701. // the called function returns it puts all the header data BACK on to the
  1702. // stack instead of removing the parameters and header.
  1703. #emit PUSH.C 12
  1704. #emit CONST.alt YSI_g_sCallbackAddresses
  1705. #emit LOAD.S.pri start
  1706. //#emit INC.pri
  1707. //#emit STOR.S.pri start
  1708. #emit LIDX
  1709. #emit MOVE.alt
  1710. #emit LCTRL 6
  1711. #emit ADD.C 24
  1712. #emit PUSH.pri
  1713. #emit MOVE.pri
  1714. #emit SCTRL 6
  1715. #emit MOVE.alt
  1716. #emit CONST.pri 0xFFFFFFFE
  1717. #emit AND
  1718. #emit PUSH.pri
  1719. #emit LOAD.S.pri ret
  1720. #emit AND
  1721. #emit POP.alt
  1722. #emit OR
  1723. #emit STOR.S.pri ret
  1724. if (ret < 0) return ret + 1;
  1725. }
  1726. return ret;
  1727. }
  1728. #if defined _ALS_OnUnoccupiedVehicleUpdate
  1729. #undef OnUnoccupiedVehicleUpdate
  1730. #else
  1731. #define _ALS_OnUnoccupiedVehicleUpdate
  1732. #endif
  1733. #define OnUnoccupiedVehicleUpdate S@@_OnUnoccupiedVehicleUpdate
  1734. HOOK_FORWARD<UnoccupiedVehicleUpdate>
  1735. public OnPlayerSelectedMenuRow(playerid, row)
  1736. {
  1737. P:2("Hooks_OnPlayerSelectedMenuRow called: %d, %d", playerid, row);
  1738. new
  1739. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerSelectedMenuRow],
  1740. start = _:YSI_g_sCallbackStart[ALS_OnPlayerSelectedMenuRow],
  1741. ret = ALS_R_PlayerSelectedMenuRow;
  1742. while (start++ != end)
  1743. {
  1744. #emit PUSH.S row
  1745. #emit PUSH.S playerid
  1746. #emit PUSH.C 8
  1747. #emit CONST.alt YSI_g_sCallbackAddresses
  1748. #emit LOAD.S.pri start
  1749. //#emit INC.pri
  1750. //#emit STOR.S.pri start
  1751. #emit LIDX
  1752. #emit MOVE.alt
  1753. #emit LCTRL 6
  1754. #emit ADD.C 24
  1755. #emit PUSH.pri
  1756. #emit MOVE.pri
  1757. #emit SCTRL 6
  1758. #emit MOVE.alt
  1759. #emit CONST.pri 0xFFFFFFFE
  1760. #emit AND
  1761. #emit PUSH.pri
  1762. #emit LOAD.S.pri ret
  1763. #emit AND
  1764. #emit POP.alt
  1765. #emit OR
  1766. #emit STOR.S.pri ret
  1767. if (ret < 0) return ret + 1;
  1768. }
  1769. return ret;
  1770. }
  1771. #if defined _ALS_OnPlayerSelectedMenuRow
  1772. #undef OnPlayerSelectedMenuRow
  1773. #else
  1774. #define _ALS_OnPlayerSelectedMenuRow
  1775. #endif
  1776. #define OnPlayerSelectedMenuRow S@@_OnPlayerSelectedMenuRow
  1777. HOOK_FORWARD<PlayerSelectedMenuRow>
  1778. public OnPlayerExitedMenu(playerid)
  1779. {
  1780. P:2("Hooks_OnPlayerExitedMenu called: %d", playerid);
  1781. new
  1782. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerExitedMenu],
  1783. start = _:YSI_g_sCallbackStart[ALS_OnPlayerExitedMenu],
  1784. ret = ALS_R_PlayerExitedMenu;
  1785. while (start++ != end)
  1786. {
  1787. #emit PUSH.S playerid
  1788. #emit PUSH.C 4
  1789. #emit CONST.alt YSI_g_sCallbackAddresses
  1790. #emit LOAD.S.pri start
  1791. //#emit INC.pri
  1792. //#emit STOR.S.pri start
  1793. #emit LIDX
  1794. #emit MOVE.alt
  1795. #emit LCTRL 6
  1796. #emit ADD.C 24
  1797. #emit PUSH.pri
  1798. #emit MOVE.pri
  1799. #emit SCTRL 6
  1800. #emit MOVE.alt
  1801. #emit CONST.pri 0xFFFFFFFE
  1802. #emit AND
  1803. #emit PUSH.pri
  1804. #emit LOAD.S.pri ret
  1805. #emit AND
  1806. #emit POP.alt
  1807. #emit OR
  1808. #emit STOR.S.pri ret
  1809. if (ret < 0) return ret + 1;
  1810. }
  1811. return ret;
  1812. }
  1813. #if defined _ALS_OnPlayerExitedMenu
  1814. #undef OnPlayerExitedMenu
  1815. #else
  1816. #define _ALS_OnPlayerExitedMenu
  1817. #endif
  1818. #define OnPlayerExitedMenu S@@_OnPlayerExitedMenu
  1819. HOOK_FORWARD<PlayerExitedMenu>
  1820. public OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid)
  1821. {
  1822. P:2("Hooks_OnPlayerInteriorChange called: %d, %d, %d", playerid, newinteriorid, oldinteriorid);
  1823. new
  1824. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerInteriorChange],
  1825. start = _:YSI_g_sCallbackStart[ALS_OnPlayerInteriorChange],
  1826. ret = ALS_R_PlayerInteriorChange;
  1827. while (start++ != end)
  1828. {
  1829. #emit PUSH.S oldinteriorid
  1830. #emit PUSH.S newinteriorid
  1831. #emit PUSH.S playerid
  1832. #emit PUSH.C 12
  1833. #emit CONST.alt YSI_g_sCallbackAddresses
  1834. #emit LOAD.S.pri start
  1835. //#emit INC.pri
  1836. //#emit STOR.S.pri start
  1837. #emit LIDX
  1838. #emit MOVE.alt
  1839. #emit LCTRL 6
  1840. #emit ADD.C 24
  1841. #emit PUSH.pri
  1842. #emit MOVE.pri
  1843. #emit SCTRL 6
  1844. #emit MOVE.alt
  1845. #emit CONST.pri 0xFFFFFFFE
  1846. #emit AND
  1847. #emit PUSH.pri
  1848. #emit LOAD.S.pri ret
  1849. #emit AND
  1850. #emit POP.alt
  1851. #emit OR
  1852. #emit STOR.S.pri ret
  1853. if (ret < 0) return ret + 1;
  1854. }
  1855. return ret;
  1856. }
  1857. #if defined _ALS_OnPlayerInteriorChange
  1858. #undef OnPlayerInteriorChange
  1859. #else
  1860. #define _ALS_OnPlayerInteriorChange
  1861. #endif
  1862. #define OnPlayerInteriorChange S@@_OnPlayerInteriorChange
  1863. HOOK_FORWARD<PlayerInteriorChange>
  1864. public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
  1865. {
  1866. P:2("Hooks_OnPlayerKeyStateChange called: %d, %d, %d", playerid, newkeys, oldkeys);
  1867. new
  1868. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerKeyStateChange],
  1869. start = _:YSI_g_sCallbackStart[ALS_OnPlayerKeyStateChange],
  1870. ret = ALS_R_PlayerKeyStateChange;
  1871. while (start++ != end)
  1872. {
  1873. #emit PUSH.S oldkeys
  1874. #emit PUSH.S newkeys
  1875. #emit PUSH.S playerid
  1876. #emit PUSH.C 12
  1877. #emit CONST.alt YSI_g_sCallbackAddresses
  1878. #emit LOAD.S.pri start
  1879. //#emit INC.pri
  1880. //#emit STOR.S.pri start
  1881. #emit LIDX
  1882. #emit MOVE.alt
  1883. #emit LCTRL 6
  1884. #emit ADD.C 24
  1885. #emit PUSH.pri
  1886. #emit MOVE.pri
  1887. #emit SCTRL 6
  1888. #emit MOVE.alt
  1889. #emit CONST.pri 0xFFFFFFFE
  1890. #emit AND
  1891. #emit PUSH.pri
  1892. #emit LOAD.S.pri ret
  1893. #emit AND
  1894. #emit POP.alt
  1895. #emit OR
  1896. #emit STOR.S.pri ret
  1897. if (ret < 0) return ret + 1;
  1898. }
  1899. return ret;
  1900. }
  1901. #if defined _ALS_OnPlayerKeyStateChange
  1902. #undef OnPlayerKeyStateChange
  1903. #else
  1904. #define _ALS_OnPlayerKeyStateChange
  1905. #endif
  1906. #define OnPlayerKeyStateChange S@@_OnPlayerKeyStateChange
  1907. HOOK_FORWARD<PlayerKeyStateChange>
  1908. public OnRconLoginAttempt(ip[], password[], success)
  1909. {
  1910. P:2("Hooks_OnRconLoginAttempt called: \"%s\", \"%s\", %d", ip, password, success);
  1911. new
  1912. end = _:YSI_g_sCallbackEnd[ALS_OnRconLoginAttempt],
  1913. start = _:YSI_g_sCallbackStart[ALS_OnRconLoginAttempt],
  1914. ret = ALS_R_RconLoginAttempt;
  1915. while (start++ != end)
  1916. {
  1917. #emit PUSH.S success
  1918. #emit PUSH.S password
  1919. #emit PUSH.S ip
  1920. #emit PUSH.C 12
  1921. #emit CONST.alt YSI_g_sCallbackAddresses
  1922. #emit LOAD.S.pri start
  1923. //#emit INC.pri
  1924. //#emit STOR.S.pri start
  1925. #emit LIDX
  1926. #emit MOVE.alt
  1927. #emit LCTRL 6
  1928. #emit ADD.C 24
  1929. #emit PUSH.pri
  1930. #emit MOVE.pri
  1931. #emit SCTRL 6
  1932. #emit MOVE.alt
  1933. #emit CONST.pri 0xFFFFFFFE
  1934. #emit AND
  1935. #emit PUSH.pri
  1936. #emit LOAD.S.pri ret
  1937. #emit AND
  1938. #emit POP.alt
  1939. #emit OR
  1940. #emit STOR.S.pri ret
  1941. if (ret < 0) return ret + 1;
  1942. }
  1943. return ret;
  1944. }
  1945. #if defined _ALS_OnRconLoginAttempt
  1946. #undef OnRconLoginAttempt
  1947. #else
  1948. #define _ALS_OnRconLoginAttempt
  1949. #endif
  1950. #define OnRconLoginAttempt S@@_OnRconLoginAttempt
  1951. HOOK_FORWARD<RconLoginAttempt>
  1952. public OnPlayerUpdate(playerid)
  1953. {
  1954. P:7("Hooks_OnPlayerUpdate called: %d", playerid);
  1955. new
  1956. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerUpdate],
  1957. start = _:YSI_g_sCallbackStart[ALS_OnPlayerUpdate],
  1958. ret = ALS_R_PlayerUpdate;
  1959. while (start++ != end)
  1960. {
  1961. #emit PUSH.S playerid
  1962. #emit PUSH.C 4
  1963. #emit CONST.alt YSI_g_sCallbackAddresses
  1964. #emit LOAD.S.pri start
  1965. //#emit INC.pri
  1966. //#emit STOR.S.pri start
  1967. #emit LIDX
  1968. #emit MOVE.alt
  1969. #emit LCTRL 6
  1970. #emit ADD.C 24
  1971. #emit PUSH.pri
  1972. #emit MOVE.pri
  1973. #emit SCTRL 6
  1974. #emit MOVE.alt
  1975. #emit CONST.pri 0xFFFFFFFE
  1976. #emit AND
  1977. #emit PUSH.pri
  1978. #emit LOAD.S.pri ret
  1979. #emit AND
  1980. #emit POP.alt
  1981. #emit OR
  1982. #emit STOR.S.pri ret
  1983. if (ret < 0) return ret + 1;
  1984. }
  1985. return ret;
  1986. }
  1987. #if defined _ALS_OnPlayerUpdate
  1988. #undef OnPlayerUpdate
  1989. #else
  1990. #define _ALS_OnPlayerUpdate
  1991. #endif
  1992. #define OnPlayerUpdate S@@_OnPlayerUpdate
  1993. HOOK_FORWARD<PlayerUpdate>
  1994. public OnPlayerStreamIn(playerid, forplayerid)
  1995. {
  1996. P:2("Hooks_OnPlayerStreamIn called: %d, %d", playerid, forplayerid);
  1997. new
  1998. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerStreamIn],
  1999. start = _:YSI_g_sCallbackStart[ALS_OnPlayerStreamIn],
  2000. ret = ALS_R_PlayerStreamIn;
  2001. while (start++ != end)
  2002. {
  2003. #emit PUSH.S forplayerid
  2004. #emit PUSH.S playerid
  2005. #emit PUSH.C 8
  2006. #emit CONST.alt YSI_g_sCallbackAddresses
  2007. #emit LOAD.S.pri start
  2008. //#emit INC.pri
  2009. //#emit STOR.S.pri start
  2010. #emit LIDX
  2011. #emit MOVE.alt
  2012. #emit LCTRL 6
  2013. #emit ADD.C 24
  2014. #emit PUSH.pri
  2015. #emit MOVE.pri
  2016. #emit SCTRL 6
  2017. #emit MOVE.alt
  2018. #emit CONST.pri 0xFFFFFFFE
  2019. #emit AND
  2020. #emit PUSH.pri
  2021. #emit LOAD.S.pri ret
  2022. #emit AND
  2023. #emit POP.alt
  2024. #emit OR
  2025. #emit STOR.S.pri ret
  2026. if (ret < 0) return ret + 1;
  2027. }
  2028. return ret;
  2029. }
  2030. #if defined _ALS_OnPlayerStreamIn
  2031. #undef OnPlayerStreamIn
  2032. #else
  2033. #define _ALS_OnPlayerStreamIn
  2034. #endif
  2035. #define OnPlayerStreamIn S@@_OnPlayerStreamIn
  2036. HOOK_FORWARD<PlayerStreamIn>
  2037. public OnPlayerStreamOut(playerid, forplayerid)
  2038. {
  2039. P:2("Hooks_OnPlayerStreamOut called: %d, %d", playerid, forplayerid);
  2040. new
  2041. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerStreamOut],
  2042. start = _:YSI_g_sCallbackStart[ALS_OnPlayerStreamOut],
  2043. ret = ALS_R_PlayerStreamOut;
  2044. while (start++ != end)
  2045. {
  2046. #emit PUSH.S forplayerid
  2047. #emit PUSH.S playerid
  2048. #emit PUSH.C 8
  2049. #emit CONST.alt YSI_g_sCallbackAddresses
  2050. #emit LOAD.S.pri start
  2051. //#emit INC.pri
  2052. //#emit STOR.S.pri start
  2053. #emit LIDX
  2054. #emit MOVE.alt
  2055. #emit LCTRL 6
  2056. #emit ADD.C 24
  2057. #emit PUSH.pri
  2058. #emit MOVE.pri
  2059. #emit SCTRL 6
  2060. #emit MOVE.alt
  2061. #emit CONST.pri 0xFFFFFFFE
  2062. #emit AND
  2063. #emit PUSH.pri
  2064. #emit LOAD.S.pri ret
  2065. #emit AND
  2066. #emit POP.alt
  2067. #emit OR
  2068. #emit STOR.S.pri ret
  2069. if (ret < 0) return ret + 1;
  2070. }
  2071. return ret;
  2072. }
  2073. #if defined _ALS_OnPlayerStreamOut
  2074. #undef OnPlayerStreamOut
  2075. #else
  2076. #define _ALS_OnPlayerStreamOut
  2077. #endif
  2078. #define OnPlayerStreamOut S@@_OnPlayerStreamOut
  2079. HOOK_FORWARD<PlayerStreamOut>
  2080. public OnVehicleStreamIn(vehicleid, forplayerid)
  2081. {
  2082. P:2("Hooks_OnVehicleStreamIn called: %d, %d", vehicleid, forplayerid);
  2083. new
  2084. end = _:YSI_g_sCallbackEnd[ALS_OnVehicleStreamIn],
  2085. start = _:YSI_g_sCallbackStart[ALS_OnVehicleStreamIn],
  2086. ret = ALS_R_VehicleStreamIn;
  2087. while (start++ != end)
  2088. {
  2089. #emit PUSH.S forplayerid
  2090. #emit PUSH.S vehicleid
  2091. #emit PUSH.C 8
  2092. #emit CONST.alt YSI_g_sCallbackAddresses
  2093. #emit LOAD.S.pri start
  2094. //#emit INC.pri
  2095. //#emit STOR.S.pri start
  2096. #emit LIDX
  2097. #emit MOVE.alt
  2098. #emit LCTRL 6
  2099. #emit ADD.C 24
  2100. #emit PUSH.pri
  2101. #emit MOVE.pri
  2102. #emit SCTRL 6
  2103. #emit MOVE.alt
  2104. #emit CONST.pri 0xFFFFFFFE
  2105. #emit AND
  2106. #emit PUSH.pri
  2107. #emit LOAD.S.pri ret
  2108. #emit AND
  2109. #emit POP.alt
  2110. #emit OR
  2111. #emit STOR.S.pri ret
  2112. if (ret < 0) return ret + 1;
  2113. }
  2114. return ret;
  2115. }
  2116. #if defined _ALS_OnVehicleStreamIn
  2117. #undef OnVehicleStreamIn
  2118. #else
  2119. #define _ALS_OnVehicleStreamIn
  2120. #endif
  2121. #define OnVehicleStreamIn S@@_OnVehicleStreamIn
  2122. HOOK_FORWARD<VehicleStreamIn>
  2123. public OnVehicleStreamOut(vehicleid, forplayerid)
  2124. {
  2125. P:2("Hooks_OnVehicleStreamOut called: %d, %d", vehicleid, forplayerid);
  2126. new
  2127. end = _:YSI_g_sCallbackEnd[ALS_OnVehicleStreamOut],
  2128. start = _:YSI_g_sCallbackStart[ALS_OnVehicleStreamOut],
  2129. ret = ALS_R_VehicleStreamOut;
  2130. while (start++ != end)
  2131. {
  2132. #emit PUSH.S forplayerid
  2133. #emit PUSH.S vehicleid
  2134. #emit PUSH.C 8
  2135. #emit CONST.alt YSI_g_sCallbackAddresses
  2136. #emit LOAD.S.pri start
  2137. //#emit INC.pri
  2138. //#emit STOR.S.pri start
  2139. #emit LIDX
  2140. #emit MOVE.alt
  2141. #emit LCTRL 6
  2142. #emit ADD.C 24
  2143. #emit PUSH.pri
  2144. #emit MOVE.pri
  2145. #emit SCTRL 6
  2146. #emit MOVE.alt
  2147. #emit CONST.pri 0xFFFFFFFE
  2148. #emit AND
  2149. #emit PUSH.pri
  2150. #emit LOAD.S.pri ret
  2151. #emit AND
  2152. #emit POP.alt
  2153. #emit OR
  2154. #emit STOR.S.pri ret
  2155. if (ret < 0) return ret + 1;
  2156. }
  2157. return ret;
  2158. }
  2159. #if defined _ALS_OnVehicleStreamOut
  2160. #undef OnVehicleStreamOut
  2161. #else
  2162. #define _ALS_OnVehicleStreamOut
  2163. #endif
  2164. #define OnVehicleStreamOut S@@_OnVehicleStreamOut
  2165. HOOK_FORWARD<VehicleStreamOut>
  2166. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  2167. {
  2168. P:2("Hooks_OnDialogResponse called: %d, %d, %d, %d, \"%s\"", playerid, dialogid, response, listitem, inputtext);
  2169. new
  2170. end = _:YSI_g_sCallbackEnd[ALS_OnDialogResponse],
  2171. start = _:YSI_g_sCallbackStart[ALS_OnDialogResponse],
  2172. ret = ALS_R_DialogResponse;
  2173. while (start++ != end)
  2174. {
  2175. #emit PUSH.S inputtext
  2176. #emit PUSH.S listitem
  2177. #emit PUSH.S response
  2178. #emit PUSH.S dialogid
  2179. #emit PUSH.S playerid
  2180. #emit PUSH.C 20
  2181. #emit CONST.alt YSI_g_sCallbackAddresses
  2182. #emit LOAD.S.pri start
  2183. //#emit INC.pri
  2184. //#emit STOR.S.pri start
  2185. #emit LIDX
  2186. #emit MOVE.alt
  2187. #emit LCTRL 6
  2188. #emit ADD.C 24
  2189. #emit PUSH.pri
  2190. #emit MOVE.pri
  2191. #emit SCTRL 6
  2192. #emit MOVE.alt
  2193. #emit CONST.pri 0xFFFFFFFE
  2194. #emit AND
  2195. #emit PUSH.pri
  2196. #emit LOAD.S.pri ret
  2197. #emit AND
  2198. #emit POP.alt
  2199. #emit OR
  2200. #emit STOR.S.pri ret
  2201. if (ret < 0) return ret + 1;
  2202. }
  2203. return ret;
  2204. }
  2205. #if defined _ALS_OnDialogResponse
  2206. #undef OnDialogResponse
  2207. #else
  2208. #define _ALS_OnDialogResponse
  2209. #endif
  2210. #define OnDialogResponse S@@_OnDialogResponse
  2211. HOOK_FORWARD<DialogResponse>
  2212. public OnPlayerClickPlayer(playerid, clickedplayerid, source)
  2213. {
  2214. P:2("Hooks_OnPlayerClickPlayer called: %d, %d, %d", playerid, clickedplayerid, source);
  2215. new
  2216. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerClickPlayer],
  2217. start = _:YSI_g_sCallbackStart[ALS_OnPlayerClickPlayer],
  2218. ret = ALS_R_PlayerClickPlayer;
  2219. while (start++ != end)
  2220. {
  2221. #emit PUSH.S source
  2222. #emit PUSH.S clickedplayerid
  2223. #emit PUSH.S playerid
  2224. #emit PUSH.C 12
  2225. #emit CONST.alt YSI_g_sCallbackAddresses
  2226. #emit LOAD.S.pri start
  2227. //#emit INC.pri
  2228. //#emit STOR.S.pri start
  2229. #emit LIDX
  2230. #emit MOVE.alt
  2231. #emit LCTRL 6
  2232. #emit ADD.C 24
  2233. #emit PUSH.pri
  2234. #emit MOVE.pri
  2235. #emit SCTRL 6
  2236. #emit MOVE.alt
  2237. #emit CONST.pri 0xFFFFFFFE
  2238. #emit AND
  2239. #emit PUSH.pri
  2240. #emit LOAD.S.pri ret
  2241. #emit AND
  2242. #emit POP.alt
  2243. #emit OR
  2244. #emit STOR.S.pri ret
  2245. if (ret < 0) return ret + 1;
  2246. }
  2247. return ret;
  2248. }
  2249. #if defined _ALS_OnPlayerClickPlayer
  2250. #undef OnPlayerClickPlayer
  2251. #else
  2252. #define _ALS_OnPlayerClickPlayer
  2253. #endif
  2254. #define OnPlayerClickPlayer S@@_OnPlayerClickPlayer
  2255. HOOK_FORWARD<PlayerClickPlayer>
  2256. public OnPlayerTakeDamage(playerid, issuerid, Float:amount, weaponid)
  2257. {
  2258. P:2("Hooks_OnPlayerTakeDamage called: %d, %d, %f, %d, %d", playerid, issuerid, Float:amount, weaponid);
  2259. new
  2260. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerTakeDamage],
  2261. start = _:YSI_g_sCallbackStart[ALS_OnPlayerTakeDamage],
  2262. ret = ALS_R_PlayerTakeDamage;
  2263. while (start++ != end)
  2264. {
  2265. #emit PUSH.S weaponid
  2266. #emit PUSH.S amount
  2267. #emit PUSH.S issuerid
  2268. #emit PUSH.S playerid
  2269. #emit PUSH.C 20
  2270. #emit CONST.alt YSI_g_sCallbackAddresses
  2271. #emit LOAD.S.pri start
  2272. //#emit INC.pri
  2273. //#emit STOR.S.pri start
  2274. #emit LIDX
  2275. #emit MOVE.alt
  2276. #emit LCTRL 6
  2277. #emit ADD.C 24
  2278. #emit PUSH.pri
  2279. #emit MOVE.pri
  2280. #emit SCTRL 6
  2281. #emit MOVE.alt
  2282. #emit CONST.pri 0xFFFFFFFE
  2283. #emit AND
  2284. #emit PUSH.pri
  2285. #emit LOAD.S.pri ret
  2286. #emit AND
  2287. #emit POP.alt
  2288. #emit OR
  2289. #emit STOR.S.pri ret
  2290. if (ret < 0) return ret + 1;
  2291. }
  2292. return ret;
  2293. }
  2294. #if defined _ALS_OnPlayerTakeDamage
  2295. #undef OnPlayerTakeDamage
  2296. #else
  2297. #define _ALS_OnPlayerTakeDamage
  2298. #endif
  2299. #define OnPlayerTakeDamage S@@_OnPlayerTakeDamage
  2300. HOOK_FORWARD<PlayerTakeDamage>
  2301. public OnPlayerGiveDamage(playerid, damagedid, Float:amount, weaponid)
  2302. {
  2303. P:2("Hooks_OnPlayerGiveDamage called: %d, %d, %f, %d, %d", playerid, damagedid, Float:amount, weaponid);
  2304. new
  2305. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerGiveDamage],
  2306. start = _:YSI_g_sCallbackStart[ALS_OnPlayerGiveDamage],
  2307. ret = ALS_R_PlayerGiveDamage;
  2308. while (start++ != end)
  2309. {
  2310. #emit PUSH.S weaponid
  2311. #emit PUSH.S amount
  2312. #emit PUSH.S damagedid
  2313. #emit PUSH.S playerid
  2314. #emit PUSH.C 20
  2315. #emit CONST.alt YSI_g_sCallbackAddresses
  2316. #emit LOAD.S.pri start
  2317. //#emit INC.pri
  2318. //#emit STOR.S.pri start
  2319. #emit LIDX
  2320. #emit MOVE.alt
  2321. #emit LCTRL 6
  2322. #emit ADD.C 24
  2323. #emit PUSH.pri
  2324. #emit MOVE.pri
  2325. #emit SCTRL 6
  2326. #emit MOVE.alt
  2327. #emit CONST.pri 0xFFFFFFFE
  2328. #emit AND
  2329. #emit PUSH.pri
  2330. #emit LOAD.S.pri ret
  2331. #emit AND
  2332. #emit POP.alt
  2333. #emit OR
  2334. #emit STOR.S.pri ret
  2335. if (ret < 0) return ret + 1;
  2336. }
  2337. return ret;
  2338. }
  2339. #if defined _ALS_OnPlayerGiveDamage
  2340. #undef OnPlayerGiveDamage
  2341. #else
  2342. #define _ALS_OnPlayerGiveDamage
  2343. #endif
  2344. #define OnPlayerGiveDamage S@@_OnPlayerGiveDamage
  2345. HOOK_FORWARD<PlayerGiveDamage>
  2346. #if !defined _ALS_OnPlayerLogin
  2347. forward OnPlayerLogin(playerid, uid);
  2348. #endif
  2349. public OnPlayerLogin(playerid, uid)
  2350. {
  2351. P:2("Hooks_OnPlayerLogin called: %d, %d", playerid, uid);
  2352. new
  2353. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerLogin],
  2354. start = _:YSI_g_sCallbackStart[ALS_OnPlayerLogin],
  2355. ret = ALS_R_PlayerLogin;
  2356. while (start++ != end)
  2357. {
  2358. #emit PUSH.S uid
  2359. #emit PUSH.S playerid
  2360. #emit PUSH.C 8
  2361. #emit CONST.alt YSI_g_sCallbackAddresses
  2362. #emit LOAD.S.pri start
  2363. //#emit INC.pri
  2364. //#emit STOR.S.pri start
  2365. #emit LIDX
  2366. #emit MOVE.alt
  2367. #emit LCTRL 6
  2368. #emit ADD.C 24
  2369. #emit PUSH.pri
  2370. #emit MOVE.pri
  2371. #emit SCTRL 6
  2372. #emit MOVE.alt
  2373. #emit CONST.pri 0xFFFFFFFE
  2374. #emit AND
  2375. #emit PUSH.pri
  2376. #emit LOAD.S.pri ret
  2377. #emit AND
  2378. #emit POP.alt
  2379. #emit OR
  2380. #emit STOR.S.pri ret
  2381. if (ret < 0) return ret + 1;
  2382. }
  2383. return ret;
  2384. }
  2385. #if defined _ALS_OnPlayerLogin
  2386. #undef OnPlayerLogin
  2387. #else
  2388. #define _ALS_OnPlayerLogin
  2389. #endif
  2390. #define OnPlayerLogin S@@_OnPlayerLogin
  2391. HOOK_FORWARD<PlayerLogin>
  2392. #if !defined _ALS_OnPlayerLogout
  2393. forward OnPlayerLogout(playerid, uid);
  2394. #endif
  2395. public OnPlayerLogout(playerid, uid)
  2396. {
  2397. P:2("Hooks_OnPlayerLogout called: %d, %d", playerid, uid);
  2398. new
  2399. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerLogout],
  2400. start = _:YSI_g_sCallbackStart[ALS_OnPlayerLogout],
  2401. ret = ALS_R_PlayerLogout;
  2402. while (start++ != end)
  2403. {
  2404. #emit PUSH.S uid
  2405. #emit PUSH.S playerid
  2406. #emit PUSH.C 8
  2407. #emit CONST.alt YSI_g_sCallbackAddresses
  2408. #emit LOAD.S.pri start
  2409. //#emit INC.pri
  2410. //#emit STOR.S.pri start
  2411. #emit LIDX
  2412. #emit MOVE.alt
  2413. #emit LCTRL 6
  2414. #emit ADD.C 24
  2415. #emit PUSH.pri
  2416. #emit MOVE.pri
  2417. #emit SCTRL 6
  2418. #emit MOVE.alt
  2419. #emit CONST.pri 0xFFFFFFFE
  2420. #emit AND
  2421. #emit PUSH.pri
  2422. #emit LOAD.S.pri ret
  2423. #emit AND
  2424. #emit POP.alt
  2425. #emit OR
  2426. #emit STOR.S.pri ret
  2427. if (ret < 0) return ret + 1;
  2428. }
  2429. return ret;
  2430. }
  2431. #if defined _ALS_OnPlayerLogout
  2432. #undef OnPlayerLogout
  2433. #else
  2434. #define _ALS_OnPlayerLogout
  2435. #endif
  2436. #define OnPlayerLogout S@@_OnPlayerLogout
  2437. HOOK_FORWARD<PlayerLogout>
  2438. #if !defined _ALS_OnPlayerEnterArea
  2439. forward OnPlayerEnterArea(playerid, areaid);
  2440. #endif
  2441. public OnPlayerEnterArea(playerid, areaid)
  2442. {
  2443. P:2("Hooks_OnPlayerEnterArea called: %d, %d", playerid, areaid);
  2444. new
  2445. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerEnterArea],
  2446. start = _:YSI_g_sCallbackStart[ALS_OnPlayerEnterArea],
  2447. ret = ALS_R_PlayerEnterArea;
  2448. while (start++ != end)
  2449. {
  2450. #emit PUSH.S areaid
  2451. #emit PUSH.S playerid
  2452. #emit PUSH.C 8
  2453. #emit CONST.alt YSI_g_sCallbackAddresses
  2454. #emit LOAD.S.pri start
  2455. //#emit INC.pri
  2456. //#emit STOR.S.pri start
  2457. #emit LIDX
  2458. #emit MOVE.alt
  2459. #emit LCTRL 6
  2460. #emit ADD.C 24
  2461. #emit PUSH.pri
  2462. #emit MOVE.pri
  2463. #emit SCTRL 6
  2464. #emit MOVE.alt
  2465. #emit CONST.pri 0xFFFFFFFE
  2466. #emit AND
  2467. #emit PUSH.pri
  2468. #emit LOAD.S.pri ret
  2469. #emit AND
  2470. #emit POP.alt
  2471. #emit OR
  2472. #emit STOR.S.pri ret
  2473. if (ret < 0) return ret + 1;
  2474. }
  2475. return ret;
  2476. }
  2477. #if defined _ALS_OnPlayerEnterArea
  2478. #undef OnPlayerEnterArea
  2479. #else
  2480. #define _ALS_OnPlayerEnterArea
  2481. #endif
  2482. #define OnPlayerEnterArea S@@_OnPlayerEnterArea
  2483. HOOK_FORWARD<PlayerEnterArea>
  2484. #if !defined _ALS_OnPlayerLeaveArea
  2485. forward OnPlayerLeaveArea(playerid, areaid);
  2486. #endif
  2487. public OnPlayerLeaveArea(playerid, areaid)
  2488. {
  2489. P:2("Hooks_OnPlayerLeaveArea called: %d, %d", playerid, areaid);
  2490. new
  2491. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerLeaveArea],
  2492. start = _:YSI_g_sCallbackStart[ALS_OnPlayerLeaveArea],
  2493. ret = ALS_R_PlayerLeaveArea;
  2494. while (start++ != end)
  2495. {
  2496. #emit PUSH.S areaid
  2497. #emit PUSH.S playerid
  2498. #emit PUSH.C 8
  2499. #emit CONST.alt YSI_g_sCallbackAddresses
  2500. #emit LOAD.S.pri start
  2501. //#emit INC.pri
  2502. //#emit STOR.S.pri start
  2503. #emit LIDX
  2504. #emit MOVE.alt
  2505. #emit LCTRL 6
  2506. #emit ADD.C 24
  2507. #emit PUSH.pri
  2508. #emit MOVE.pri
  2509. #emit SCTRL 6
  2510. #emit MOVE.alt
  2511. #emit CONST.pri 0xFFFFFFFE
  2512. #emit AND
  2513. #emit PUSH.pri
  2514. #emit LOAD.S.pri ret
  2515. #emit AND
  2516. #emit POP.alt
  2517. #emit OR
  2518. #emit STOR.S.pri ret
  2519. if (ret < 0) return ret + 1;
  2520. }
  2521. return ret;
  2522. }
  2523. #if defined _ALS_OnPlayerLeaveArea
  2524. #undef OnPlayerLeaveArea
  2525. #else
  2526. #define _ALS_OnPlayerLeaveArea
  2527. #endif
  2528. #define OnPlayerLeaveArea S@@_OnPlayerLeaveArea
  2529. HOOK_FORWARD<PlayerLeaveArea>
  2530. #if !defined _ALS_OnPlayerFinishRace
  2531. forward OnPlayerFinishRace(playerid, race, position, prize, time);
  2532. #endif
  2533. public OnPlayerFinishRace(playerid, race, position, prize, time)
  2534. {
  2535. P:2("Hooks_OnPlayerFinishRace called: %d, %d, %d, %d, %d", playerid, race, position, prize, time);
  2536. new
  2537. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerFinishRace],
  2538. start = _:YSI_g_sCallbackStart[ALS_OnPlayerFinishRace],
  2539. ret = ALS_R_PlayerFinishRace;
  2540. while (start++ != end)
  2541. {
  2542. #emit PUSH.S time
  2543. #emit PUSH.S prize
  2544. #emit PUSH.S position
  2545. #emit PUSH.S race
  2546. #emit PUSH.S playerid
  2547. #emit PUSH.C 20
  2548. #emit CONST.alt YSI_g_sCallbackAddresses
  2549. #emit LOAD.S.pri start
  2550. //#emit INC.pri
  2551. //#emit STOR.S.pri start
  2552. #emit LIDX
  2553. #emit MOVE.alt
  2554. #emit LCTRL 6
  2555. #emit ADD.C 24
  2556. #emit PUSH.pri
  2557. #emit MOVE.pri
  2558. #emit SCTRL 6
  2559. #emit MOVE.alt
  2560. #emit CONST.pri 0xFFFFFFFE
  2561. #emit AND
  2562. #emit PUSH.pri
  2563. #emit LOAD.S.pri ret
  2564. #emit AND
  2565. #emit POP.alt
  2566. #emit OR
  2567. #emit STOR.S.pri ret
  2568. if (ret < 0) return ret + 1;
  2569. }
  2570. return ret;
  2571. }
  2572. #if defined _ALS_OnPlayerFinishRace
  2573. #undef OnPlayerFinishRace
  2574. #else
  2575. #define _ALS_OnPlayerFinishRace
  2576. #endif
  2577. #define OnPlayerFinishRace S@@_OnPlayerFinishRace
  2578. HOOK_FORWARD<PlayerFinishRace>
  2579. #if !defined _ALS_OnPlayerExitRace
  2580. forward OnPlayerExitRace(playerid, race);
  2581. #endif
  2582. public OnPlayerExitRace(playerid, race)
  2583. {
  2584. P:2("Hooks_OnPlayerExitRace called: %d, %d", playerid, race);
  2585. new
  2586. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerExitRace],
  2587. start = _:YSI_g_sCallbackStart[ALS_OnPlayerExitRace],
  2588. ret = ALS_R_PlayerExitRace;
  2589. while (start++ != end)
  2590. {
  2591. #emit PUSH.S race
  2592. #emit PUSH.S playerid
  2593. #emit PUSH.C 8
  2594. #emit CONST.alt YSI_g_sCallbackAddresses
  2595. #emit LOAD.S.pri start
  2596. //#emit INC.pri
  2597. //#emit STOR.S.pri start
  2598. #emit LIDX
  2599. #emit MOVE.alt
  2600. #emit LCTRL 6
  2601. #emit ADD.C 24
  2602. #emit PUSH.pri
  2603. #emit MOVE.pri
  2604. #emit SCTRL 6
  2605. #emit MOVE.alt
  2606. #emit CONST.pri 0xFFFFFFFE
  2607. #emit AND
  2608. #emit PUSH.pri
  2609. #emit LOAD.S.pri ret
  2610. #emit AND
  2611. #emit POP.alt
  2612. #emit OR
  2613. #emit STOR.S.pri ret
  2614. if (ret < 0) return ret + 1;
  2615. }
  2616. return ret;
  2617. }
  2618. #if defined _ALS_OnPlayerExitRace
  2619. #undef OnPlayerExitRace
  2620. #else
  2621. #define _ALS_OnPlayerExitRace
  2622. #endif
  2623. #define OnPlayerExitRace S@@_OnPlayerExitRace
  2624. HOOK_FORWARD<PlayerExitRace>
  2625. #if !defined _ALS_OnRaceEnd
  2626. forward OnRaceEnd(race);
  2627. #endif
  2628. public OnRaceEnd(race)
  2629. {
  2630. P:2("Hooks_OnRaceEnd called: %d", race);
  2631. new
  2632. end = _:YSI_g_sCallbackEnd[ALS_OnRaceEnd],
  2633. start = _:YSI_g_sCallbackStart[ALS_OnRaceEnd],
  2634. ret = ALS_R_RaceEnd;
  2635. while (start++ != end)
  2636. {
  2637. #emit PUSH.S race
  2638. #emit PUSH.C 4
  2639. #emit CONST.alt YSI_g_sCallbackAddresses
  2640. #emit LOAD.S.pri start
  2641. //#emit INC.pri
  2642. //#emit STOR.S.pri start
  2643. #emit LIDX
  2644. #emit MOVE.alt
  2645. #emit LCTRL 6
  2646. #emit ADD.C 24
  2647. #emit PUSH.pri
  2648. #emit MOVE.pri
  2649. #emit SCTRL 6
  2650. #emit MOVE.alt
  2651. #emit CONST.pri 0xFFFFFFFE
  2652. #emit AND
  2653. #emit PUSH.pri
  2654. #emit LOAD.S.pri ret
  2655. #emit AND
  2656. #emit POP.alt
  2657. #emit OR
  2658. #emit STOR.S.pri ret
  2659. if (ret < 0) return ret + 1;
  2660. }
  2661. return ret;
  2662. }
  2663. #if defined _ALS_OnRaceEnd
  2664. #undef OnRaceEnd
  2665. #else
  2666. #define _ALS_OnRaceEnd
  2667. #endif
  2668. #define OnRaceEnd S@@_OnRaceEnd
  2669. HOOK_FORWARD<RaceEnd>
  2670. #if !defined OnPlayerClickMap
  2671. #undef ALS_MAKE
  2672. #endinput
  2673. #endif
  2674. public OnPlayerClickMap(playerid, Float:fX, Float:fY, Float:fZ)
  2675. {
  2676. P:2("Hooks_OnPlayerClickMap called: %d, %f, %f, %f", playerid, fX, fY, fZ);
  2677. new
  2678. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerClickMap],
  2679. start = _:YSI_g_sCallbackStart[ALS_OnPlayerClickMap],
  2680. ret = ALS_R_PlayerClickMap;
  2681. while (start++ != end)
  2682. {
  2683. #emit PUSH.S fZ
  2684. #emit PUSH.S fY
  2685. #emit PUSH.S fX
  2686. #emit PUSH.S playerid
  2687. #emit PUSH.C 16
  2688. #emit CONST.alt YSI_g_sCallbackAddresses
  2689. #emit LOAD.S.pri start
  2690. //#emit INC.pri
  2691. //#emit STOR.S.pri start
  2692. #emit LIDX
  2693. #emit MOVE.alt
  2694. #emit LCTRL 6
  2695. #emit ADD.C 24
  2696. #emit PUSH.pri
  2697. #emit MOVE.pri
  2698. #emit SCTRL 6
  2699. #emit MOVE.alt
  2700. #emit CONST.pri 0xFFFFFFFE
  2701. #emit AND
  2702. #emit PUSH.pri
  2703. #emit LOAD.S.pri ret
  2704. #emit AND
  2705. #emit POP.alt
  2706. #emit OR
  2707. #emit STOR.S.pri ret
  2708. if (ret < 0) return ret + 1;
  2709. }
  2710. return ret;
  2711. }
  2712. #if defined _ALS_OnPlayerClickMap
  2713. #undef OnPlayerClickMap
  2714. #else
  2715. #define _ALS_OnPlayerClickMap
  2716. #endif
  2717. #define OnPlayerClickMap S@@_OnPlayerClickMap
  2718. HOOK_FORWARD<PlayerClickMap>
  2719. public OnPlayerClickTextDraw(playerid, Text:clickedid)
  2720. {
  2721. P:2("Hooks_OnPlayerClickTextDraw called: %d, %d", playerid, _:clickedid);
  2722. new
  2723. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerClickTextDraw],
  2724. start = _:YSI_g_sCallbackStart[ALS_OnPlayerClickTextDraw],
  2725. ret = ALS_R_PlayerClickTextDraw;
  2726. while (start++ != end)
  2727. {
  2728. #emit PUSH.S clickedid
  2729. #emit PUSH.S playerid
  2730. #emit PUSH.C 8
  2731. #emit CONST.alt YSI_g_sCallbackAddresses
  2732. #emit LOAD.S.pri start
  2733. //#emit INC.pri
  2734. //#emit STOR.S.pri start
  2735. #emit LIDX
  2736. #emit MOVE.alt
  2737. #emit LCTRL 6
  2738. #emit ADD.C 24
  2739. #emit PUSH.pri
  2740. #emit MOVE.pri
  2741. #emit SCTRL 6
  2742. #emit MOVE.alt
  2743. #emit CONST.pri 0xFFFFFFFE
  2744. #emit AND
  2745. #emit PUSH.pri
  2746. #emit LOAD.S.pri ret
  2747. #emit AND
  2748. #emit POP.alt
  2749. #emit OR
  2750. #emit STOR.S.pri ret
  2751. if (ret < 0) return ret + 1;
  2752. }
  2753. return ret;
  2754. }
  2755. #if defined _ALS_OnPlayerClickTextDraw
  2756. #undef OnPlayerClickTextDraw
  2757. #else
  2758. #define _ALS_OnPlayerClickTextDraw
  2759. #endif
  2760. #define OnPlayerClickTextDraw S@@_OnPlayerClickTextDraw
  2761. HOOK_FORWARD<PlayerClickTextDraw>
  2762. public OnPlayerClickPlayerTextDraw(playerid, PlayerText:playertextid)
  2763. {
  2764. P:2("Hooks_OnPlayerClickPlayerTextDraw called: %d, %d", playerid, _:playertextid);
  2765. new
  2766. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerClickPlayerTextDraw],
  2767. start = _:YSI_g_sCallbackStart[ALS_OnPlayerClickPlayerTextDraw],
  2768. ret = ALS_R_PlayerClickPlayerTextDraw;
  2769. while (start++ != end)
  2770. {
  2771. #emit PUSH.S playertextid
  2772. #emit PUSH.S playerid
  2773. #emit PUSH.C 8
  2774. #emit CONST.alt YSI_g_sCallbackAddresses
  2775. #emit LOAD.S.pri start
  2776. //#emit INC.pri
  2777. //#emit STOR.S.pri start
  2778. #emit LIDX
  2779. #emit MOVE.alt
  2780. #emit LCTRL 6
  2781. #emit ADD.C 24
  2782. #emit PUSH.pri
  2783. #emit MOVE.pri
  2784. #emit SCTRL 6
  2785. #emit MOVE.alt
  2786. #emit CONST.pri 0xFFFFFFFE
  2787. #emit AND
  2788. #emit PUSH.pri
  2789. #emit LOAD.S.pri ret
  2790. #emit AND
  2791. #emit POP.alt
  2792. #emit OR
  2793. #emit STOR.S.pri ret
  2794. if (ret < 0) return ret + 1;
  2795. }
  2796. return ret;
  2797. }
  2798. #if defined _ALS_OnPlayerClickPlayerTD
  2799. #undef OnPlayerClickPlayerTextDraw
  2800. #else
  2801. #define _ALS_OnPlayerClickPlayerTD
  2802. #endif
  2803. #define OnPlayerClickPlayerTextDraw S@@_OnPlayerClickPlayerTextDraw
  2804. HOOK_FORWARD<PlayerClickPlayerTextDraw>
  2805. public OnPlayerEditObject(playerid, playerobject, objectid, response, Float:fX, Float:fY, Float:fZ, Float:fRotX, Float:fRotY, Float:fRotZ)
  2806. {
  2807. 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);
  2808. new
  2809. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerEditObject],
  2810. start = _:YSI_g_sCallbackStart[ALS_OnPlayerEditObject],
  2811. ret = ALS_R_PlayerEditObject;
  2812. while (start++ != end)
  2813. {
  2814. #emit PUSH.S fRotZ
  2815. #emit PUSH.S fRotY
  2816. #emit PUSH.S fRotX
  2817. #emit PUSH.S fZ
  2818. #emit PUSH.S fY
  2819. #emit PUSH.S fX
  2820. #emit PUSH.S response
  2821. #emit PUSH.S objectid
  2822. #emit PUSH.S playerobject
  2823. #emit PUSH.S playerid
  2824. #emit PUSH.C 40
  2825. #emit CONST.alt YSI_g_sCallbackAddresses
  2826. #emit LOAD.S.pri start
  2827. //#emit INC.pri
  2828. //#emit STOR.S.pri start
  2829. #emit LIDX
  2830. #emit MOVE.alt
  2831. #emit LCTRL 6
  2832. #emit ADD.C 24
  2833. #emit PUSH.pri
  2834. #emit MOVE.pri
  2835. #emit SCTRL 6
  2836. #emit MOVE.alt
  2837. #emit CONST.pri 0xFFFFFFFE
  2838. #emit AND
  2839. #emit PUSH.pri
  2840. #emit LOAD.S.pri ret
  2841. #emit AND
  2842. #emit POP.alt
  2843. #emit OR
  2844. #emit STOR.S.pri ret
  2845. if (ret < 0) return ret + 1;
  2846. }
  2847. return ret;
  2848. }
  2849. #if defined _ALS_OnPlayerEditObject
  2850. #undef OnPlayerEditObject
  2851. #else
  2852. #define _ALS_OnPlayerEditObject
  2853. #endif
  2854. #define OnPlayerEditObject S@@_OnPlayerEditObject
  2855. HOOK_FORWARD<PlayerEditObject>
  2856. 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)
  2857. {
  2858. 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);
  2859. new
  2860. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerEditAttachedObject],
  2861. start = _:YSI_g_sCallbackStart[ALS_OnPlayerEditAttachedObject],
  2862. ret = ALS_R_PlayerEditAttachedObject;
  2863. while (start++ != end)
  2864. {
  2865. #emit PUSH.S fScaleZ
  2866. #emit PUSH.S fScaleY
  2867. #emit PUSH.S fScaleX
  2868. #emit PUSH.S fRotZ
  2869. #emit PUSH.S fRotY
  2870. #emit PUSH.S fRotX
  2871. #emit PUSH.S fOffsetZ
  2872. #emit PUSH.S fOffsetY
  2873. #emit PUSH.S fOffsetX
  2874. #emit PUSH.S boneid
  2875. #emit PUSH.S modelid
  2876. #emit PUSH.S index
  2877. #emit PUSH.S response
  2878. #emit PUSH.S playerid
  2879. #emit PUSH.C 56
  2880. #emit CONST.alt YSI_g_sCallbackAddresses
  2881. #emit LOAD.S.pri start
  2882. //#emit INC.pri
  2883. //#emit STOR.S.pri start
  2884. #emit LIDX
  2885. #emit MOVE.alt
  2886. #emit LCTRL 6
  2887. #emit ADD.C 24
  2888. #emit PUSH.pri
  2889. #emit MOVE.pri
  2890. #emit SCTRL 6
  2891. #emit MOVE.alt
  2892. #emit CONST.pri 0xFFFFFFFE
  2893. #emit AND
  2894. #emit PUSH.pri
  2895. #emit LOAD.S.pri ret
  2896. #emit AND
  2897. #emit POP.alt
  2898. #emit OR
  2899. #emit STOR.S.pri ret
  2900. if (ret < 0) return ret + 1;
  2901. }
  2902. return ret;
  2903. }
  2904. #if defined _ALS_OnPlayerEditAttachedObject
  2905. #undef OnPlayerEditAttachedObject
  2906. #else
  2907. #define _ALS_OnPlayerEditAttachedObject
  2908. #endif
  2909. #define OnPlayerEditAttachedObject S@@_OnPlayerEditAttachedObject
  2910. HOOK_FORWARD<PlayerEditAttachedObject>
  2911. //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);
  2912. //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;}
  2913. //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;}
  2914. public OnPlayerSelectObject(playerid, type, objectid, modelid, Float:fX, Float:fY, Float:fZ)
  2915. {
  2916. P:2("Hooks_OnPlayerSelectObject called: %d, %d, %d, %d, %f, %f, %f", playerid, type, objectid, modelid, fX, fY, fZ);
  2917. new
  2918. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerSelectObject],
  2919. start = _:YSI_g_sCallbackStart[ALS_OnPlayerSelectObject],
  2920. ret = ALS_R_PlayerSelectObject;
  2921. while (start++ != end)
  2922. {
  2923. #emit PUSH.S fZ
  2924. #emit PUSH.S fY
  2925. #emit PUSH.S fX
  2926. #emit PUSH.S modelid
  2927. #emit PUSH.S objectid
  2928. #emit PUSH.S type
  2929. #emit PUSH.S playerid
  2930. #emit PUSH.C 28
  2931. #emit CONST.alt YSI_g_sCallbackAddresses
  2932. #emit LOAD.S.pri start
  2933. //#emit INC.pri
  2934. //#emit STOR.S.pri start
  2935. #emit LIDX
  2936. #emit MOVE.alt
  2937. #emit LCTRL 6
  2938. #emit ADD.C 24
  2939. #emit PUSH.pri
  2940. #emit MOVE.pri
  2941. #emit SCTRL 6
  2942. #emit MOVE.alt
  2943. #emit CONST.pri 0xFFFFFFFE
  2944. #emit AND
  2945. #emit PUSH.pri
  2946. #emit LOAD.S.pri ret
  2947. #emit AND
  2948. #emit POP.alt
  2949. #emit OR
  2950. #emit STOR.S.pri ret
  2951. if (ret < 0) return ret + 1;
  2952. }
  2953. return ret;
  2954. }
  2955. #if defined _ALS_OnPlayerSelectObject
  2956. #undef OnPlayerSelectObject
  2957. #else
  2958. #define _ALS_OnPlayerSelectObject
  2959. #endif
  2960. #define OnPlayerSelectObject S@@_OnPlayerSelectObject
  2961. HOOK_FORWARD<PlayerSelectObject>
  2962. // Allow hooking of streamer plugin callbacks.
  2963. #if !defined _YSI_PLUGINS_STREAMER
  2964. #undef ALS_MAKE
  2965. #endinput
  2966. #endif
  2967. public OnDynamicObjectMoved(objectid)
  2968. {
  2969. P:2("Hooks_OnDynamicObjectMoved called: %d", objectid);
  2970. new
  2971. end = _:YSI_g_sCallbackEnd[ALS_OnDynamicObjectMoved],
  2972. start = _:YSI_g_sCallbackStart[ALS_OnDynamicObjectMoved],
  2973. ret = ALS_R_DynamicObjectMoved;
  2974. while (start++ != end)
  2975. {
  2976. #emit PUSH.S objectid
  2977. #emit PUSH.C 4
  2978. #emit CONST.alt YSI_g_sCallbackAddresses
  2979. #emit LOAD.S.pri start
  2980. //#emit INC.pri
  2981. //#emit STOR.S.pri start
  2982. #emit LIDX
  2983. #emit MOVE.alt
  2984. #emit LCTRL 6
  2985. #emit ADD.C 24
  2986. #emit PUSH.pri
  2987. #emit MOVE.pri
  2988. #emit SCTRL 6
  2989. #emit MOVE.alt
  2990. #emit CONST.pri 0xFFFFFFFE
  2991. #emit AND
  2992. #emit PUSH.pri
  2993. #emit LOAD.S.pri ret
  2994. #emit AND
  2995. #emit POP.alt
  2996. #emit OR
  2997. #emit STOR.S.pri ret
  2998. if (ret < 0) return ret + 1;
  2999. }
  3000. return ret;
  3001. }
  3002. #if defined _ALS_OnDynamicObjectMoved
  3003. #undef OnDynamicObjectMoved
  3004. #else
  3005. #define _ALS_OnDynamicObjectMoved
  3006. #endif
  3007. #define OnDynamicObjectMoved S@@_OnDynamicObjectMoved
  3008. HOOK_FORWARD<DynamicObjectMoved>
  3009. public OnPlayerEditDynamicObject(playerid, objectid, response, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz)
  3010. {
  3011. P:2("Hooks_OnPlayerEditDynamicObject called: %d, %d, %d, %f, %f, %f, %f, %f, %f", playerid, objectid, response, x, y, z, rx, ry, rz);
  3012. new
  3013. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerEditDynamicObject],
  3014. start = _:YSI_g_sCallbackStart[ALS_OnPlayerEditDynamicObject],
  3015. ret = ALS_R_PlayerEditDynamicObject;
  3016. while (start++ != end)
  3017. {
  3018. #emit PUSH.S rz
  3019. #emit PUSH.S ry
  3020. #emit PUSH.S rx
  3021. #emit PUSH.S z
  3022. #emit PUSH.S y
  3023. #emit PUSH.S x
  3024. #emit PUSH.S response
  3025. #emit PUSH.S objectid
  3026. #emit PUSH.S playerid
  3027. #emit PUSH.C 36
  3028. #emit CONST.alt YSI_g_sCallbackAddresses
  3029. #emit LOAD.S.pri start
  3030. //#emit INC.pri
  3031. //#emit STOR.S.pri start
  3032. #emit LIDX
  3033. #emit MOVE.alt
  3034. #emit LCTRL 6
  3035. #emit ADD.C 24
  3036. #emit PUSH.pri
  3037. #emit MOVE.pri
  3038. #emit SCTRL 6
  3039. #emit MOVE.alt
  3040. #emit CONST.pri 0xFFFFFFFE
  3041. #emit AND
  3042. #emit PUSH.pri
  3043. #emit LOAD.S.pri ret
  3044. #emit AND
  3045. #emit POP.alt
  3046. #emit OR
  3047. #emit STOR.S.pri ret
  3048. if (ret < 0) return ret + 1;
  3049. }
  3050. return ret;
  3051. }
  3052. #if defined _ALS_OnPlayerEditDynamicObject
  3053. #undef OnPlayerEditDynamicObject
  3054. #else
  3055. #define _ALS_OnPlayerEditDynamicObject
  3056. #endif
  3057. #define OnPlayerEditDynamicObject S@@_OnPlayerEditDynamicObject
  3058. HOOK_FORWARD<PlayerEditDynamicObject>
  3059. //forward S@@_OnPlayerEditDynamicObject(playerid, objectid, response, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz);
  3060. //public S@@_OnPlayerEditDynamicObject(playerid, objectid, response, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz)<_ALS_:unhooked>{return 1;}
  3061. //public S@@_OnPlayerEditDynamicObject(playerid, objectid, response, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz)<>{return 1;}
  3062. public OnPlayerSelectDynamicObject(playerid, objectid, modelid, Float:x, Float:y, Float:z)
  3063. {
  3064. P:2("Hooks_OnPlayerSelectDynamicObject called: %d, %d, %d, %f, %f, %f", playerid, objectid, modelid, x, y, z);
  3065. new
  3066. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerSelectDynamicObject],
  3067. start = _:YSI_g_sCallbackStart[ALS_OnPlayerSelectDynamicObject],
  3068. ret = ALS_R_PlayerSelectDynamicObject;
  3069. while (start++ != end)
  3070. {
  3071. #emit PUSH.S z
  3072. #emit PUSH.S y
  3073. #emit PUSH.S x
  3074. #emit PUSH.S modelid
  3075. #emit PUSH.S objectid
  3076. #emit PUSH.S playerid
  3077. #emit PUSH.C 24
  3078. #emit CONST.alt YSI_g_sCallbackAddresses
  3079. #emit LOAD.S.pri start
  3080. //#emit INC.pri
  3081. //#emit STOR.S.pri start
  3082. #emit LIDX
  3083. #emit MOVE.alt
  3084. #emit LCTRL 6
  3085. #emit ADD.C 24
  3086. #emit PUSH.pri
  3087. #emit MOVE.pri
  3088. #emit SCTRL 6
  3089. #emit MOVE.alt
  3090. #emit CONST.pri 0xFFFFFFFE
  3091. #emit AND
  3092. #emit PUSH.pri
  3093. #emit LOAD.S.pri ret
  3094. #emit AND
  3095. #emit POP.alt
  3096. #emit OR
  3097. #emit STOR.S.pri ret
  3098. if (ret < 0) return ret + 1;
  3099. }
  3100. return ret;
  3101. }
  3102. #if defined _ALS_OnPlayerSelectDynamicObj
  3103. #undef OnPlayerSelectDynamicObject
  3104. #else
  3105. #define _ALS_OnPlayerSelectDynamicObj
  3106. #endif
  3107. #define OnPlayerSelectDynamicObject S@@_OnPlayerSelectDynamicObject
  3108. HOOK_FORWARD<PlayerSelectDynamicObject>
  3109. //forward S@@_OnPlayerEditDynamicObject(playerid, objectid, modelid, Float:x, Float:y, Float:z);
  3110. //public S@@_OnPlayerEditDynamicObject(playerid, objectid, modelid, Float:x, Float:y, Float:z)<_ALS_:unhooked>{return 1;}
  3111. //public S@@_OnPlayerEditDynamicObject(playerid, objectid, modelid, Float:x, Float:y, Float:z)<>{return 1;}
  3112. public OnPlayerPickUpDynamicPickup(playerid, pickupid)
  3113. {
  3114. P:2("Hooks_OnPlayerPickUpDynamicPickup called: %d, %d", playerid, pickupid);
  3115. new
  3116. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerPickUpDynamicPickup],
  3117. start = _:YSI_g_sCallbackStart[ALS_OnPlayerPickUpDynamicPickup],
  3118. ret = ALS_R_PlayerPickUpDynamicPickup;
  3119. while (start++ != end)
  3120. {
  3121. #emit PUSH.S pickupid
  3122. #emit PUSH.S playerid
  3123. #emit PUSH.C 8
  3124. #emit CONST.alt YSI_g_sCallbackAddresses
  3125. #emit LOAD.S.pri start
  3126. //#emit INC.pri
  3127. //#emit STOR.S.pri start
  3128. #emit LIDX
  3129. #emit MOVE.alt
  3130. #emit LCTRL 6
  3131. #emit ADD.C 24
  3132. #emit PUSH.pri
  3133. #emit MOVE.pri
  3134. #emit SCTRL 6
  3135. #emit MOVE.alt
  3136. #emit CONST.pri 0xFFFFFFFE
  3137. #emit AND
  3138. #emit PUSH.pri
  3139. #emit LOAD.S.pri ret
  3140. #emit AND
  3141. #emit POP.alt
  3142. #emit OR
  3143. #emit STOR.S.pri ret
  3144. if (ret < 0) return ret + 1;
  3145. }
  3146. return ret;
  3147. }
  3148. #if defined _ALS_OnPlayerPickUpDynamicPUp
  3149. #undef OnPlayerPickUpDynamicPickup
  3150. #else
  3151. #define _ALS_OnPlayerPickUpDynamicPUp
  3152. #endif
  3153. #define OnPlayerPickUpDynamicPickup S@@_OnPlayerPickUpDynamicPickup
  3154. HOOK_FORWARD<PlayerPickUpDynamicPickup>
  3155. public OnPlayerEnterDynamicCP(playerid, checkpointid)
  3156. {
  3157. P:2("Hooks_OnPlayerEnterDynamicCP called: %d, %d", playerid, checkpointid);
  3158. new
  3159. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerEnterDynamicCP],
  3160. start = _:YSI_g_sCallbackStart[ALS_OnPlayerEnterDynamicCP],
  3161. ret = ALS_R_PlayerEnterDynamicCP;
  3162. while (start++ != end)
  3163. {
  3164. #emit PUSH.S checkpointid
  3165. #emit PUSH.S playerid
  3166. #emit PUSH.C 8
  3167. #emit CONST.alt YSI_g_sCallbackAddresses
  3168. #emit LOAD.S.pri start
  3169. //#emit INC.pri
  3170. //#emit STOR.S.pri start
  3171. #emit LIDX
  3172. #emit MOVE.alt
  3173. #emit LCTRL 6
  3174. #emit ADD.C 24
  3175. #emit PUSH.pri
  3176. #emit MOVE.pri
  3177. #emit SCTRL 6
  3178. #emit MOVE.alt
  3179. #emit CONST.pri 0xFFFFFFFE
  3180. #emit AND
  3181. #emit PUSH.pri
  3182. #emit LOAD.S.pri ret
  3183. #emit AND
  3184. #emit POP.alt
  3185. #emit OR
  3186. #emit STOR.S.pri ret
  3187. if (ret < 0) return ret + 1;
  3188. }
  3189. return ret;
  3190. }
  3191. #if defined _ALS_OnPlayerEnterDynamicCP
  3192. #undef OnPlayerEnterDynamicCP
  3193. #else
  3194. #define _ALS_OnPlayerEnterDynamicCP
  3195. #endif
  3196. #define OnPlayerEnterDynamicCP S@@_OnPlayerEnterDynamicCP
  3197. HOOK_FORWARD<PlayerEnterDynamicCP>
  3198. public OnPlayerLeaveDynamicCP(playerid, checkpointid)
  3199. {
  3200. P:2("Hooks_OnPlayerLeaveDynamicCP called: %d, %d", playerid, checkpointid);
  3201. new
  3202. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerLeaveDynamicCP],
  3203. start = _:YSI_g_sCallbackStart[ALS_OnPlayerLeaveDynamicCP],
  3204. ret = ALS_R_PlayerLeaveDynamicCP;
  3205. while (start++ != end)
  3206. {
  3207. #emit PUSH.S checkpointid
  3208. #emit PUSH.S playerid
  3209. #emit PUSH.C 8
  3210. #emit CONST.alt YSI_g_sCallbackAddresses
  3211. #emit LOAD.S.pri start
  3212. //#emit INC.pri
  3213. //#emit STOR.S.pri start
  3214. #emit LIDX
  3215. #emit MOVE.alt
  3216. #emit LCTRL 6
  3217. #emit ADD.C 24
  3218. #emit PUSH.pri
  3219. #emit MOVE.pri
  3220. #emit SCTRL 6
  3221. #emit MOVE.alt
  3222. #emit CONST.pri 0xFFFFFFFE
  3223. #emit AND
  3224. #emit PUSH.pri
  3225. #emit LOAD.S.pri ret
  3226. #emit AND
  3227. #emit POP.alt
  3228. #emit OR
  3229. #emit STOR.S.pri ret
  3230. if (ret < 0) return ret + 1;
  3231. }
  3232. return ret;
  3233. }
  3234. #if defined _ALS_OnPlayerLeaveDynamicCP
  3235. #undef OnPlayerLeaveDynamicCP
  3236. #else
  3237. #define _ALS_OnPlayerLeaveDynamicCP
  3238. #endif
  3239. #define OnPlayerLeaveDynamicCP S@@_OnPlayerLeaveDynamicCP
  3240. HOOK_FORWARD<PlayerLeaveDynamicCP>
  3241. public OnPlayerEnterDynamicRaceCP(playerid, checkpointid)
  3242. {
  3243. P:2("Hooks_OnPlayerEnterDynamicRaceCP called: %d, %d", playerid, checkpointid);
  3244. new
  3245. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerEnterDynamicRaceCP],
  3246. start = _:YSI_g_sCallbackStart[ALS_OnPlayerEnterDynamicRaceCP],
  3247. ret = ALS_R_PlayerEnterDynamicRaceCP;
  3248. while (start++ != end)
  3249. {
  3250. #emit PUSH.S checkpointid
  3251. #emit PUSH.S playerid
  3252. #emit PUSH.C 8
  3253. #emit CONST.alt YSI_g_sCallbackAddresses
  3254. #emit LOAD.S.pri start
  3255. //#emit INC.pri
  3256. //#emit STOR.S.pri start
  3257. #emit LIDX
  3258. #emit MOVE.alt
  3259. #emit LCTRL 6
  3260. #emit ADD.C 24
  3261. #emit PUSH.pri
  3262. #emit MOVE.pri
  3263. #emit SCTRL 6
  3264. #emit MOVE.alt
  3265. #emit CONST.pri 0xFFFFFFFE
  3266. #emit AND
  3267. #emit PUSH.pri
  3268. #emit LOAD.S.pri ret
  3269. #emit AND
  3270. #emit POP.alt
  3271. #emit OR
  3272. #emit STOR.S.pri ret
  3273. if (ret < 0) return ret + 1;
  3274. }
  3275. return ret;
  3276. }
  3277. #if defined _ALS_OnPlayerEnterDynamicRaceCP
  3278. #undef OnPlayerEnterDynamicRaceCP
  3279. #else
  3280. #define _ALS_OnPlayerEnterDynamicRaceCP
  3281. #endif
  3282. #define OnPlayerEnterDynamicRaceCP S@@_OnPlayerEnterDynamicRaceCP
  3283. HOOK_FORWARD<PlayerEnterDynamicRaceCP>
  3284. public OnPlayerLeaveDynamicRaceCP(playerid, checkpointid)
  3285. {
  3286. P:2("Hooks_OnPlayerLeaveDynamicRaceCP called: %d, %d", playerid, checkpointid);
  3287. new
  3288. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerLeaveDynamicRaceCP],
  3289. start = _:YSI_g_sCallbackStart[ALS_OnPlayerLeaveDynamicRaceCP],
  3290. ret = ALS_R_PlayerLeaveDynamicRaceCP;
  3291. while (start++ != end)
  3292. {
  3293. #emit PUSH.S checkpointid
  3294. #emit PUSH.S playerid
  3295. #emit PUSH.C 8
  3296. #emit CONST.alt YSI_g_sCallbackAddresses
  3297. #emit LOAD.S.pri start
  3298. //#emit INC.pri
  3299. //#emit STOR.S.pri start
  3300. #emit LIDX
  3301. #emit MOVE.alt
  3302. #emit LCTRL 6
  3303. #emit ADD.C 24
  3304. #emit PUSH.pri
  3305. #emit MOVE.pri
  3306. #emit SCTRL 6
  3307. #emit MOVE.alt
  3308. #emit CONST.pri 0xFFFFFFFE
  3309. #emit AND
  3310. #emit PUSH.pri
  3311. #emit LOAD.S.pri ret
  3312. #emit AND
  3313. #emit POP.alt
  3314. #emit OR
  3315. #emit STOR.S.pri ret
  3316. if (ret < 0) return ret + 1;
  3317. }
  3318. return ret;
  3319. }
  3320. #if defined _ALS_OnPlayerLeaveDynamicRaceCP
  3321. #undef OnPlayerLeaveDynamicRaceCP
  3322. #else
  3323. #define _ALS_OnPlayerLeaveDynamicRaceCP
  3324. #endif
  3325. #define OnPlayerLeaveDynamicRaceCP S@@_OnPlayerLeaveDynamicRaceCP
  3326. HOOK_FORWARD<PlayerLeaveDynamicRaceCP>
  3327. public OnPlayerEnterDynamicArea(playerid, areaid)
  3328. {
  3329. P:2("Hooks_OnPlayerEnterDynamicArea called: %d, %d", playerid, areaid);
  3330. new
  3331. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerEnterDynamicArea],
  3332. start = _:YSI_g_sCallbackStart[ALS_OnPlayerEnterDynamicArea],
  3333. ret = ALS_R_PlayerEnterDynamicArea;
  3334. while (start++ != end)
  3335. {
  3336. #emit PUSH.S areaid
  3337. #emit PUSH.S playerid
  3338. #emit PUSH.C 8
  3339. #emit CONST.alt YSI_g_sCallbackAddresses
  3340. #emit LOAD.S.pri start
  3341. //#emit INC.pri
  3342. //#emit STOR.S.pri start
  3343. #emit LIDX
  3344. #emit MOVE.alt
  3345. #emit LCTRL 6
  3346. #emit ADD.C 24
  3347. #emit PUSH.pri
  3348. #emit MOVE.pri
  3349. #emit SCTRL 6
  3350. #emit MOVE.alt
  3351. #emit CONST.pri 0xFFFFFFFE
  3352. #emit AND
  3353. #emit PUSH.pri
  3354. #emit LOAD.S.pri ret
  3355. #emit AND
  3356. #emit POP.alt
  3357. #emit OR
  3358. #emit STOR.S.pri ret
  3359. if (ret < 0) return ret + 1;
  3360. }
  3361. return ret;
  3362. }
  3363. #if defined _ALS_OnPlayerEnterDynamicArea
  3364. #undef OnPlayerEnterDynamicArea
  3365. #else
  3366. #define _ALS_OnPlayerEnterDynamicArea
  3367. #endif
  3368. #define OnPlayerEnterDynamicArea S@@_OnPlayerEnterDynamicArea
  3369. HOOK_FORWARD<PlayerEnterDynamicArea>
  3370. public OnPlayerLeaveDynamicArea(playerid, areaid)
  3371. {
  3372. P:2("Hooks_OnPlayerLeaveDynamicArea called: %d, %d", playerid, areaid);
  3373. new
  3374. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerLeaveDynamicArea],
  3375. start = _:YSI_g_sCallbackStart[ALS_OnPlayerLeaveDynamicArea],
  3376. ret = ALS_R_PlayerLeaveDynamicArea;
  3377. while (start++ != end)
  3378. {
  3379. #emit PUSH.S areaid
  3380. #emit PUSH.S playerid
  3381. #emit PUSH.C 8
  3382. #emit CONST.alt YSI_g_sCallbackAddresses
  3383. #emit LOAD.S.pri start
  3384. //#emit INC.pri
  3385. //#emit STOR.S.pri start
  3386. #emit LIDX
  3387. #emit MOVE.alt
  3388. #emit LCTRL 6
  3389. #emit ADD.C 24
  3390. #emit PUSH.pri
  3391. #emit MOVE.pri
  3392. #emit SCTRL 6
  3393. #emit MOVE.alt
  3394. #emit CONST.pri 0xFFFFFFFE
  3395. #emit AND
  3396. #emit PUSH.pri
  3397. #emit LOAD.S.pri ret
  3398. #emit AND
  3399. #emit POP.alt
  3400. #emit OR
  3401. #emit STOR.S.pri ret
  3402. if (ret < 0) return ret + 1;
  3403. }
  3404. return ret;
  3405. }
  3406. #if defined _ALS_OnPlayerLeaveDynamicArea
  3407. #undef OnPlayerLeaveDynamicArea
  3408. #else
  3409. #define _ALS_OnPlayerLeaveDynamicArea
  3410. #endif
  3411. #define OnPlayerLeaveDynamicArea S@@_OnPlayerLeaveDynamicArea
  3412. HOOK_FORWARD<PlayerLeaveDynamicArea>
  3413. #undef ALS_MAKE