impl.inc 86 KB

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