1
0

y_dohooks.inc 110 KB

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