impl.inc 79 KB

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