1
0

y_hooks_master.inc 106 KB

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