y_dohooks.inc 108 KB

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