impl.inc 86 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535
  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, Float:vel_x, Float:vel_y, Float:vel_z)
  1689. {
  1690. P:2("Hooks_OnUnoccupiedVehicleUpdate called: %d, %d, %d, %f, %f, %f, %f, %f, %f", vehicleid, playerid, passenger_seat, new_x, new_y, new_z, vel_x, vel_y, vel_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 vel_z
  1698. #emit PUSH.S vel_y
  1699. #emit PUSH.S vel_x
  1700. #emit PUSH.S new_z
  1701. #emit PUSH.S new_y
  1702. #emit PUSH.S new_x
  1703. #emit PUSH.S passenger_seat
  1704. #emit PUSH.S playerid
  1705. #emit PUSH.S vehicleid
  1706. // I wonder if I could hack the stack with a negative number so that when
  1707. // the called function returns it puts all the header data BACK on to the
  1708. // stack instead of removing the parameters and header.
  1709. #emit PUSH.C 36
  1710. #emit CONST.alt YSI_g_sCallbackAddresses
  1711. #emit LOAD.S.pri start
  1712. //#emit INC.pri
  1713. //#emit STOR.S.pri start
  1714. #emit LIDX
  1715. #emit MOVE.alt
  1716. #emit LCTRL 6
  1717. #emit ADD.C 24
  1718. #emit PUSH.pri
  1719. #emit MOVE.pri
  1720. #emit SCTRL 6
  1721. #emit MOVE.alt
  1722. #emit CONST.pri 0xFFFFFFFE
  1723. #emit AND
  1724. #emit PUSH.pri
  1725. #emit LOAD.S.pri ret
  1726. #emit AND
  1727. #emit POP.alt
  1728. #emit OR
  1729. #emit STOR.S.pri ret
  1730. if (ret < 0) return ret + 1;
  1731. }
  1732. return ret;
  1733. }
  1734. #if defined _ALS_OnUnoccupiedVehicleUpdate
  1735. #undef OnUnoccupiedVehicleUpdate
  1736. #else
  1737. #define _ALS_OnUnoccupiedVehicleUpdate
  1738. #endif
  1739. #define OnUnoccupiedVehicleUpdate S@@_OnUnoccupiedVehicleUpdate
  1740. HOOK_FORWARD<UnoccupiedVehicleUpdate>
  1741. public OnPlayerSelectedMenuRow(playerid, row)
  1742. {
  1743. P:2("Hooks_OnPlayerSelectedMenuRow called: %d, %d", playerid, row);
  1744. new
  1745. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerSelectedMenuRow],
  1746. start = _:YSI_g_sCallbackStart[ALS_OnPlayerSelectedMenuRow],
  1747. ret = ALS_R_PlayerSelectedMenuRow;
  1748. while (start++ != end)
  1749. {
  1750. #emit PUSH.S row
  1751. #emit PUSH.S playerid
  1752. #emit PUSH.C 8
  1753. #emit CONST.alt YSI_g_sCallbackAddresses
  1754. #emit LOAD.S.pri start
  1755. //#emit INC.pri
  1756. //#emit STOR.S.pri start
  1757. #emit LIDX
  1758. #emit MOVE.alt
  1759. #emit LCTRL 6
  1760. #emit ADD.C 24
  1761. #emit PUSH.pri
  1762. #emit MOVE.pri
  1763. #emit SCTRL 6
  1764. #emit MOVE.alt
  1765. #emit CONST.pri 0xFFFFFFFE
  1766. #emit AND
  1767. #emit PUSH.pri
  1768. #emit LOAD.S.pri ret
  1769. #emit AND
  1770. #emit POP.alt
  1771. #emit OR
  1772. #emit STOR.S.pri ret
  1773. if (ret < 0) return ret + 1;
  1774. }
  1775. return ret;
  1776. }
  1777. #if defined _ALS_OnPlayerSelectedMenuRow
  1778. #undef OnPlayerSelectedMenuRow
  1779. #else
  1780. #define _ALS_OnPlayerSelectedMenuRow
  1781. #endif
  1782. #define OnPlayerSelectedMenuRow S@@_OnPlayerSelectedMenuRow
  1783. HOOK_FORWARD<PlayerSelectedMenuRow>
  1784. public OnPlayerExitedMenu(playerid)
  1785. {
  1786. P:2("Hooks_OnPlayerExitedMenu called: %d", playerid);
  1787. new
  1788. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerExitedMenu],
  1789. start = _:YSI_g_sCallbackStart[ALS_OnPlayerExitedMenu],
  1790. ret = ALS_R_PlayerExitedMenu;
  1791. while (start++ != end)
  1792. {
  1793. #emit PUSH.S playerid
  1794. #emit PUSH.C 4
  1795. #emit CONST.alt YSI_g_sCallbackAddresses
  1796. #emit LOAD.S.pri start
  1797. //#emit INC.pri
  1798. //#emit STOR.S.pri start
  1799. #emit LIDX
  1800. #emit MOVE.alt
  1801. #emit LCTRL 6
  1802. #emit ADD.C 24
  1803. #emit PUSH.pri
  1804. #emit MOVE.pri
  1805. #emit SCTRL 6
  1806. #emit MOVE.alt
  1807. #emit CONST.pri 0xFFFFFFFE
  1808. #emit AND
  1809. #emit PUSH.pri
  1810. #emit LOAD.S.pri ret
  1811. #emit AND
  1812. #emit POP.alt
  1813. #emit OR
  1814. #emit STOR.S.pri ret
  1815. if (ret < 0) return ret + 1;
  1816. }
  1817. return ret;
  1818. }
  1819. #if defined _ALS_OnPlayerExitedMenu
  1820. #undef OnPlayerExitedMenu
  1821. #else
  1822. #define _ALS_OnPlayerExitedMenu
  1823. #endif
  1824. #define OnPlayerExitedMenu S@@_OnPlayerExitedMenu
  1825. HOOK_FORWARD<PlayerExitedMenu>
  1826. public OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid)
  1827. {
  1828. P:2("Hooks_OnPlayerInteriorChange called: %d, %d, %d", playerid, newinteriorid, oldinteriorid);
  1829. new
  1830. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerInteriorChange],
  1831. start = _:YSI_g_sCallbackStart[ALS_OnPlayerInteriorChange],
  1832. ret = ALS_R_PlayerInteriorChange;
  1833. while (start++ != end)
  1834. {
  1835. #emit PUSH.S oldinteriorid
  1836. #emit PUSH.S newinteriorid
  1837. #emit PUSH.S playerid
  1838. #emit PUSH.C 12
  1839. #emit CONST.alt YSI_g_sCallbackAddresses
  1840. #emit LOAD.S.pri start
  1841. //#emit INC.pri
  1842. //#emit STOR.S.pri start
  1843. #emit LIDX
  1844. #emit MOVE.alt
  1845. #emit LCTRL 6
  1846. #emit ADD.C 24
  1847. #emit PUSH.pri
  1848. #emit MOVE.pri
  1849. #emit SCTRL 6
  1850. #emit MOVE.alt
  1851. #emit CONST.pri 0xFFFFFFFE
  1852. #emit AND
  1853. #emit PUSH.pri
  1854. #emit LOAD.S.pri ret
  1855. #emit AND
  1856. #emit POP.alt
  1857. #emit OR
  1858. #emit STOR.S.pri ret
  1859. if (ret < 0) return ret + 1;
  1860. }
  1861. return ret;
  1862. }
  1863. #if defined _ALS_OnPlayerInteriorChange
  1864. #undef OnPlayerInteriorChange
  1865. #else
  1866. #define _ALS_OnPlayerInteriorChange
  1867. #endif
  1868. #define OnPlayerInteriorChange S@@_OnPlayerInteriorChange
  1869. HOOK_FORWARD<PlayerInteriorChange>
  1870. public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
  1871. {
  1872. P:2("Hooks_OnPlayerKeyStateChange called: %d, %d, %d", playerid, newkeys, oldkeys);
  1873. new
  1874. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerKeyStateChange],
  1875. start = _:YSI_g_sCallbackStart[ALS_OnPlayerKeyStateChange],
  1876. ret = ALS_R_PlayerKeyStateChange;
  1877. while (start++ != end)
  1878. {
  1879. #emit PUSH.S oldkeys
  1880. #emit PUSH.S newkeys
  1881. #emit PUSH.S playerid
  1882. #emit PUSH.C 12
  1883. #emit CONST.alt YSI_g_sCallbackAddresses
  1884. #emit LOAD.S.pri start
  1885. //#emit INC.pri
  1886. //#emit STOR.S.pri start
  1887. #emit LIDX
  1888. #emit MOVE.alt
  1889. #emit LCTRL 6
  1890. #emit ADD.C 24
  1891. #emit PUSH.pri
  1892. #emit MOVE.pri
  1893. #emit SCTRL 6
  1894. #emit MOVE.alt
  1895. #emit CONST.pri 0xFFFFFFFE
  1896. #emit AND
  1897. #emit PUSH.pri
  1898. #emit LOAD.S.pri ret
  1899. #emit AND
  1900. #emit POP.alt
  1901. #emit OR
  1902. #emit STOR.S.pri ret
  1903. if (ret < 0) return ret + 1;
  1904. }
  1905. return ret;
  1906. }
  1907. #if defined _ALS_OnPlayerKeyStateChange
  1908. #undef OnPlayerKeyStateChange
  1909. #else
  1910. #define _ALS_OnPlayerKeyStateChange
  1911. #endif
  1912. #define OnPlayerKeyStateChange S@@_OnPlayerKeyStateChange
  1913. HOOK_FORWARD<PlayerKeyStateChange>
  1914. public OnRconLoginAttempt(ip[], password[], success)
  1915. {
  1916. P:2("Hooks_OnRconLoginAttempt called: \"%s\", \"%s\", %d", ip, password, success);
  1917. new
  1918. end = _:YSI_g_sCallbackEnd[ALS_OnRconLoginAttempt],
  1919. start = _:YSI_g_sCallbackStart[ALS_OnRconLoginAttempt],
  1920. ret = ALS_R_RconLoginAttempt;
  1921. while (start++ != end)
  1922. {
  1923. #emit PUSH.S success
  1924. #emit PUSH.S password
  1925. #emit PUSH.S ip
  1926. #emit PUSH.C 12
  1927. #emit CONST.alt YSI_g_sCallbackAddresses
  1928. #emit LOAD.S.pri start
  1929. //#emit INC.pri
  1930. //#emit STOR.S.pri start
  1931. #emit LIDX
  1932. #emit MOVE.alt
  1933. #emit LCTRL 6
  1934. #emit ADD.C 24
  1935. #emit PUSH.pri
  1936. #emit MOVE.pri
  1937. #emit SCTRL 6
  1938. #emit MOVE.alt
  1939. #emit CONST.pri 0xFFFFFFFE
  1940. #emit AND
  1941. #emit PUSH.pri
  1942. #emit LOAD.S.pri ret
  1943. #emit AND
  1944. #emit POP.alt
  1945. #emit OR
  1946. #emit STOR.S.pri ret
  1947. if (ret < 0) return ret + 1;
  1948. }
  1949. return ret;
  1950. }
  1951. #if defined _ALS_OnRconLoginAttempt
  1952. #undef OnRconLoginAttempt
  1953. #else
  1954. #define _ALS_OnRconLoginAttempt
  1955. #endif
  1956. #define OnRconLoginAttempt S@@_OnRconLoginAttempt
  1957. HOOK_FORWARD<RconLoginAttempt>
  1958. public OnPlayerUpdate(playerid)
  1959. {
  1960. P:7("Hooks_OnPlayerUpdate called: %d", playerid);
  1961. new
  1962. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerUpdate],
  1963. start = _:YSI_g_sCallbackStart[ALS_OnPlayerUpdate],
  1964. ret = ALS_R_PlayerUpdate;
  1965. while (start++ != end)
  1966. {
  1967. #emit PUSH.S playerid
  1968. #emit PUSH.C 4
  1969. #emit CONST.alt YSI_g_sCallbackAddresses
  1970. #emit LOAD.S.pri start
  1971. //#emit INC.pri
  1972. //#emit STOR.S.pri start
  1973. #emit LIDX
  1974. #emit MOVE.alt
  1975. #emit LCTRL 6
  1976. #emit ADD.C 24
  1977. #emit PUSH.pri
  1978. #emit MOVE.pri
  1979. #emit SCTRL 6
  1980. #emit MOVE.alt
  1981. #emit CONST.pri 0xFFFFFFFE
  1982. #emit AND
  1983. #emit PUSH.pri
  1984. #emit LOAD.S.pri ret
  1985. #emit AND
  1986. #emit POP.alt
  1987. #emit OR
  1988. #emit STOR.S.pri ret
  1989. if (ret < 0) return ret + 1;
  1990. }
  1991. return ret;
  1992. }
  1993. #if defined _ALS_OnPlayerUpdate
  1994. #undef OnPlayerUpdate
  1995. #else
  1996. #define _ALS_OnPlayerUpdate
  1997. #endif
  1998. #define OnPlayerUpdate S@@_OnPlayerUpdate
  1999. HOOK_FORWARD<PlayerUpdate>
  2000. public OnPlayerStreamIn(playerid, forplayerid)
  2001. {
  2002. P:2("Hooks_OnPlayerStreamIn called: %d, %d", playerid, forplayerid);
  2003. new
  2004. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerStreamIn],
  2005. start = _:YSI_g_sCallbackStart[ALS_OnPlayerStreamIn],
  2006. ret = ALS_R_PlayerStreamIn;
  2007. while (start++ != end)
  2008. {
  2009. #emit PUSH.S forplayerid
  2010. #emit PUSH.S playerid
  2011. #emit PUSH.C 8
  2012. #emit CONST.alt YSI_g_sCallbackAddresses
  2013. #emit LOAD.S.pri start
  2014. //#emit INC.pri
  2015. //#emit STOR.S.pri start
  2016. #emit LIDX
  2017. #emit MOVE.alt
  2018. #emit LCTRL 6
  2019. #emit ADD.C 24
  2020. #emit PUSH.pri
  2021. #emit MOVE.pri
  2022. #emit SCTRL 6
  2023. #emit MOVE.alt
  2024. #emit CONST.pri 0xFFFFFFFE
  2025. #emit AND
  2026. #emit PUSH.pri
  2027. #emit LOAD.S.pri ret
  2028. #emit AND
  2029. #emit POP.alt
  2030. #emit OR
  2031. #emit STOR.S.pri ret
  2032. if (ret < 0) return ret + 1;
  2033. }
  2034. return ret;
  2035. }
  2036. #if defined _ALS_OnPlayerStreamIn
  2037. #undef OnPlayerStreamIn
  2038. #else
  2039. #define _ALS_OnPlayerStreamIn
  2040. #endif
  2041. #define OnPlayerStreamIn S@@_OnPlayerStreamIn
  2042. HOOK_FORWARD<PlayerStreamIn>
  2043. public OnPlayerStreamOut(playerid, forplayerid)
  2044. {
  2045. P:2("Hooks_OnPlayerStreamOut called: %d, %d", playerid, forplayerid);
  2046. new
  2047. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerStreamOut],
  2048. start = _:YSI_g_sCallbackStart[ALS_OnPlayerStreamOut],
  2049. ret = ALS_R_PlayerStreamOut;
  2050. while (start++ != end)
  2051. {
  2052. #emit PUSH.S forplayerid
  2053. #emit PUSH.S playerid
  2054. #emit PUSH.C 8
  2055. #emit CONST.alt YSI_g_sCallbackAddresses
  2056. #emit LOAD.S.pri start
  2057. //#emit INC.pri
  2058. //#emit STOR.S.pri start
  2059. #emit LIDX
  2060. #emit MOVE.alt
  2061. #emit LCTRL 6
  2062. #emit ADD.C 24
  2063. #emit PUSH.pri
  2064. #emit MOVE.pri
  2065. #emit SCTRL 6
  2066. #emit MOVE.alt
  2067. #emit CONST.pri 0xFFFFFFFE
  2068. #emit AND
  2069. #emit PUSH.pri
  2070. #emit LOAD.S.pri ret
  2071. #emit AND
  2072. #emit POP.alt
  2073. #emit OR
  2074. #emit STOR.S.pri ret
  2075. if (ret < 0) return ret + 1;
  2076. }
  2077. return ret;
  2078. }
  2079. #if defined _ALS_OnPlayerStreamOut
  2080. #undef OnPlayerStreamOut
  2081. #else
  2082. #define _ALS_OnPlayerStreamOut
  2083. #endif
  2084. #define OnPlayerStreamOut S@@_OnPlayerStreamOut
  2085. HOOK_FORWARD<PlayerStreamOut>
  2086. public OnVehicleStreamIn(vehicleid, forplayerid)
  2087. {
  2088. P:2("Hooks_OnVehicleStreamIn called: %d, %d", vehicleid, forplayerid);
  2089. new
  2090. end = _:YSI_g_sCallbackEnd[ALS_OnVehicleStreamIn],
  2091. start = _:YSI_g_sCallbackStart[ALS_OnVehicleStreamIn],
  2092. ret = ALS_R_VehicleStreamIn;
  2093. while (start++ != end)
  2094. {
  2095. #emit PUSH.S forplayerid
  2096. #emit PUSH.S vehicleid
  2097. #emit PUSH.C 8
  2098. #emit CONST.alt YSI_g_sCallbackAddresses
  2099. #emit LOAD.S.pri start
  2100. //#emit INC.pri
  2101. //#emit STOR.S.pri start
  2102. #emit LIDX
  2103. #emit MOVE.alt
  2104. #emit LCTRL 6
  2105. #emit ADD.C 24
  2106. #emit PUSH.pri
  2107. #emit MOVE.pri
  2108. #emit SCTRL 6
  2109. #emit MOVE.alt
  2110. #emit CONST.pri 0xFFFFFFFE
  2111. #emit AND
  2112. #emit PUSH.pri
  2113. #emit LOAD.S.pri ret
  2114. #emit AND
  2115. #emit POP.alt
  2116. #emit OR
  2117. #emit STOR.S.pri ret
  2118. if (ret < 0) return ret + 1;
  2119. }
  2120. return ret;
  2121. }
  2122. #if defined _ALS_OnVehicleStreamIn
  2123. #undef OnVehicleStreamIn
  2124. #else
  2125. #define _ALS_OnVehicleStreamIn
  2126. #endif
  2127. #define OnVehicleStreamIn S@@_OnVehicleStreamIn
  2128. HOOK_FORWARD<VehicleStreamIn>
  2129. public OnVehicleStreamOut(vehicleid, forplayerid)
  2130. {
  2131. P:2("Hooks_OnVehicleStreamOut called: %d, %d", vehicleid, forplayerid);
  2132. new
  2133. end = _:YSI_g_sCallbackEnd[ALS_OnVehicleStreamOut],
  2134. start = _:YSI_g_sCallbackStart[ALS_OnVehicleStreamOut],
  2135. ret = ALS_R_VehicleStreamOut;
  2136. while (start++ != end)
  2137. {
  2138. #emit PUSH.S forplayerid
  2139. #emit PUSH.S vehicleid
  2140. #emit PUSH.C 8
  2141. #emit CONST.alt YSI_g_sCallbackAddresses
  2142. #emit LOAD.S.pri start
  2143. //#emit INC.pri
  2144. //#emit STOR.S.pri start
  2145. #emit LIDX
  2146. #emit MOVE.alt
  2147. #emit LCTRL 6
  2148. #emit ADD.C 24
  2149. #emit PUSH.pri
  2150. #emit MOVE.pri
  2151. #emit SCTRL 6
  2152. #emit MOVE.alt
  2153. #emit CONST.pri 0xFFFFFFFE
  2154. #emit AND
  2155. #emit PUSH.pri
  2156. #emit LOAD.S.pri ret
  2157. #emit AND
  2158. #emit POP.alt
  2159. #emit OR
  2160. #emit STOR.S.pri ret
  2161. if (ret < 0) return ret + 1;
  2162. }
  2163. return ret;
  2164. }
  2165. #if defined _ALS_OnVehicleStreamOut
  2166. #undef OnVehicleStreamOut
  2167. #else
  2168. #define _ALS_OnVehicleStreamOut
  2169. #endif
  2170. #define OnVehicleStreamOut S@@_OnVehicleStreamOut
  2171. HOOK_FORWARD<VehicleStreamOut>
  2172. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  2173. {
  2174. P:2("Hooks_OnDialogResponse called: %d, %d, %d, %d, \"%s\"", playerid, dialogid, response, listitem, inputtext);
  2175. new
  2176. end = _:YSI_g_sCallbackEnd[ALS_OnDialogResponse],
  2177. start = _:YSI_g_sCallbackStart[ALS_OnDialogResponse],
  2178. ret = ALS_R_DialogResponse;
  2179. while (start++ != end)
  2180. {
  2181. #emit PUSH.S inputtext
  2182. #emit PUSH.S listitem
  2183. #emit PUSH.S response
  2184. #emit PUSH.S dialogid
  2185. #emit PUSH.S playerid
  2186. #emit PUSH.C 20
  2187. #emit CONST.alt YSI_g_sCallbackAddresses
  2188. #emit LOAD.S.pri start
  2189. //#emit INC.pri
  2190. //#emit STOR.S.pri start
  2191. #emit LIDX
  2192. #emit MOVE.alt
  2193. #emit LCTRL 6
  2194. #emit ADD.C 24
  2195. #emit PUSH.pri
  2196. #emit MOVE.pri
  2197. #emit SCTRL 6
  2198. #emit MOVE.alt
  2199. #emit CONST.pri 0xFFFFFFFE
  2200. #emit AND
  2201. #emit PUSH.pri
  2202. #emit LOAD.S.pri ret
  2203. #emit AND
  2204. #emit POP.alt
  2205. #emit OR
  2206. #emit STOR.S.pri ret
  2207. if (ret < 0) return ret + 1;
  2208. }
  2209. return ret;
  2210. }
  2211. #if defined _ALS_OnDialogResponse
  2212. #undef OnDialogResponse
  2213. #else
  2214. #define _ALS_OnDialogResponse
  2215. #endif
  2216. #define OnDialogResponse S@@_OnDialogResponse
  2217. HOOK_FORWARD<DialogResponse>
  2218. public OnPlayerClickPlayer(playerid, clickedplayerid, source)
  2219. {
  2220. P:2("Hooks_OnPlayerClickPlayer called: %d, %d, %d", playerid, clickedplayerid, source);
  2221. new
  2222. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerClickPlayer],
  2223. start = _:YSI_g_sCallbackStart[ALS_OnPlayerClickPlayer],
  2224. ret = ALS_R_PlayerClickPlayer;
  2225. while (start++ != end)
  2226. {
  2227. #emit PUSH.S source
  2228. #emit PUSH.S clickedplayerid
  2229. #emit PUSH.S playerid
  2230. #emit PUSH.C 12
  2231. #emit CONST.alt YSI_g_sCallbackAddresses
  2232. #emit LOAD.S.pri start
  2233. //#emit INC.pri
  2234. //#emit STOR.S.pri start
  2235. #emit LIDX
  2236. #emit MOVE.alt
  2237. #emit LCTRL 6
  2238. #emit ADD.C 24
  2239. #emit PUSH.pri
  2240. #emit MOVE.pri
  2241. #emit SCTRL 6
  2242. #emit MOVE.alt
  2243. #emit CONST.pri 0xFFFFFFFE
  2244. #emit AND
  2245. #emit PUSH.pri
  2246. #emit LOAD.S.pri ret
  2247. #emit AND
  2248. #emit POP.alt
  2249. #emit OR
  2250. #emit STOR.S.pri ret
  2251. if (ret < 0) return ret + 1;
  2252. }
  2253. return ret;
  2254. }
  2255. #if defined _ALS_OnPlayerClickPlayer
  2256. #undef OnPlayerClickPlayer
  2257. #else
  2258. #define _ALS_OnPlayerClickPlayer
  2259. #endif
  2260. #define OnPlayerClickPlayer S@@_OnPlayerClickPlayer
  2261. HOOK_FORWARD<PlayerClickPlayer>
  2262. public OnPlayerTakeDamage(playerid, issuerid, Float:amount, weaponid, bodypart)
  2263. {
  2264. P:2("Hooks_OnPlayerTakeDamage called: %d, %d, %f, %d, %d", playerid, issuerid, Float:amount, weaponid, bodypart);
  2265. new
  2266. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerTakeDamage],
  2267. start = _:YSI_g_sCallbackStart[ALS_OnPlayerTakeDamage],
  2268. ret = ALS_R_PlayerTakeDamage;
  2269. while (start++ != end)
  2270. {
  2271. #emit PUSH.S bodypart
  2272. #emit PUSH.S weaponid
  2273. #emit PUSH.S amount
  2274. #emit PUSH.S issuerid
  2275. #emit PUSH.S playerid
  2276. #emit PUSH.C 20
  2277. #emit CONST.alt YSI_g_sCallbackAddresses
  2278. #emit LOAD.S.pri start
  2279. //#emit INC.pri
  2280. //#emit STOR.S.pri start
  2281. #emit LIDX
  2282. #emit MOVE.alt
  2283. #emit LCTRL 6
  2284. #emit ADD.C 24
  2285. #emit PUSH.pri
  2286. #emit MOVE.pri
  2287. #emit SCTRL 6
  2288. #emit MOVE.alt
  2289. #emit CONST.pri 0xFFFFFFFE
  2290. #emit AND
  2291. #emit PUSH.pri
  2292. #emit LOAD.S.pri ret
  2293. #emit AND
  2294. #emit POP.alt
  2295. #emit OR
  2296. #emit STOR.S.pri ret
  2297. if (ret < 0) return ret + 1;
  2298. }
  2299. return ret;
  2300. }
  2301. #if defined _ALS_OnPlayerTakeDamage
  2302. #undef OnPlayerTakeDamage
  2303. #else
  2304. #define _ALS_OnPlayerTakeDamage
  2305. #endif
  2306. #define OnPlayerTakeDamage S@@_OnPlayerTakeDamage
  2307. HOOK_FORWARD<PlayerTakeDamage>
  2308. public OnPlayerGiveDamage(playerid, damagedid, Float:amount, weaponid, bodypart)
  2309. {
  2310. P:2("Hooks_OnPlayerGiveDamage called: %d, %d, %f, %d, %d", playerid, damagedid, Float:amount, weaponid, bodypart);
  2311. new
  2312. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerGiveDamage],
  2313. start = _:YSI_g_sCallbackStart[ALS_OnPlayerGiveDamage],
  2314. ret = ALS_R_PlayerGiveDamage;
  2315. while (start++ != end)
  2316. {
  2317. #emit PUSH.S bodypart
  2318. #emit PUSH.S weaponid
  2319. #emit PUSH.S amount
  2320. #emit PUSH.S damagedid
  2321. #emit PUSH.S playerid
  2322. #emit PUSH.C 20
  2323. #emit CONST.alt YSI_g_sCallbackAddresses
  2324. #emit LOAD.S.pri start
  2325. //#emit INC.pri
  2326. //#emit STOR.S.pri start
  2327. #emit LIDX
  2328. #emit MOVE.alt
  2329. #emit LCTRL 6
  2330. #emit ADD.C 24
  2331. #emit PUSH.pri
  2332. #emit MOVE.pri
  2333. #emit SCTRL 6
  2334. #emit MOVE.alt
  2335. #emit CONST.pri 0xFFFFFFFE
  2336. #emit AND
  2337. #emit PUSH.pri
  2338. #emit LOAD.S.pri ret
  2339. #emit AND
  2340. #emit POP.alt
  2341. #emit OR
  2342. #emit STOR.S.pri ret
  2343. if (ret < 0) return ret + 1;
  2344. }
  2345. return ret;
  2346. }
  2347. #if defined _ALS_OnPlayerGiveDamage
  2348. #undef OnPlayerGiveDamage
  2349. #else
  2350. #define _ALS_OnPlayerGiveDamage
  2351. #endif
  2352. #define OnPlayerGiveDamage S@@_OnPlayerGiveDamage
  2353. HOOK_FORWARD<PlayerGiveDamage>
  2354. #if !defined _ALS_OnPlayerLogin
  2355. forward OnPlayerLogin(playerid, uid);
  2356. #endif
  2357. public OnPlayerLogin(playerid, uid)
  2358. {
  2359. P:2("Hooks_OnPlayerLogin called: %d, %d", playerid, uid);
  2360. new
  2361. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerLogin],
  2362. start = _:YSI_g_sCallbackStart[ALS_OnPlayerLogin],
  2363. ret = ALS_R_PlayerLogin;
  2364. while (start++ != end)
  2365. {
  2366. #emit PUSH.S uid
  2367. #emit PUSH.S playerid
  2368. #emit PUSH.C 8
  2369. #emit CONST.alt YSI_g_sCallbackAddresses
  2370. #emit LOAD.S.pri start
  2371. //#emit INC.pri
  2372. //#emit STOR.S.pri start
  2373. #emit LIDX
  2374. #emit MOVE.alt
  2375. #emit LCTRL 6
  2376. #emit ADD.C 24
  2377. #emit PUSH.pri
  2378. #emit MOVE.pri
  2379. #emit SCTRL 6
  2380. #emit MOVE.alt
  2381. #emit CONST.pri 0xFFFFFFFE
  2382. #emit AND
  2383. #emit PUSH.pri
  2384. #emit LOAD.S.pri ret
  2385. #emit AND
  2386. #emit POP.alt
  2387. #emit OR
  2388. #emit STOR.S.pri ret
  2389. if (ret < 0) return ret + 1;
  2390. }
  2391. return ret;
  2392. }
  2393. #if defined _ALS_OnPlayerLogin
  2394. #undef OnPlayerLogin
  2395. #else
  2396. #define _ALS_OnPlayerLogin
  2397. #endif
  2398. #define OnPlayerLogin S@@_OnPlayerLogin
  2399. HOOK_FORWARD<PlayerLogin>
  2400. #if !defined _ALS_OnPlayerLogout
  2401. forward OnPlayerLogout(playerid, uid);
  2402. #endif
  2403. public OnPlayerLogout(playerid, uid)
  2404. {
  2405. P:2("Hooks_OnPlayerLogout called: %d, %d", playerid, uid);
  2406. new
  2407. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerLogout],
  2408. start = _:YSI_g_sCallbackStart[ALS_OnPlayerLogout],
  2409. ret = ALS_R_PlayerLogout;
  2410. while (start++ != end)
  2411. {
  2412. #emit PUSH.S uid
  2413. #emit PUSH.S playerid
  2414. #emit PUSH.C 8
  2415. #emit CONST.alt YSI_g_sCallbackAddresses
  2416. #emit LOAD.S.pri start
  2417. //#emit INC.pri
  2418. //#emit STOR.S.pri start
  2419. #emit LIDX
  2420. #emit MOVE.alt
  2421. #emit LCTRL 6
  2422. #emit ADD.C 24
  2423. #emit PUSH.pri
  2424. #emit MOVE.pri
  2425. #emit SCTRL 6
  2426. #emit MOVE.alt
  2427. #emit CONST.pri 0xFFFFFFFE
  2428. #emit AND
  2429. #emit PUSH.pri
  2430. #emit LOAD.S.pri ret
  2431. #emit AND
  2432. #emit POP.alt
  2433. #emit OR
  2434. #emit STOR.S.pri ret
  2435. if (ret < 0) return ret + 1;
  2436. }
  2437. return ret;
  2438. }
  2439. #if defined _ALS_OnPlayerLogout
  2440. #undef OnPlayerLogout
  2441. #else
  2442. #define _ALS_OnPlayerLogout
  2443. #endif
  2444. #define OnPlayerLogout S@@_OnPlayerLogout
  2445. HOOK_FORWARD<PlayerLogout>
  2446. #if !defined _ALS_OnPlayerEnterArea
  2447. forward OnPlayerEnterArea(playerid, areaid);
  2448. #endif
  2449. public OnPlayerEnterArea(playerid, areaid)
  2450. {
  2451. P:2("Hooks_OnPlayerEnterArea called: %d, %d", playerid, areaid);
  2452. new
  2453. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerEnterArea],
  2454. start = _:YSI_g_sCallbackStart[ALS_OnPlayerEnterArea],
  2455. ret = ALS_R_PlayerEnterArea;
  2456. while (start++ != end)
  2457. {
  2458. #emit PUSH.S areaid
  2459. #emit PUSH.S playerid
  2460. #emit PUSH.C 8
  2461. #emit CONST.alt YSI_g_sCallbackAddresses
  2462. #emit LOAD.S.pri start
  2463. //#emit INC.pri
  2464. //#emit STOR.S.pri start
  2465. #emit LIDX
  2466. #emit MOVE.alt
  2467. #emit LCTRL 6
  2468. #emit ADD.C 24
  2469. #emit PUSH.pri
  2470. #emit MOVE.pri
  2471. #emit SCTRL 6
  2472. #emit MOVE.alt
  2473. #emit CONST.pri 0xFFFFFFFE
  2474. #emit AND
  2475. #emit PUSH.pri
  2476. #emit LOAD.S.pri ret
  2477. #emit AND
  2478. #emit POP.alt
  2479. #emit OR
  2480. #emit STOR.S.pri ret
  2481. if (ret < 0) return ret + 1;
  2482. }
  2483. return ret;
  2484. }
  2485. #if defined _ALS_OnPlayerEnterArea
  2486. #undef OnPlayerEnterArea
  2487. #else
  2488. #define _ALS_OnPlayerEnterArea
  2489. #endif
  2490. #define OnPlayerEnterArea S@@_OnPlayerEnterArea
  2491. HOOK_FORWARD<PlayerEnterArea>
  2492. #if !defined _ALS_OnPlayerLeaveArea
  2493. forward OnPlayerLeaveArea(playerid, areaid);
  2494. #endif
  2495. public OnPlayerLeaveArea(playerid, areaid)
  2496. {
  2497. P:2("Hooks_OnPlayerLeaveArea called: %d, %d", playerid, areaid);
  2498. new
  2499. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerLeaveArea],
  2500. start = _:YSI_g_sCallbackStart[ALS_OnPlayerLeaveArea],
  2501. ret = ALS_R_PlayerLeaveArea;
  2502. while (start++ != end)
  2503. {
  2504. #emit PUSH.S areaid
  2505. #emit PUSH.S playerid
  2506. #emit PUSH.C 8
  2507. #emit CONST.alt YSI_g_sCallbackAddresses
  2508. #emit LOAD.S.pri start
  2509. //#emit INC.pri
  2510. //#emit STOR.S.pri start
  2511. #emit LIDX
  2512. #emit MOVE.alt
  2513. #emit LCTRL 6
  2514. #emit ADD.C 24
  2515. #emit PUSH.pri
  2516. #emit MOVE.pri
  2517. #emit SCTRL 6
  2518. #emit MOVE.alt
  2519. #emit CONST.pri 0xFFFFFFFE
  2520. #emit AND
  2521. #emit PUSH.pri
  2522. #emit LOAD.S.pri ret
  2523. #emit AND
  2524. #emit POP.alt
  2525. #emit OR
  2526. #emit STOR.S.pri ret
  2527. if (ret < 0) return ret + 1;
  2528. }
  2529. return ret;
  2530. }
  2531. #if defined _ALS_OnPlayerLeaveArea
  2532. #undef OnPlayerLeaveArea
  2533. #else
  2534. #define _ALS_OnPlayerLeaveArea
  2535. #endif
  2536. #define OnPlayerLeaveArea S@@_OnPlayerLeaveArea
  2537. HOOK_FORWARD<PlayerLeaveArea>
  2538. #if !defined _ALS_OnPlayerFinishRace
  2539. forward OnPlayerFinishRace(playerid, race, position, prize, time);
  2540. #endif
  2541. public OnPlayerFinishRace(playerid, race, position, prize, time)
  2542. {
  2543. P:2("Hooks_OnPlayerFinishRace called: %d, %d, %d, %d, %d", playerid, race, position, prize, time);
  2544. new
  2545. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerFinishRace],
  2546. start = _:YSI_g_sCallbackStart[ALS_OnPlayerFinishRace],
  2547. ret = ALS_R_PlayerFinishRace;
  2548. while (start++ != end)
  2549. {
  2550. #emit PUSH.S time
  2551. #emit PUSH.S prize
  2552. #emit PUSH.S position
  2553. #emit PUSH.S race
  2554. #emit PUSH.S playerid
  2555. #emit PUSH.C 20
  2556. #emit CONST.alt YSI_g_sCallbackAddresses
  2557. #emit LOAD.S.pri start
  2558. //#emit INC.pri
  2559. //#emit STOR.S.pri start
  2560. #emit LIDX
  2561. #emit MOVE.alt
  2562. #emit LCTRL 6
  2563. #emit ADD.C 24
  2564. #emit PUSH.pri
  2565. #emit MOVE.pri
  2566. #emit SCTRL 6
  2567. #emit MOVE.alt
  2568. #emit CONST.pri 0xFFFFFFFE
  2569. #emit AND
  2570. #emit PUSH.pri
  2571. #emit LOAD.S.pri ret
  2572. #emit AND
  2573. #emit POP.alt
  2574. #emit OR
  2575. #emit STOR.S.pri ret
  2576. if (ret < 0) return ret + 1;
  2577. }
  2578. return ret;
  2579. }
  2580. #if defined _ALS_OnPlayerFinishRace
  2581. #undef OnPlayerFinishRace
  2582. #else
  2583. #define _ALS_OnPlayerFinishRace
  2584. #endif
  2585. #define OnPlayerFinishRace S@@_OnPlayerFinishRace
  2586. HOOK_FORWARD<PlayerFinishRace>
  2587. #if !defined _ALS_OnPlayerExitRace
  2588. forward OnPlayerExitRace(playerid, race);
  2589. #endif
  2590. public OnPlayerExitRace(playerid, race)
  2591. {
  2592. P:2("Hooks_OnPlayerExitRace called: %d, %d", playerid, race);
  2593. new
  2594. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerExitRace],
  2595. start = _:YSI_g_sCallbackStart[ALS_OnPlayerExitRace],
  2596. ret = ALS_R_PlayerExitRace;
  2597. while (start++ != end)
  2598. {
  2599. #emit PUSH.S race
  2600. #emit PUSH.S playerid
  2601. #emit PUSH.C 8
  2602. #emit CONST.alt YSI_g_sCallbackAddresses
  2603. #emit LOAD.S.pri start
  2604. //#emit INC.pri
  2605. //#emit STOR.S.pri start
  2606. #emit LIDX
  2607. #emit MOVE.alt
  2608. #emit LCTRL 6
  2609. #emit ADD.C 24
  2610. #emit PUSH.pri
  2611. #emit MOVE.pri
  2612. #emit SCTRL 6
  2613. #emit MOVE.alt
  2614. #emit CONST.pri 0xFFFFFFFE
  2615. #emit AND
  2616. #emit PUSH.pri
  2617. #emit LOAD.S.pri ret
  2618. #emit AND
  2619. #emit POP.alt
  2620. #emit OR
  2621. #emit STOR.S.pri ret
  2622. if (ret < 0) return ret + 1;
  2623. }
  2624. return ret;
  2625. }
  2626. #if defined _ALS_OnPlayerExitRace
  2627. #undef OnPlayerExitRace
  2628. #else
  2629. #define _ALS_OnPlayerExitRace
  2630. #endif
  2631. #define OnPlayerExitRace S@@_OnPlayerExitRace
  2632. HOOK_FORWARD<PlayerExitRace>
  2633. #if !defined _ALS_OnRaceEnd
  2634. forward OnRaceEnd(race);
  2635. #endif
  2636. public OnRaceEnd(race)
  2637. {
  2638. P:2("Hooks_OnRaceEnd called: %d", race);
  2639. new
  2640. end = _:YSI_g_sCallbackEnd[ALS_OnRaceEnd],
  2641. start = _:YSI_g_sCallbackStart[ALS_OnRaceEnd],
  2642. ret = ALS_R_RaceEnd;
  2643. while (start++ != end)
  2644. {
  2645. #emit PUSH.S race
  2646. #emit PUSH.C 4
  2647. #emit CONST.alt YSI_g_sCallbackAddresses
  2648. #emit LOAD.S.pri start
  2649. //#emit INC.pri
  2650. //#emit STOR.S.pri start
  2651. #emit LIDX
  2652. #emit MOVE.alt
  2653. #emit LCTRL 6
  2654. #emit ADD.C 24
  2655. #emit PUSH.pri
  2656. #emit MOVE.pri
  2657. #emit SCTRL 6
  2658. #emit MOVE.alt
  2659. #emit CONST.pri 0xFFFFFFFE
  2660. #emit AND
  2661. #emit PUSH.pri
  2662. #emit LOAD.S.pri ret
  2663. #emit AND
  2664. #emit POP.alt
  2665. #emit OR
  2666. #emit STOR.S.pri ret
  2667. if (ret < 0) return ret + 1;
  2668. }
  2669. return ret;
  2670. }
  2671. #if defined _ALS_OnRaceEnd
  2672. #undef OnRaceEnd
  2673. #else
  2674. #define _ALS_OnRaceEnd
  2675. #endif
  2676. #define OnRaceEnd S@@_OnRaceEnd
  2677. HOOK_FORWARD<RaceEnd>
  2678. #if !defined OnPlayerClickMap
  2679. #undef ALS_MAKE
  2680. #endinput
  2681. #endif
  2682. public OnPlayerClickMap(playerid, Float:fX, Float:fY, Float:fZ)
  2683. {
  2684. P:2("Hooks_OnPlayerClickMap called: %d, %f, %f, %f", playerid, fX, fY, fZ);
  2685. new
  2686. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerClickMap],
  2687. start = _:YSI_g_sCallbackStart[ALS_OnPlayerClickMap],
  2688. ret = ALS_R_PlayerClickMap;
  2689. while (start++ != end)
  2690. {
  2691. #emit PUSH.S fZ
  2692. #emit PUSH.S fY
  2693. #emit PUSH.S fX
  2694. #emit PUSH.S playerid
  2695. #emit PUSH.C 16
  2696. #emit CONST.alt YSI_g_sCallbackAddresses
  2697. #emit LOAD.S.pri start
  2698. //#emit INC.pri
  2699. //#emit STOR.S.pri start
  2700. #emit LIDX
  2701. #emit MOVE.alt
  2702. #emit LCTRL 6
  2703. #emit ADD.C 24
  2704. #emit PUSH.pri
  2705. #emit MOVE.pri
  2706. #emit SCTRL 6
  2707. #emit MOVE.alt
  2708. #emit CONST.pri 0xFFFFFFFE
  2709. #emit AND
  2710. #emit PUSH.pri
  2711. #emit LOAD.S.pri ret
  2712. #emit AND
  2713. #emit POP.alt
  2714. #emit OR
  2715. #emit STOR.S.pri ret
  2716. if (ret < 0) return ret + 1;
  2717. }
  2718. return ret;
  2719. }
  2720. #if defined _ALS_OnPlayerClickMap
  2721. #undef OnPlayerClickMap
  2722. #else
  2723. #define _ALS_OnPlayerClickMap
  2724. #endif
  2725. #define OnPlayerClickMap S@@_OnPlayerClickMap
  2726. HOOK_FORWARD<PlayerClickMap>
  2727. public OnPlayerClickTextDraw(playerid, Text:clickedid)
  2728. {
  2729. P:2("Hooks_OnPlayerClickTextDraw called: %d, %d", playerid, _:clickedid);
  2730. new
  2731. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerClickTextDraw],
  2732. start = _:YSI_g_sCallbackStart[ALS_OnPlayerClickTextDraw],
  2733. ret = ALS_R_PlayerClickTextDraw;
  2734. while (start++ != end)
  2735. {
  2736. #emit PUSH.S clickedid
  2737. #emit PUSH.S playerid
  2738. #emit PUSH.C 8
  2739. #emit CONST.alt YSI_g_sCallbackAddresses
  2740. #emit LOAD.S.pri start
  2741. //#emit INC.pri
  2742. //#emit STOR.S.pri start
  2743. #emit LIDX
  2744. #emit MOVE.alt
  2745. #emit LCTRL 6
  2746. #emit ADD.C 24
  2747. #emit PUSH.pri
  2748. #emit MOVE.pri
  2749. #emit SCTRL 6
  2750. #emit MOVE.alt
  2751. #emit CONST.pri 0xFFFFFFFE
  2752. #emit AND
  2753. #emit PUSH.pri
  2754. #emit LOAD.S.pri ret
  2755. #emit AND
  2756. #emit POP.alt
  2757. #emit OR
  2758. #emit STOR.S.pri ret
  2759. if (ret < 0) return ret + 1;
  2760. }
  2761. return ret;
  2762. }
  2763. #if defined _ALS_OnPlayerClickTextDraw
  2764. #undef OnPlayerClickTextDraw
  2765. #else
  2766. #define _ALS_OnPlayerClickTextDraw
  2767. #endif
  2768. #define OnPlayerClickTextDraw S@@_OnPlayerClickTextDraw
  2769. HOOK_FORWARD<PlayerClickTextDraw>
  2770. public OnPlayerClickPlayerTextDraw(playerid, PlayerText:playertextid)
  2771. {
  2772. P:2("Hooks_OnPlayerClickPlayerTextDraw called: %d, %d", playerid, _:playertextid);
  2773. new
  2774. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerClickPlayerTextDraw],
  2775. start = _:YSI_g_sCallbackStart[ALS_OnPlayerClickPlayerTextDraw],
  2776. ret = ALS_R_PlayerClickPlayerTextDraw;
  2777. while (start++ != end)
  2778. {
  2779. #emit PUSH.S playertextid
  2780. #emit PUSH.S playerid
  2781. #emit PUSH.C 8
  2782. #emit CONST.alt YSI_g_sCallbackAddresses
  2783. #emit LOAD.S.pri start
  2784. //#emit INC.pri
  2785. //#emit STOR.S.pri start
  2786. #emit LIDX
  2787. #emit MOVE.alt
  2788. #emit LCTRL 6
  2789. #emit ADD.C 24
  2790. #emit PUSH.pri
  2791. #emit MOVE.pri
  2792. #emit SCTRL 6
  2793. #emit MOVE.alt
  2794. #emit CONST.pri 0xFFFFFFFE
  2795. #emit AND
  2796. #emit PUSH.pri
  2797. #emit LOAD.S.pri ret
  2798. #emit AND
  2799. #emit POP.alt
  2800. #emit OR
  2801. #emit STOR.S.pri ret
  2802. if (ret < 0) return ret + 1;
  2803. }
  2804. return ret;
  2805. }
  2806. #if defined _ALS_OnPlayerClickPlayerTD
  2807. #undef OnPlayerClickPlayerTextDraw
  2808. #else
  2809. #define _ALS_OnPlayerClickPlayerTD
  2810. #endif
  2811. #define OnPlayerClickPlayerTextDraw S@@_OnPlayerClickPlayerTextDraw
  2812. HOOK_FORWARD<PlayerClickPlayerTextDraw>
  2813. public OnPlayerEditObject(playerid, playerobject, objectid, response, Float:fX, Float:fY, Float:fZ, Float:fRotX, Float:fRotY, Float:fRotZ)
  2814. {
  2815. 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);
  2816. new
  2817. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerEditObject],
  2818. start = _:YSI_g_sCallbackStart[ALS_OnPlayerEditObject],
  2819. ret = ALS_R_PlayerEditObject;
  2820. while (start++ != end)
  2821. {
  2822. #emit PUSH.S fRotZ
  2823. #emit PUSH.S fRotY
  2824. #emit PUSH.S fRotX
  2825. #emit PUSH.S fZ
  2826. #emit PUSH.S fY
  2827. #emit PUSH.S fX
  2828. #emit PUSH.S response
  2829. #emit PUSH.S objectid
  2830. #emit PUSH.S playerobject
  2831. #emit PUSH.S playerid
  2832. #emit PUSH.C 40
  2833. #emit CONST.alt YSI_g_sCallbackAddresses
  2834. #emit LOAD.S.pri start
  2835. //#emit INC.pri
  2836. //#emit STOR.S.pri start
  2837. #emit LIDX
  2838. #emit MOVE.alt
  2839. #emit LCTRL 6
  2840. #emit ADD.C 24
  2841. #emit PUSH.pri
  2842. #emit MOVE.pri
  2843. #emit SCTRL 6
  2844. #emit MOVE.alt
  2845. #emit CONST.pri 0xFFFFFFFE
  2846. #emit AND
  2847. #emit PUSH.pri
  2848. #emit LOAD.S.pri ret
  2849. #emit AND
  2850. #emit POP.alt
  2851. #emit OR
  2852. #emit STOR.S.pri ret
  2853. if (ret < 0) return ret + 1;
  2854. }
  2855. return ret;
  2856. }
  2857. #if defined _ALS_OnPlayerEditObject
  2858. #undef OnPlayerEditObject
  2859. #else
  2860. #define _ALS_OnPlayerEditObject
  2861. #endif
  2862. #define OnPlayerEditObject S@@_OnPlayerEditObject
  2863. HOOK_FORWARD<PlayerEditObject>
  2864. 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)
  2865. {
  2866. 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);
  2867. new
  2868. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerEditAttachedObject],
  2869. start = _:YSI_g_sCallbackStart[ALS_OnPlayerEditAttachedObject],
  2870. ret = ALS_R_PlayerEditAttachedObject;
  2871. while (start++ != end)
  2872. {
  2873. #emit PUSH.S fScaleZ
  2874. #emit PUSH.S fScaleY
  2875. #emit PUSH.S fScaleX
  2876. #emit PUSH.S fRotZ
  2877. #emit PUSH.S fRotY
  2878. #emit PUSH.S fRotX
  2879. #emit PUSH.S fOffsetZ
  2880. #emit PUSH.S fOffsetY
  2881. #emit PUSH.S fOffsetX
  2882. #emit PUSH.S boneid
  2883. #emit PUSH.S modelid
  2884. #emit PUSH.S index
  2885. #emit PUSH.S response
  2886. #emit PUSH.S playerid
  2887. #emit PUSH.C 56
  2888. #emit CONST.alt YSI_g_sCallbackAddresses
  2889. #emit LOAD.S.pri start
  2890. //#emit INC.pri
  2891. //#emit STOR.S.pri start
  2892. #emit LIDX
  2893. #emit MOVE.alt
  2894. #emit LCTRL 6
  2895. #emit ADD.C 24
  2896. #emit PUSH.pri
  2897. #emit MOVE.pri
  2898. #emit SCTRL 6
  2899. #emit MOVE.alt
  2900. #emit CONST.pri 0xFFFFFFFE
  2901. #emit AND
  2902. #emit PUSH.pri
  2903. #emit LOAD.S.pri ret
  2904. #emit AND
  2905. #emit POP.alt
  2906. #emit OR
  2907. #emit STOR.S.pri ret
  2908. if (ret < 0) return ret + 1;
  2909. }
  2910. return ret;
  2911. }
  2912. #if defined _ALS_OnPlayerEditAttachedObject
  2913. #undef OnPlayerEditAttachedObject
  2914. #else
  2915. #define _ALS_OnPlayerEditAttachedObject
  2916. #endif
  2917. #define OnPlayerEditAttachedObject S@@_OnPlayerEditAttachedObject
  2918. HOOK_FORWARD<PlayerEditAttachedObject>
  2919. //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);
  2920. //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;}
  2921. //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;}
  2922. public OnPlayerSelectObject(playerid, type, objectid, modelid, Float:fX, Float:fY, Float:fZ)
  2923. {
  2924. P:2("Hooks_OnPlayerSelectObject called: %d, %d, %d, %d, %f, %f, %f", playerid, type, objectid, modelid, fX, fY, fZ);
  2925. new
  2926. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerSelectObject],
  2927. start = _:YSI_g_sCallbackStart[ALS_OnPlayerSelectObject],
  2928. ret = ALS_R_PlayerSelectObject;
  2929. while (start++ != end)
  2930. {
  2931. #emit PUSH.S fZ
  2932. #emit PUSH.S fY
  2933. #emit PUSH.S fX
  2934. #emit PUSH.S modelid
  2935. #emit PUSH.S objectid
  2936. #emit PUSH.S type
  2937. #emit PUSH.S playerid
  2938. #emit PUSH.C 28
  2939. #emit CONST.alt YSI_g_sCallbackAddresses
  2940. #emit LOAD.S.pri start
  2941. //#emit INC.pri
  2942. //#emit STOR.S.pri start
  2943. #emit LIDX
  2944. #emit MOVE.alt
  2945. #emit LCTRL 6
  2946. #emit ADD.C 24
  2947. #emit PUSH.pri
  2948. #emit MOVE.pri
  2949. #emit SCTRL 6
  2950. #emit MOVE.alt
  2951. #emit CONST.pri 0xFFFFFFFE
  2952. #emit AND
  2953. #emit PUSH.pri
  2954. #emit LOAD.S.pri ret
  2955. #emit AND
  2956. #emit POP.alt
  2957. #emit OR
  2958. #emit STOR.S.pri ret
  2959. if (ret < 0) return ret + 1;
  2960. }
  2961. return ret;
  2962. }
  2963. #if defined _ALS_OnPlayerSelectObject
  2964. #undef OnPlayerSelectObject
  2965. #else
  2966. #define _ALS_OnPlayerSelectObject
  2967. #endif
  2968. #define OnPlayerSelectObject S@@_OnPlayerSelectObject
  2969. HOOK_FORWARD<PlayerSelectObject>
  2970. // Allow hooking of streamer plugin callbacks.
  2971. #if !defined _YSI_PLUGINS_STREAMER
  2972. #undef ALS_MAKE
  2973. #endinput
  2974. #endif
  2975. public OnDynamicObjectMoved(objectid)
  2976. {
  2977. P:2("Hooks_OnDynamicObjectMoved called: %d", objectid);
  2978. new
  2979. end = _:YSI_g_sCallbackEnd[ALS_OnDynamicObjectMoved],
  2980. start = _:YSI_g_sCallbackStart[ALS_OnDynamicObjectMoved],
  2981. ret = ALS_R_DynamicObjectMoved;
  2982. while (start++ != end)
  2983. {
  2984. #emit PUSH.S objectid
  2985. #emit PUSH.C 4
  2986. #emit CONST.alt YSI_g_sCallbackAddresses
  2987. #emit LOAD.S.pri start
  2988. //#emit INC.pri
  2989. //#emit STOR.S.pri start
  2990. #emit LIDX
  2991. #emit MOVE.alt
  2992. #emit LCTRL 6
  2993. #emit ADD.C 24
  2994. #emit PUSH.pri
  2995. #emit MOVE.pri
  2996. #emit SCTRL 6
  2997. #emit MOVE.alt
  2998. #emit CONST.pri 0xFFFFFFFE
  2999. #emit AND
  3000. #emit PUSH.pri
  3001. #emit LOAD.S.pri ret
  3002. #emit AND
  3003. #emit POP.alt
  3004. #emit OR
  3005. #emit STOR.S.pri ret
  3006. if (ret < 0) return ret + 1;
  3007. }
  3008. return ret;
  3009. }
  3010. #if defined _ALS_OnDynamicObjectMoved
  3011. #undef OnDynamicObjectMoved
  3012. #else
  3013. #define _ALS_OnDynamicObjectMoved
  3014. #endif
  3015. #define OnDynamicObjectMoved S@@_OnDynamicObjectMoved
  3016. HOOK_FORWARD<DynamicObjectMoved>
  3017. public OnPlayerEditDynamicObject(playerid, objectid, response, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz)
  3018. {
  3019. P:2("Hooks_OnPlayerEditDynamicObject called: %d, %d, %d, %f, %f, %f, %f, %f, %f", playerid, objectid, response, x, y, z, rx, ry, rz);
  3020. new
  3021. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerEditDynamicObject],
  3022. start = _:YSI_g_sCallbackStart[ALS_OnPlayerEditDynamicObject],
  3023. ret = ALS_R_PlayerEditDynamicObject;
  3024. while (start++ != end)
  3025. {
  3026. #emit PUSH.S rz
  3027. #emit PUSH.S ry
  3028. #emit PUSH.S rx
  3029. #emit PUSH.S z
  3030. #emit PUSH.S y
  3031. #emit PUSH.S x
  3032. #emit PUSH.S response
  3033. #emit PUSH.S objectid
  3034. #emit PUSH.S playerid
  3035. #emit PUSH.C 36
  3036. #emit CONST.alt YSI_g_sCallbackAddresses
  3037. #emit LOAD.S.pri start
  3038. //#emit INC.pri
  3039. //#emit STOR.S.pri start
  3040. #emit LIDX
  3041. #emit MOVE.alt
  3042. #emit LCTRL 6
  3043. #emit ADD.C 24
  3044. #emit PUSH.pri
  3045. #emit MOVE.pri
  3046. #emit SCTRL 6
  3047. #emit MOVE.alt
  3048. #emit CONST.pri 0xFFFFFFFE
  3049. #emit AND
  3050. #emit PUSH.pri
  3051. #emit LOAD.S.pri ret
  3052. #emit AND
  3053. #emit POP.alt
  3054. #emit OR
  3055. #emit STOR.S.pri ret
  3056. if (ret < 0) return ret + 1;
  3057. }
  3058. return ret;
  3059. }
  3060. #if defined _ALS_OnPlayerEditDynamicObject
  3061. #undef OnPlayerEditDynamicObject
  3062. #else
  3063. #define _ALS_OnPlayerEditDynamicObject
  3064. #endif
  3065. #define OnPlayerEditDynamicObject S@@_OnPlayerEditDynamicObject
  3066. HOOK_FORWARD<PlayerEditDynamicObject>
  3067. //forward S@@_OnPlayerEditDynamicObject(playerid, objectid, response, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz);
  3068. //public S@@_OnPlayerEditDynamicObject(playerid, objectid, response, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz)<_ALS_:unhooked>{return 1;}
  3069. //public S@@_OnPlayerEditDynamicObject(playerid, objectid, response, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz)<>{return 1;}
  3070. public OnPlayerSelectDynamicObject(playerid, objectid, modelid, Float:x, Float:y, Float:z)
  3071. {
  3072. P:2("Hooks_OnPlayerSelectDynamicObject called: %d, %d, %d, %f, %f, %f", playerid, objectid, modelid, x, y, z);
  3073. new
  3074. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerSelectDynamicObject],
  3075. start = _:YSI_g_sCallbackStart[ALS_OnPlayerSelectDynamicObject],
  3076. ret = ALS_R_PlayerSelectDynamicObject;
  3077. while (start++ != end)
  3078. {
  3079. #emit PUSH.S z
  3080. #emit PUSH.S y
  3081. #emit PUSH.S x
  3082. #emit PUSH.S modelid
  3083. #emit PUSH.S objectid
  3084. #emit PUSH.S playerid
  3085. #emit PUSH.C 24
  3086. #emit CONST.alt YSI_g_sCallbackAddresses
  3087. #emit LOAD.S.pri start
  3088. //#emit INC.pri
  3089. //#emit STOR.S.pri start
  3090. #emit LIDX
  3091. #emit MOVE.alt
  3092. #emit LCTRL 6
  3093. #emit ADD.C 24
  3094. #emit PUSH.pri
  3095. #emit MOVE.pri
  3096. #emit SCTRL 6
  3097. #emit MOVE.alt
  3098. #emit CONST.pri 0xFFFFFFFE
  3099. #emit AND
  3100. #emit PUSH.pri
  3101. #emit LOAD.S.pri ret
  3102. #emit AND
  3103. #emit POP.alt
  3104. #emit OR
  3105. #emit STOR.S.pri ret
  3106. if (ret < 0) return ret + 1;
  3107. }
  3108. return ret;
  3109. }
  3110. #if defined _ALS_OnPlayerSelectDynamicObj
  3111. #undef OnPlayerSelectDynamicObject
  3112. #else
  3113. #define _ALS_OnPlayerSelectDynamicObj
  3114. #endif
  3115. #define OnPlayerSelectDynamicObject S@@_OnPlayerSelectDynamicObject
  3116. HOOK_FORWARD<PlayerSelectDynamicObject>
  3117. //forward S@@_OnPlayerEditDynamicObject(playerid, objectid, modelid, Float:x, Float:y, Float:z);
  3118. //public S@@_OnPlayerEditDynamicObject(playerid, objectid, modelid, Float:x, Float:y, Float:z)<_ALS_:unhooked>{return 1;}
  3119. //public S@@_OnPlayerEditDynamicObject(playerid, objectid, modelid, Float:x, Float:y, Float:z)<>{return 1;}
  3120. public OnPlayerPickUpDynamicPickup(playerid, pickupid)
  3121. {
  3122. P:2("Hooks_OnPlayerPickUpDynamicPickup called: %d, %d", playerid, pickupid);
  3123. new
  3124. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerPickUpDynamicPickup],
  3125. start = _:YSI_g_sCallbackStart[ALS_OnPlayerPickUpDynamicPickup],
  3126. ret = ALS_R_PlayerPickUpDynamicPickup;
  3127. while (start++ != end)
  3128. {
  3129. #emit PUSH.S pickupid
  3130. #emit PUSH.S playerid
  3131. #emit PUSH.C 8
  3132. #emit CONST.alt YSI_g_sCallbackAddresses
  3133. #emit LOAD.S.pri start
  3134. //#emit INC.pri
  3135. //#emit STOR.S.pri start
  3136. #emit LIDX
  3137. #emit MOVE.alt
  3138. #emit LCTRL 6
  3139. #emit ADD.C 24
  3140. #emit PUSH.pri
  3141. #emit MOVE.pri
  3142. #emit SCTRL 6
  3143. #emit MOVE.alt
  3144. #emit CONST.pri 0xFFFFFFFE
  3145. #emit AND
  3146. #emit PUSH.pri
  3147. #emit LOAD.S.pri ret
  3148. #emit AND
  3149. #emit POP.alt
  3150. #emit OR
  3151. #emit STOR.S.pri ret
  3152. if (ret < 0) return ret + 1;
  3153. }
  3154. return ret;
  3155. }
  3156. #if defined _ALS_OnPlayerPickUpDynamicPUp
  3157. #undef OnPlayerPickUpDynamicPickup
  3158. #else
  3159. #define _ALS_OnPlayerPickUpDynamicPUp
  3160. #endif
  3161. #define OnPlayerPickUpDynamicPickup S@@_OnPlayerPickUpDynamicPickup
  3162. HOOK_FORWARD<PlayerPickUpDynamicPickup>
  3163. public OnPlayerEnterDynamicCP(playerid, checkpointid)
  3164. {
  3165. P:2("Hooks_OnPlayerEnterDynamicCP called: %d, %d", playerid, checkpointid);
  3166. new
  3167. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerEnterDynamicCP],
  3168. start = _:YSI_g_sCallbackStart[ALS_OnPlayerEnterDynamicCP],
  3169. ret = ALS_R_PlayerEnterDynamicCP;
  3170. while (start++ != end)
  3171. {
  3172. #emit PUSH.S checkpointid
  3173. #emit PUSH.S playerid
  3174. #emit PUSH.C 8
  3175. #emit CONST.alt YSI_g_sCallbackAddresses
  3176. #emit LOAD.S.pri start
  3177. //#emit INC.pri
  3178. //#emit STOR.S.pri start
  3179. #emit LIDX
  3180. #emit MOVE.alt
  3181. #emit LCTRL 6
  3182. #emit ADD.C 24
  3183. #emit PUSH.pri
  3184. #emit MOVE.pri
  3185. #emit SCTRL 6
  3186. #emit MOVE.alt
  3187. #emit CONST.pri 0xFFFFFFFE
  3188. #emit AND
  3189. #emit PUSH.pri
  3190. #emit LOAD.S.pri ret
  3191. #emit AND
  3192. #emit POP.alt
  3193. #emit OR
  3194. #emit STOR.S.pri ret
  3195. if (ret < 0) return ret + 1;
  3196. }
  3197. return ret;
  3198. }
  3199. #if defined _ALS_OnPlayerEnterDynamicCP
  3200. #undef OnPlayerEnterDynamicCP
  3201. #else
  3202. #define _ALS_OnPlayerEnterDynamicCP
  3203. #endif
  3204. #define OnPlayerEnterDynamicCP S@@_OnPlayerEnterDynamicCP
  3205. HOOK_FORWARD<PlayerEnterDynamicCP>
  3206. public OnPlayerLeaveDynamicCP(playerid, checkpointid)
  3207. {
  3208. P:2("Hooks_OnPlayerLeaveDynamicCP called: %d, %d", playerid, checkpointid);
  3209. new
  3210. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerLeaveDynamicCP],
  3211. start = _:YSI_g_sCallbackStart[ALS_OnPlayerLeaveDynamicCP],
  3212. ret = ALS_R_PlayerLeaveDynamicCP;
  3213. while (start++ != end)
  3214. {
  3215. #emit PUSH.S checkpointid
  3216. #emit PUSH.S playerid
  3217. #emit PUSH.C 8
  3218. #emit CONST.alt YSI_g_sCallbackAddresses
  3219. #emit LOAD.S.pri start
  3220. //#emit INC.pri
  3221. //#emit STOR.S.pri start
  3222. #emit LIDX
  3223. #emit MOVE.alt
  3224. #emit LCTRL 6
  3225. #emit ADD.C 24
  3226. #emit PUSH.pri
  3227. #emit MOVE.pri
  3228. #emit SCTRL 6
  3229. #emit MOVE.alt
  3230. #emit CONST.pri 0xFFFFFFFE
  3231. #emit AND
  3232. #emit PUSH.pri
  3233. #emit LOAD.S.pri ret
  3234. #emit AND
  3235. #emit POP.alt
  3236. #emit OR
  3237. #emit STOR.S.pri ret
  3238. if (ret < 0) return ret + 1;
  3239. }
  3240. return ret;
  3241. }
  3242. #if defined _ALS_OnPlayerLeaveDynamicCP
  3243. #undef OnPlayerLeaveDynamicCP
  3244. #else
  3245. #define _ALS_OnPlayerLeaveDynamicCP
  3246. #endif
  3247. #define OnPlayerLeaveDynamicCP S@@_OnPlayerLeaveDynamicCP
  3248. HOOK_FORWARD<PlayerLeaveDynamicCP>
  3249. public OnPlayerEnterDynamicRaceCP(playerid, checkpointid)
  3250. {
  3251. P:2("Hooks_OnPlayerEnterDynamicRaceCP called: %d, %d", playerid, checkpointid);
  3252. new
  3253. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerEnterDynamicRaceCP],
  3254. start = _:YSI_g_sCallbackStart[ALS_OnPlayerEnterDynamicRaceCP],
  3255. ret = ALS_R_PlayerEnterDynamicRaceCP;
  3256. while (start++ != end)
  3257. {
  3258. #emit PUSH.S checkpointid
  3259. #emit PUSH.S playerid
  3260. #emit PUSH.C 8
  3261. #emit CONST.alt YSI_g_sCallbackAddresses
  3262. #emit LOAD.S.pri start
  3263. //#emit INC.pri
  3264. //#emit STOR.S.pri start
  3265. #emit LIDX
  3266. #emit MOVE.alt
  3267. #emit LCTRL 6
  3268. #emit ADD.C 24
  3269. #emit PUSH.pri
  3270. #emit MOVE.pri
  3271. #emit SCTRL 6
  3272. #emit MOVE.alt
  3273. #emit CONST.pri 0xFFFFFFFE
  3274. #emit AND
  3275. #emit PUSH.pri
  3276. #emit LOAD.S.pri ret
  3277. #emit AND
  3278. #emit POP.alt
  3279. #emit OR
  3280. #emit STOR.S.pri ret
  3281. if (ret < 0) return ret + 1;
  3282. }
  3283. return ret;
  3284. }
  3285. #if defined _ALS_OnPlayerEnterDynamicRaceCP
  3286. #undef OnPlayerEnterDynamicRaceCP
  3287. #else
  3288. #define _ALS_OnPlayerEnterDynamicRaceCP
  3289. #endif
  3290. #define OnPlayerEnterDynamicRaceCP S@@_OnPlayerEnterDynamicRaceCP
  3291. HOOK_FORWARD<PlayerEnterDynamicRaceCP>
  3292. public OnPlayerLeaveDynamicRaceCP(playerid, checkpointid)
  3293. {
  3294. P:2("Hooks_OnPlayerLeaveDynamicRaceCP called: %d, %d", playerid, checkpointid);
  3295. new
  3296. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerLeaveDynamicRaceCP],
  3297. start = _:YSI_g_sCallbackStart[ALS_OnPlayerLeaveDynamicRaceCP],
  3298. ret = ALS_R_PlayerLeaveDynamicRaceCP;
  3299. while (start++ != end)
  3300. {
  3301. #emit PUSH.S checkpointid
  3302. #emit PUSH.S playerid
  3303. #emit PUSH.C 8
  3304. #emit CONST.alt YSI_g_sCallbackAddresses
  3305. #emit LOAD.S.pri start
  3306. //#emit INC.pri
  3307. //#emit STOR.S.pri start
  3308. #emit LIDX
  3309. #emit MOVE.alt
  3310. #emit LCTRL 6
  3311. #emit ADD.C 24
  3312. #emit PUSH.pri
  3313. #emit MOVE.pri
  3314. #emit SCTRL 6
  3315. #emit MOVE.alt
  3316. #emit CONST.pri 0xFFFFFFFE
  3317. #emit AND
  3318. #emit PUSH.pri
  3319. #emit LOAD.S.pri ret
  3320. #emit AND
  3321. #emit POP.alt
  3322. #emit OR
  3323. #emit STOR.S.pri ret
  3324. if (ret < 0) return ret + 1;
  3325. }
  3326. return ret;
  3327. }
  3328. #if defined _ALS_OnPlayerLeaveDynamicRaceCP
  3329. #undef OnPlayerLeaveDynamicRaceCP
  3330. #else
  3331. #define _ALS_OnPlayerLeaveDynamicRaceCP
  3332. #endif
  3333. #define OnPlayerLeaveDynamicRaceCP S@@_OnPlayerLeaveDynamicRaceCP
  3334. HOOK_FORWARD<PlayerLeaveDynamicRaceCP>
  3335. public OnPlayerEnterDynamicArea(playerid, areaid)
  3336. {
  3337. P:2("Hooks_OnPlayerEnterDynamicArea called: %d, %d", playerid, areaid);
  3338. new
  3339. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerEnterDynamicArea],
  3340. start = _:YSI_g_sCallbackStart[ALS_OnPlayerEnterDynamicArea],
  3341. ret = ALS_R_PlayerEnterDynamicArea;
  3342. while (start++ != end)
  3343. {
  3344. #emit PUSH.S areaid
  3345. #emit PUSH.S playerid
  3346. #emit PUSH.C 8
  3347. #emit CONST.alt YSI_g_sCallbackAddresses
  3348. #emit LOAD.S.pri start
  3349. //#emit INC.pri
  3350. //#emit STOR.S.pri start
  3351. #emit LIDX
  3352. #emit MOVE.alt
  3353. #emit LCTRL 6
  3354. #emit ADD.C 24
  3355. #emit PUSH.pri
  3356. #emit MOVE.pri
  3357. #emit SCTRL 6
  3358. #emit MOVE.alt
  3359. #emit CONST.pri 0xFFFFFFFE
  3360. #emit AND
  3361. #emit PUSH.pri
  3362. #emit LOAD.S.pri ret
  3363. #emit AND
  3364. #emit POP.alt
  3365. #emit OR
  3366. #emit STOR.S.pri ret
  3367. if (ret < 0) return ret + 1;
  3368. }
  3369. return ret;
  3370. }
  3371. #if defined _ALS_OnPlayerEnterDynamicArea
  3372. #undef OnPlayerEnterDynamicArea
  3373. #else
  3374. #define _ALS_OnPlayerEnterDynamicArea
  3375. #endif
  3376. #define OnPlayerEnterDynamicArea S@@_OnPlayerEnterDynamicArea
  3377. HOOK_FORWARD<PlayerEnterDynamicArea>
  3378. public OnPlayerLeaveDynamicArea(playerid, areaid)
  3379. {
  3380. P:2("Hooks_OnPlayerLeaveDynamicArea called: %d, %d", playerid, areaid);
  3381. new
  3382. end = _:YSI_g_sCallbackEnd[ALS_OnPlayerLeaveDynamicArea],
  3383. start = _:YSI_g_sCallbackStart[ALS_OnPlayerLeaveDynamicArea],
  3384. ret = ALS_R_PlayerLeaveDynamicArea;
  3385. while (start++ != end)
  3386. {
  3387. #emit PUSH.S areaid
  3388. #emit PUSH.S playerid
  3389. #emit PUSH.C 8
  3390. #emit CONST.alt YSI_g_sCallbackAddresses
  3391. #emit LOAD.S.pri start
  3392. //#emit INC.pri
  3393. //#emit STOR.S.pri start
  3394. #emit LIDX
  3395. #emit MOVE.alt
  3396. #emit LCTRL 6
  3397. #emit ADD.C 24
  3398. #emit PUSH.pri
  3399. #emit MOVE.pri
  3400. #emit SCTRL 6
  3401. #emit MOVE.alt
  3402. #emit CONST.pri 0xFFFFFFFE
  3403. #emit AND
  3404. #emit PUSH.pri
  3405. #emit LOAD.S.pri ret
  3406. #emit AND
  3407. #emit POP.alt
  3408. #emit OR
  3409. #emit STOR.S.pri ret
  3410. if (ret < 0) return ret + 1;
  3411. }
  3412. return ret;
  3413. }
  3414. #if defined _ALS_OnPlayerLeaveDynamicArea
  3415. #undef OnPlayerLeaveDynamicArea
  3416. #else
  3417. #define _ALS_OnPlayerLeaveDynamicArea
  3418. #endif
  3419. #define OnPlayerLeaveDynamicArea S@@_OnPlayerLeaveDynamicArea
  3420. HOOK_FORWARD<PlayerLeaveDynamicArea>
  3421. #undef ALS_MAKE