1
0

y_dohooks.inc 140 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354435543564357435843594360436143624363436443654366436743684369437043714372437343744375437643774378437943804381438243834384438543864387438843894390439143924393439443954396439743984399440044014402440344044405440644074408440944104411441244134414441544164417441844194420442144224423442444254426442744284429443044314432443344344435443644374438443944404441444244434444444544464447444844494450445144524453445444554456445744584459446044614462446344644465446644674468446944704471447244734474447544764477447844794480448144824483448444854486448744884489449044914492449344944495449644974498449945004501450245034504450545064507450845094510451145124513451445154516451745184519452045214522452345244525452645274528452945304531453245334534453545364537453845394540454145424543454445454546454745484549455045514552455345544555455645574558455945604561456245634564456545664567456845694570457145724573457445754576457745784579458045814582458345844585458645874588458945904591459245934594459545964597459845994600460146024603460446054606460746084609461046114612461346144615461646174618461946204621462246234624462546264627462846294630463146324633463446354636463746384639464046414642464346444645464646474648464946504651465246534654465546564657465846594660466146624663466446654666466746684669467046714672467346744675467646774678467946804681468246834684468546864687468846894690469146924693469446954696469746984699470047014702470347044705470647074708470947104711471247134714471547164717471847194720472147224723472447254726472747284729473047314732473347344735473647374738473947404741474247434744474547464747474847494750475147524753475447554756475747584759476047614762476347644765476647674768476947704771477247734774477547764777477847794780478147824783478447854786478747884789479047914792479347944795479647974798479948004801480248034804480548064807480848094810481148124813481448154816481748184819482048214822482348244825482648274828482948304831483248334834483548364837483848394840484148424843484448454846484748484849485048514852485348544855485648574858485948604861486248634864
  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. #include "y_plugins"
  61. #define ALS_PREFIX S@@
  62. #if !defined YSI_FILTERSCRIPT
  63. new
  64. bool:YSI_FILTERSCRIPT = false;
  65. #endif
  66. #define hook%0On%1(%2) UNIQUE_FUNCTION<@yH_%1...>(%2);UNIQUE_FUNCTION<@yH_%1...>(%2)
  67. //#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>
  68. #define rehook%0On%1(%2) UNIQUE_FUNCTION<@yH_%1...>(%2)
  69. #define Hook:%0On%1(%2) UNIQUE_FUNCTION<@yH_%1...%0>(%2);UNIQUE_FUNCTION<@yH_%1...%0>(%2)
  70. #include "..\y_als"
  71. /*#if !defined OnPlayerLogin
  72. #endif
  73. #if !defined OnPlayerLogout
  74. #endif*/
  75. //forward Hooks_OnPlayerLogin(playerid, yid);
  76. //forward Hooks_OnPlayerLogout(playerid, yid);
  77. //hook OnPlayerConnect
  78. #if !defined HOOKS_MAX_UPDATES
  79. // Slight increase from the previous version.
  80. #define HOOKS_MAX_UPDATES (8)
  81. #endif
  82. // One of the few places where this is still used.
  83. ALS_DATA<>
  84. // These defines now use the much more generic ALS code so that the list of
  85. // callbacks is only done in one place.
  86. #define HOOK_R_INT<%0,%2>(%3) return Bit_GetBit(Bit:gs_ALS,_:ALS_On%0)?P@(#ALS_PREFIX"_On"#%0,(q:#%2#),ALS_RS_%3):ret;
  87. #define HOOK_RETURN<%0> ALS_DO:HOOK_R_INT<%0>
  88. #define HOOK_C_INT<%0,%2>(%3) if(Bit_GetBit(Bit:gs_ALS,_:ALS_On%0))return P@(#ALS_PREFIX"_On"#%0,(q:#%2#),ALS_RS_%3);hooks_do_hooks_call_no_als:return ret;
  89. #define HOOK_CALL<%0> ALS_DO:HOOK_C_INT<%0>
  90. enum E_FUNC_HOOK_DATA
  91. {
  92. E_FUNC_HOOK_DATA_START,
  93. E_FUNC_HOOK_DATA_END
  94. }
  95. static stock
  96. YSI_g_sCallbackAddresses[HOOKS_MAX_UPDATES * _:ALS],
  97. YSI_g_sCallbackData[ALS][E_FUNC_HOOK_DATA],
  98. YSI_g_sLastFoundIndex;
  99. static Hooks_Blank_Return1N()
  100. {
  101. // Bug fix from Slice.
  102. return -1;
  103. }
  104. static Hooks_Blank_Return0()
  105. {
  106. return 0;
  107. }
  108. static Hooks_Blank_Return1()
  109. {
  110. return 1;
  111. }
  112. Hooks_RedirectPublic(from[], to[], final = 1)
  113. {
  114. P:4("Hooks_RedirectPublic called: \"%s\", \"%s\"", from, to);
  115. new
  116. addr;
  117. if (AMX_GetPublicEntry(0, addr, from))
  118. {
  119. new
  120. pointer,
  121. ret = AMX_Read(addr);
  122. if (AMX_GetPublicPointer(0, pointer, to))
  123. {
  124. AMX_Write(addr, pointer);
  125. }
  126. else
  127. {
  128. // Can't find the next element, just remove this callback entirely.
  129. // Note that in some cases the previous ALS include will have
  130. // already (due to the constant chaining order) determined that
  131. // there IS a next callback for this type (because there is) and set
  132. // some internal variable stating this fact. When it comes to call
  133. // it, however, the callback will no longer exist (unless PAWN
  134. // buffers callbacks in an efficient structure, which is possible).
  135. // UPDATE: Clearly not.
  136. //AMX_Write(addr, -1);
  137. switch (final)
  138. {
  139. case 0:
  140. {
  141. #emit CONST.pri Hooks_Blank_Return0
  142. #emit STOR.S.pri pointer
  143. }
  144. case -1:
  145. {
  146. #emit CONST.pri Hooks_Blank_Return1N
  147. #emit STOR.S.pri pointer
  148. }
  149. default:
  150. {
  151. #emit CONST.pri Hooks_Blank_Return1
  152. #emit STOR.S.pri pointer
  153. }
  154. }
  155. AMX_Write(addr, pointer);
  156. }
  157. return ret;
  158. }
  159. return 0;
  160. }
  161. static Hooks_AddOne(idx, &toaddidx, struc[E_FUNC_HOOK_DATA])
  162. {
  163. // This is a combination between the count and the end point.
  164. ++struc[E_FUNC_HOOK_DATA_END];
  165. if (toaddidx == sizeof (YSI_g_sCallbackAddresses))
  166. {
  167. if (struc[E_FUNC_HOOK_DATA_START] != sizeof (YSI_g_sCallbackAddresses))
  168. {
  169. YSI_g_sLastFoundIndex = idx;
  170. }
  171. }
  172. else
  173. {
  174. new
  175. addr = (idx - 1) * 8 + AMX_HEADER_PUBLICS;
  176. #emit LREF.S.pri addr
  177. #emit STOR.S.pri addr
  178. YSI_g_sCallbackAddresses[toaddidx++] = addr;
  179. }
  180. }
  181. static Hooks_FindAll(name[], &toaddidx, struc[E_FUNC_HOOK_DATA]) //, &count)
  182. {
  183. P:4("Hooks_FindAll called: %s %d", name, toaddidx);
  184. new
  185. buffer[32],
  186. len = strlen(name);
  187. struc[E_FUNC_HOOK_DATA_START] = toaddidx;
  188. struc[E_FUNC_HOOK_DATA_END] = toaddidx;
  189. for (new idx; (idx = AMX_GetPublicNamePrefix(idx, buffer, _A<@yH_>)); )
  190. {
  191. if (!strcmp(name, buffer[1], false, len))
  192. {
  193. Hooks_AddOne(idx, toaddidx, struc);
  194. }
  195. }
  196. if (struc[E_FUNC_HOOK_DATA_START] < sizeof (YSI_g_sCallbackAddresses) && struc[E_FUNC_HOOK_DATA_END] >= sizeof (YSI_g_sCallbackAddresses))
  197. {
  198. P:W("y_hooks buffer exhausted, resorting to slow method.");
  199. }
  200. // Don't store the end, if the count goes off the end of the addresses array
  201. // then we need to just start reading from the AMX directly.
  202. P:4("Hooks_FindAll end: %s %d %d", name, toaddidx, struc[E_FUNC_HOOK_DATA_END] - struc[E_FUNC_HOOK_DATA_START]);
  203. //count = struc[E_FUNC_HOOK_DATA_END] - struc[E_FUNC_HOOK_DATA_START];
  204. return struc[E_FUNC_HOOK_DATA_END] - struc[E_FUNC_HOOK_DATA_START];
  205. }
  206. #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);
  207. #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;
  208. static Hooks_OnScriptInit()
  209. {
  210. P:2("Hooks_OnScriptInit called");
  211. new
  212. cidx;
  213. //HOOKS_DO_ONE_CALLBACK<AnyScriptInit>
  214. //HOOKS_DO_ONE_CALLBACK<AnyScriptExit>
  215. //HOOKS_DO_ONE_CALLBACK<ScriptInit>
  216. //HOOKS_DO_ONE_CALLBACK<ScriptExit>
  217. //HOOKS_DO_ONE_CALLBACK<GameModeInit>
  218. //HOOKS_DO_ONE_CALLBACK<GameModeExit>
  219. //HOOKS_DO_ONE_CALLBACK<FilterScriptInit>
  220. //HOOKS_DO_ONE_CALLBACK<FilterScriptExit>
  221. //printf(" ");
  222. ALS_DETECT<ScriptInit>
  223. ALS_DETECT<ScriptExit>
  224. ALS_DETECT<GameModeInit>
  225. ALS_DETECT<GameModeExit>
  226. ALS_DETECT<FilterScriptInit>
  227. ALS_DETECT<FilterScriptExit>
  228. printf(" ");
  229. for (new i = 0; i != 1000000; ++i) {}
  230. printf(" ");
  231. Hooks_FindAll(#ScriptInit, cidx, YSI_g_sCallbackData[ALS_OnScriptInit]);
  232. if (YSI_FILTERSCRIPT)
  233. {
  234. //printf(" ");
  235. if (!(Hooks_FindAll(#FilterScriptExit, cidx, YSI_g_sCallbackData[ALS_OnFilterScriptExit]) + Hooks_FindAll(#ScriptExit, cidx, YSI_g_sCallbackData[ALS_OnScriptExit])))
  236. {
  237. Hooks_RedirectPublic(#OnFilterScriptExit, #S@@_OnFilterScriptExit);
  238. }
  239. //HOOKS_DO_ONE_CALLBACK<FilterScriptInit>
  240. Hooks_FindAll(#FilterScriptInit, cidx, YSI_g_sCallbackData[ALS_OnFilterScriptInit]);
  241. HOOKS_DO_ONE_CALLBACK<GameModeInit>
  242. HOOKS_DO_ONE_CALLBACK<GameModeExit>
  243. //Hooks_FindAll(#FilterScriptExit, cidx, YSI_g_sCallbackData[ALS_OnFilterScriptExit], count);
  244. //printf("d");
  245. }
  246. else
  247. {
  248. printf(" ");
  249. if (!(Hooks_FindAll(#GameModeExit, cidx, YSI_g_sCallbackData[ALS_OnGameModeExit]) + Hooks_FindAll(#ScriptExit, cidx, YSI_g_sCallbackData[ALS_OnScriptExit])))
  250. {
  251. Hooks_RedirectPublic(#OnGameModeExit, #S@@_OnGameModeExit);
  252. }
  253. Hooks_FindAll(#GameModeInit, cidx, YSI_g_sCallbackData[ALS_OnGameModeInit]);
  254. //Hooks_RedirectPublic(#OnGameModeInit, #S@@_OnGameModeInit);
  255. Hooks_RedirectPublic(#OnFilterScriptInit, #S@@_OnFilterScriptInit);
  256. Hooks_RedirectPublic(#OnFilterScriptExit, #S@@_OnFilterScriptExit);
  257. }
  258. HOOKS_DO_ONE_CALLBACK<PlayerConnect>
  259. HOOKS_DO_ONE_CALLBACK<PlayerDisconnect>
  260. HOOKS_DO_ONE_CALLBACK<PlayerSpawn>
  261. HOOKS_DO_ONE_CALLBACK<PlayerDeath>
  262. HOOKS_DO_ONE_CALLBACK<VehicleSpawn>
  263. HOOKS_DO_ONE_CALLBACK<VehicleDeath>
  264. HOOKS_DO_ONE_CALLBACK<PlayerText>
  265. HOOKS_DO_ONE_CALLBACK<PlayerCommandText>
  266. HOOKS_DO_ONE_CALLBACK<PlayerRequestClass>
  267. HOOKS_DO_ONE_CALLBACK<PlayerEnterVehicle>
  268. HOOKS_DO_ONE_CALLBACK<PlayerExitVehicle>
  269. HOOKS_DO_ONE_CALLBACK<PlayerStateChange>
  270. HOOKS_DO_ONE_CALLBACK<PlayerEnterCheckpoint>
  271. HOOKS_DO_ONE_CALLBACK<PlayerLeaveCheckpoint>
  272. HOOKS_DO_ONE_CALLBACK<PlayerEnterRaceCheckpoint>
  273. HOOKS_DO_ONE_CALLBACK<PlayerLeaveRaceCheckpoint>
  274. HOOKS_DO_ONE_CALLBACK<RconCommand>
  275. HOOKS_DO_ONE_CALLBACK<PlayerRequestSpawn>
  276. HOOKS_DO_ONE_CALLBACK<ObjectMoved>
  277. HOOKS_DO_ONE_CALLBACK<PlayerObjectMoved>
  278. HOOKS_DO_ONE_CALLBACK<PlayerPickUpPickup>
  279. HOOKS_DO_ONE_CALLBACK<VehicleMod>
  280. HOOKS_DO_ONE_CALLBACK<EnterExitModShop>
  281. HOOKS_DO_ONE_CALLBACK<VehiclePaintjob>
  282. HOOKS_DO_ONE_CALLBACK<VehicleRespray>
  283. HOOKS_DO_ONE_CALLBACK<VehicleDamageStatusUpdate>
  284. HOOKS_DO_ONE_CALLBACK<PlayerSelectedMenuRow>
  285. HOOKS_DO_ONE_CALLBACK<PlayerExitedMenu>
  286. HOOKS_DO_ONE_CALLBACK<PlayerInteriorChange>
  287. HOOKS_DO_ONE_CALLBACK<PlayerKeyStateChange>
  288. HOOKS_DO_ONE_CALLBACK<RconLoginAttempt>
  289. HOOKS_DO_ONE_CALLBACK<PlayerUpdate>
  290. HOOKS_DO_ONE_CALLBACK<PlayerStreamIn>
  291. HOOKS_DO_ONE_CALLBACK<PlayerStreamOut>
  292. HOOKS_DO_ONE_CALLBACK<VehicleStreamIn>
  293. HOOKS_DO_ONE_CALLBACK<VehicleStreamOut>
  294. HOOKS_DO_ONE_CALLBACK<DialogResponse>
  295. HOOKS_DO_ONE_CALLBACK<PlayerClickPlayer>
  296. HOOKS_DO_ONE_CALLBACK<PlayerGiveDamage>
  297. HOOKS_DO_ONE_CALLBACK<PlayerTakeDamage>
  298. HOOKS_DO_ONE_CALLBACK<PlayerClickMap>
  299. HOOKS_DO_ONE_CALLBACK<UnoccupiedVehicleUpdate>
  300. // 0.3e
  301. HOOKS_DO_ONE_CALLBACK<PlayerClickTextDraw>
  302. HOOKS_DO_ONE_CALLBACK<PlayerClickPlayerTextDraw>
  303. HOOKS_DO_ONE_CALLBACK<PlayerEditObject>
  304. HOOKS_DO_ONE_CALLBACK<PlayerEditAttachedObject>
  305. HOOKS_DO_ONE_CALLBACK<PlayerSelectObject>
  306. //printf("e");
  307. // Streamer plugin.
  308. #if defined _YSI_PLUGINS_STREAMER
  309. HOOKS_DO_ONE_CALLBACK<DynamicObjectMoved>
  310. HOOKS_DO_ONE_CALLBACK<PlayerEditDynamicObject>
  311. HOOKS_DO_ONE_CALLBACK<PlayerSelectDynamicObject>
  312. HOOKS_DO_ONE_CALLBACK<PlayerPickUpDynamicPickup>
  313. HOOKS_DO_ONE_CALLBACK<PlayerEnterDynamicCP>
  314. HOOKS_DO_ONE_CALLBACK<PlayerLeaveDynamicCP>
  315. HOOKS_DO_ONE_CALLBACK<PlayerEnterDynamicRaceCP>
  316. HOOKS_DO_ONE_CALLBACK<PlayerLeaveDynamicRaceCP>
  317. HOOKS_DO_ONE_CALLBACK<PlayerEnterDynamicArea>
  318. HOOKS_DO_ONE_CALLBACK<PlayerLeaveDynamicArea>
  319. #endif
  320. // YSI callbacks.
  321. HOOKS_DO_ONE_SPECIAL<PlayerLogin>
  322. HOOKS_DO_ONE_SPECIAL<PlayerLogout>
  323. //ALS_DETECT<%0>Hooks_FindAll(#%0,cidx,YSI_g_sCallbackData[ALS_On%0],count);if(!count)Hooks_RedirectPublic(#On%0,#S@@_On%0);
  324. //ALS_DETECT<%0>Hooks_FindAll(#%0,cidx,YSI_g_sCallbackData[ALS_On%0],count);if(!count)Hooks_RedirectPublic(#On%0,#S@@_On%0);
  325. #if defined YSI_LOCK_MODE
  326. YSI_gLockData[1] = floatround(floatlog(_LOCK_LEN_0 + 1), floatround_ceil);
  327. YSI_gLockData[0] = 5 + YSI_gLockData[1];
  328. YSI_gLockData[2] = YSI_gLockData[0] - 5;
  329. if (~strval(YSI_gLockData[5]) != ~_LOCK_IP_0)
  330. {
  331. y_lock 2;
  332. }
  333. YSI_gLockData[2] -= YSI_gLockData[1];
  334. YSI_gLockData[YSI_gLockData[2] + 1] -= YSI_gLockData[0];
  335. YSI_gLockData[1] += '.' + 5;
  336. /*if (~strval(YSI_gLockData[5]) != 0xFFFFFF80)
  337. {
  338. y_lock 3;
  339. }*/
  340. #endif
  341. new
  342. end = YSI_g_sCallbackData[ALS_OnScriptInit][E_FUNC_HOOK_DATA_END],
  343. start = YSI_g_sCallbackData[ALS_OnScriptInit][E_FUNC_HOOK_DATA_START],
  344. ret = ALS_R_ScriptInit;
  345. if (start == end)
  346. {
  347. // We need to use this version of the return code instead of jumping to
  348. // the end of the function because "#emit" can only see labels BEFORE
  349. // where it is in the code. This is quite annoying but can be worked
  350. // around in this case.
  351. P:2("Hooks_OnScriptInit end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnScriptInit));
  352. hooks_do_hooks_call_no_als:
  353. return;
  354. }
  355. new
  356. idx,
  357. pointer,
  358. re = end;
  359. if (end > sizeof (YSI_g_sCallbackAddresses))
  360. {
  361. re = sizeof (YSI_g_sCallbackAddresses);
  362. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  363. }
  364. //printf("f");
  365. // Do the initial fast elements.
  366. while (start != re)
  367. {
  368. pointer = YSI_g_sCallbackAddresses[start++];
  369. #emit PUSH.C 0
  370. #emit LCTRL 6
  371. #emit ADD.C 28
  372. #emit PUSH.pri
  373. #emit LOAD.S.pri pointer
  374. #emit SCTRL 6
  375. //#emit CONST.alt 0xFFFFFFFF
  376. //#emit PUSH.alt
  377. /*#emit HEAP 4
  378. #emit STOR.I
  379. #emit PUSH.alt
  380. printf("%d");
  381. #emit STACK 4
  382. #emit HEAP 0xFFFFFFFC*/
  383. #emit CONST.alt 0xFFFFFFFF
  384. #emit STOR.S.pri ret
  385. #emit JEQ hooks_do_hooks_call_no_als
  386. }
  387. // Get any remaining pointers the old way.
  388. while (start++ != end)
  389. {
  390. idx = AMX_GetPublicPointer(idx, pointer, "@yH_ScriptInit");
  391. #emit PUSH.C 0
  392. #emit LCTRL 6
  393. #emit ADD.C 28
  394. #emit PUSH.pri
  395. #emit LOAD.S.pri pointer
  396. #emit SCTRL 6
  397. #emit CONST.alt 0xFFFFFFFF
  398. #emit STOR.S.pri ret
  399. #emit JEQ hooks_do_hooks_call_no_als
  400. }
  401. // Do ALS just in case (YSI no longer uses this though now).
  402. P:2("Hooks_OnScriptInit end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnScriptInit));
  403. }
  404. static Hooks_OnScriptExit()
  405. {
  406. P:2("Hooks_OnScriptExit called");
  407. new
  408. end = YSI_g_sCallbackData[ALS_OnScriptExit][E_FUNC_HOOK_DATA_END],
  409. start = YSI_g_sCallbackData[ALS_OnScriptExit][E_FUNC_HOOK_DATA_START],
  410. ret = ALS_R_ScriptExit;
  411. if (start == end)
  412. {
  413. P:2("Hooks_OnScriptExit end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnScriptExit));
  414. hooks_do_hooks_call_no_als:
  415. return;
  416. }
  417. new
  418. idx,
  419. pointer,
  420. re = end;
  421. if (end > sizeof (YSI_g_sCallbackAddresses))
  422. {
  423. re = sizeof (YSI_g_sCallbackAddresses);
  424. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  425. }
  426. // Do the initial fast elements.
  427. while (start != re)
  428. {
  429. pointer = YSI_g_sCallbackAddresses[start++];
  430. #emit PUSH.C 0
  431. #emit LCTRL 6
  432. #emit ADD.C 28
  433. #emit PUSH.pri
  434. #emit LOAD.S.pri pointer
  435. #emit SCTRL 6
  436. #emit CONST.alt 0xFFFFFFFF
  437. #emit STOR.S.pri ret
  438. #emit JEQ hooks_do_hooks_call_no_als
  439. }
  440. // Get any remaining pointers the old way.
  441. while (start++ != end)
  442. {
  443. idx = AMX_GetPublicPointer(idx, pointer, "@yH_ScriptExit");
  444. #emit PUSH.C 0
  445. #emit LCTRL 6
  446. #emit ADD.C 28
  447. #emit PUSH.pri
  448. #emit LOAD.S.pri pointer
  449. #emit SCTRL 6
  450. #emit CONST.alt 0xFFFFFFFF
  451. #emit STOR.S.pri ret
  452. #emit JEQ hooks_do_hooks_call_no_als
  453. }
  454. // Do ALS just in case (YSI no longer uses this though now).
  455. P:2("Hooks_OnScriptExit end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnScriptExit));
  456. }
  457. public OnGameModeInit()
  458. {
  459. P:2("Hooks_OnGameModeInit called: %d", YSI_FILTERSCRIPT);
  460. if (!YSI_FILTERSCRIPT)
  461. {
  462. Hooks_OnScriptInit();
  463. //Hooks_OnAnyScriptInit();
  464. #if defined YSI_LOCK_MODE
  465. //if (strval(YSI_gLockData[9]) + strval(YSI_gLockData[11]) + strval(YSI_gLockData[13]) != 1)
  466. 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)
  467. {
  468. y_lock 4;
  469. }
  470. #endif
  471. }
  472. new
  473. end = YSI_g_sCallbackData[ALS_OnGameModeInit][E_FUNC_HOOK_DATA_END],
  474. start = YSI_g_sCallbackData[ALS_OnGameModeInit][E_FUNC_HOOK_DATA_START],
  475. ret = ALS_R_GameModeInit;
  476. if (start == end)
  477. {
  478. P:2("Hooks_OnGameModeInit end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnGameModeInit));
  479. //printf("%d", ret);
  480. //printf("%d", Bit_GetBit(Bit:gs_ALS, _:ALS_OnGameModeInit));
  481. //printf("%d", P@("S@@_OnGameModeInit", ""));
  482. HOOK_CALL<GameModeInit>
  483. //hooks_do_hooks_call_no_als:
  484. //printf("end 2");
  485. //return 1;
  486. }
  487. new
  488. idx,
  489. pointer,
  490. re = end;
  491. if (end > sizeof (YSI_g_sCallbackAddresses))
  492. {
  493. re = sizeof (YSI_g_sCallbackAddresses);
  494. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  495. }
  496. // Do the initial fast elements.
  497. while (start != re)
  498. {
  499. pointer = YSI_g_sCallbackAddresses[start++];
  500. #emit PUSH.C 0
  501. #emit LCTRL 6
  502. #emit ADD.C 28
  503. #emit PUSH.pri
  504. #emit LOAD.S.pri pointer
  505. #emit SCTRL 6
  506. #emit CONST.alt 0xFFFFFFFF
  507. // Note that this label is embedded in the "HOOK_CALL" macro above.
  508. #emit STOR.S.pri ret
  509. #emit JEQ hooks_do_hooks_call_no_als
  510. }
  511. // Get any remaining pointers the old way.
  512. while (start++ != end)
  513. {
  514. idx = AMX_GetPublicPointer(idx, pointer, "@yH_GameModeInit");
  515. #emit PUSH.C 0
  516. #emit LCTRL 6
  517. #emit ADD.C 28
  518. #emit PUSH.pri
  519. #emit LOAD.S.pri pointer
  520. #emit SCTRL 6
  521. #emit CONST.alt 0xFFFFFFFF
  522. #emit STOR.S.pri ret
  523. #emit JEQ hooks_do_hooks_call_no_als
  524. }
  525. // Do ALS just in case (YSI no longer uses this though now).
  526. P:2("Hooks_OnGameModeInit end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnGameModeInit));
  527. HOOK_RETURN<GameModeInit>
  528. //return 1;
  529. }
  530. #if defined _ALS_OnGameModeInit
  531. #undef OnGameModeInit
  532. #else
  533. #define _ALS_OnGameModeInit
  534. #endif
  535. #define OnGameModeInit S@@_OnGameModeInit
  536. ALS_FORWARD<GameModeInit>
  537. public OnGameModeExit()
  538. {
  539. P:2("Hooks_OnGameModeExit called");
  540. if (!YSI_FILTERSCRIPT)
  541. {
  542. Hooks_OnScriptExit();
  543. //Hooks_OnAnyScriptExit();
  544. }
  545. new
  546. end = YSI_g_sCallbackData[ALS_OnGameModeExit][E_FUNC_HOOK_DATA_END],
  547. start = YSI_g_sCallbackData[ALS_OnGameModeExit][E_FUNC_HOOK_DATA_START],
  548. ret = ALS_R_GameModeExit;
  549. if (start == end)
  550. {
  551. P:2("Hooks_OnGameModeExit end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnGameModeExit));
  552. HOOK_CALL<GameModeExit>
  553. }
  554. new
  555. idx,
  556. pointer,
  557. re = end;
  558. if (end > sizeof (YSI_g_sCallbackAddresses))
  559. {
  560. re = sizeof (YSI_g_sCallbackAddresses);
  561. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  562. }
  563. // Do the initial fast elements.
  564. while (start != re)
  565. {
  566. pointer = YSI_g_sCallbackAddresses[start++];
  567. #emit PUSH.C 0
  568. #emit LCTRL 6
  569. #emit ADD.C 28
  570. #emit PUSH.pri
  571. #emit LOAD.S.pri pointer
  572. #emit SCTRL 6
  573. #emit CONST.alt 0xFFFFFFFF
  574. #emit STOR.S.pri ret
  575. #emit JEQ hooks_do_hooks_call_no_als
  576. }
  577. // Get any remaining pointers the old way.
  578. while (start++ != end)
  579. {
  580. idx = AMX_GetPublicPointer(idx, pointer, "@yH_GameModeExit");
  581. #emit PUSH.C 0
  582. #emit LCTRL 6
  583. #emit ADD.C 28
  584. #emit PUSH.pri
  585. #emit LOAD.S.pri pointer
  586. #emit SCTRL 6
  587. #emit CONST.alt 0xFFFFFFFF
  588. #emit STOR.S.pri ret
  589. #emit JEQ hooks_do_hooks_call_no_als
  590. }
  591. // Do ALS just in case (YSI no longer uses this though now).
  592. P:2("Hooks_OnGameModeExit end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnGameModeExit));
  593. HOOK_RETURN<GameModeExit>
  594. }
  595. #if defined _ALS_OnGameModeExit
  596. #undef OnGameModeExit
  597. #else
  598. #define _ALS_OnGameModeExit
  599. #endif
  600. #define OnGameModeExit S@@_OnGameModeExit
  601. ALS_FORWARD<GameModeExit>
  602. /*static Hooks_OnAnyScriptInit()
  603. {
  604. P:2("Hooks_OnAnyScriptInit called");
  605. new
  606. end = YSI_g_sCallbackData[ALS_OnAnyScriptInit][E_FUNC_HOOK_DATA_END],
  607. start = YSI_g_sCallbackData[ALS_OnAnyScriptInit][E_FUNC_HOOK_DATA_START],
  608. ret = ALS_R_PlayerCommandText;
  609. if (start == end)
  610. {
  611. P:2("Hooks_OnAnyScriptInit end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnAnyScriptInit));
  612. //HOOK_CALL<AnyScriptInit>
  613. hooks_do_hooks_call_no_als:
  614. return;
  615. }
  616. new
  617. idx,
  618. pointer,
  619. re = end;
  620. if (end > sizeof (YSI_g_sCallbackAddresses))
  621. {
  622. re = sizeof (YSI_g_sCallbackAddresses);
  623. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  624. }
  625. // Do the initial fast elements.
  626. while (start != re)
  627. {
  628. pointer = YSI_g_sCallbackAddresses[start++];
  629. #emit PUSH.C 0
  630. #emit LCTRL 6
  631. #emit ADD.C 28
  632. #emit PUSH.pri
  633. #emit LOAD.S.pri pointer
  634. #emit SCTRL 6
  635. #emit CONST.alt 0xFFFFFFFF
  636. // Note that this label is embedded in the "HOOK_CALL" macro above.
  637. #emit STOR.S.pri ret
  638. #emit JEQ hooks_do_hooks_call_no_als
  639. }
  640. // Get any remaining pointers the old way.
  641. while (start++ != end)
  642. {
  643. idx = AMX_GetPublicPointer(idx, pointer, "@yH_AnyScriptInit");
  644. #emit PUSH.C 0
  645. #emit LCTRL 6
  646. #emit ADD.C 28
  647. #emit PUSH.pri
  648. #emit LOAD.S.pri pointer
  649. #emit SCTRL 6
  650. #emit CONST.alt 0xFFFFFFFF
  651. #emit STOR.S.pri ret
  652. #emit JEQ hooks_do_hooks_call_no_als
  653. }
  654. // Do ALS just in case (YSI no longer uses this though now).
  655. P:2("Hooks_OnAnyScriptInit end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnAnyScriptInit));
  656. //HOOK_RETURN<AnyScriptInit>
  657. }
  658. static Hooks_OnAnyScriptExit()
  659. {
  660. P:2("Hooks_OnAnyScriptExit called");
  661. new
  662. end = YSI_g_sCallbackData[ALS_OnAnyScriptExit][E_FUNC_HOOK_DATA_END],
  663. start = YSI_g_sCallbackData[ALS_OnAnyScriptExit][E_FUNC_HOOK_DATA_START],
  664. ret = ALS_R_PlayerCommandText;
  665. if (start == end)
  666. {
  667. P:2("Hooks_OnAnyScriptExit end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnAnyScriptExit));
  668. //HOOK_CALL<AnyScriptExit>
  669. hooks_do_hooks_call_no_als:
  670. return;
  671. }
  672. new
  673. idx,
  674. pointer,
  675. re = end;
  676. if (end > sizeof (YSI_g_sCallbackAddresses))
  677. {
  678. re = sizeof (YSI_g_sCallbackAddresses);
  679. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  680. }
  681. // Do the initial fast elements.
  682. while (start != re)
  683. {
  684. pointer = YSI_g_sCallbackAddresses[start++];
  685. #emit PUSH.C 0
  686. #emit LCTRL 6
  687. #emit ADD.C 28
  688. #emit PUSH.pri
  689. #emit LOAD.S.pri pointer
  690. #emit SCTRL 6
  691. #emit CONST.alt 0xFFFFFFFF
  692. #emit STOR.S.pri ret
  693. #emit JEQ hooks_do_hooks_call_no_als
  694. }
  695. // Get any remaining pointers the old way.
  696. while (start++ != end)
  697. {
  698. idx = AMX_GetPublicPointer(idx, pointer, "@yH_AnyScriptExit");
  699. #emit PUSH.C 0
  700. #emit LCTRL 6
  701. #emit ADD.C 28
  702. #emit PUSH.pri
  703. #emit LOAD.S.pri pointer
  704. #emit SCTRL 6
  705. #emit CONST.alt 0xFFFFFFFF
  706. #emit STOR.S.pri ret
  707. #emit JEQ hooks_do_hooks_call_no_als
  708. }
  709. // Do ALS just in case (YSI no longer uses this though now).
  710. P:2("Hooks_OnAnyScriptExit end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnAnyScriptExit));
  711. //HOOK_RETURN<AnyScriptExit>
  712. }*/
  713. public OnFilterScriptInit()
  714. {
  715. P:2("Hooks_OnFilterScriptInit called");
  716. Hooks_OnScriptInit();
  717. #if defined YSI_LOCK_MODE
  718. 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)
  719. {
  720. y_lock 4;
  721. }
  722. /*if (strval(YSI_gLockData[9]) + strval(YSI_gLockData[11]) + strval(YSI_gLockData[13]) != 1)
  723. {
  724. y_lock 5;
  725. }*/
  726. #endif
  727. //Hooks_OnAnyScriptInit();
  728. //YSI_FILTERSCRIPT = true;
  729. new
  730. end = YSI_g_sCallbackData[ALS_OnFilterScriptInit][E_FUNC_HOOK_DATA_END],
  731. start = YSI_g_sCallbackData[ALS_OnFilterScriptInit][E_FUNC_HOOK_DATA_START],
  732. ret = ALS_R_FilterScriptInit;
  733. if (start == end)
  734. {
  735. P:2("Hooks_OnFilterScriptInit end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnFilterScriptInit));
  736. HOOK_CALL<FilterScriptInit>
  737. }
  738. new
  739. idx,
  740. pointer,
  741. re = end;
  742. if (end > sizeof (YSI_g_sCallbackAddresses))
  743. {
  744. re = sizeof (YSI_g_sCallbackAddresses);
  745. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  746. }
  747. // Do the initial fast elements.
  748. while (start != re)
  749. {
  750. pointer = YSI_g_sCallbackAddresses[start++];
  751. #emit PUSH.C 0
  752. #emit LCTRL 6
  753. #emit ADD.C 28
  754. #emit PUSH.pri
  755. #emit LOAD.S.pri pointer
  756. #emit SCTRL 6
  757. #emit CONST.alt 0xFFFFFFFF
  758. #emit STOR.S.pri ret
  759. #emit JEQ hooks_do_hooks_call_no_als
  760. }
  761. // Get any remaining pointers the old way.
  762. while (start++ != end)
  763. {
  764. idx = AMX_GetPublicPointer(idx, pointer, "@yH_FilterScriptInit");
  765. #emit PUSH.C 0
  766. #emit LCTRL 6
  767. #emit ADD.C 28
  768. #emit PUSH.pri
  769. #emit LOAD.S.pri pointer
  770. #emit SCTRL 6
  771. #emit CONST.alt 0xFFFFFFFF
  772. #emit STOR.S.pri ret
  773. #emit JEQ hooks_do_hooks_call_no_als
  774. }
  775. // Do ALS just in case (YSI no longer uses this though now).
  776. P:2("Hooks_OnFilterScriptInit end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnFilterScriptInit));
  777. HOOK_RETURN<FilterScriptInit>
  778. }
  779. #if defined _ALS_OnFilterScriptInit
  780. #undef OnFilterScriptInit
  781. #else
  782. #define _ALS_OnFilterScriptInit
  783. #endif
  784. #define OnFilterScriptInit S@@_OnFilterScriptInit
  785. ALS_FORWARD<FilterScriptInit>
  786. public OnFilterScriptExit()
  787. {
  788. P:2("Hooks_OnFilterScriptExit called");
  789. Hooks_OnScriptExit();
  790. //Hooks_OnAnyScriptExit();
  791. new
  792. end = YSI_g_sCallbackData[ALS_OnFilterScriptExit][E_FUNC_HOOK_DATA_END],
  793. start = YSI_g_sCallbackData[ALS_OnFilterScriptExit][E_FUNC_HOOK_DATA_START],
  794. ret = ALS_R_FilterScriptExit;
  795. if (start == end)
  796. {
  797. P:2("Hooks_OnFilterScriptExit end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnFilterScriptExit));
  798. HOOK_CALL<FilterScriptExit>
  799. }
  800. new
  801. idx,
  802. pointer,
  803. re = end;
  804. if (end > sizeof (YSI_g_sCallbackAddresses))
  805. {
  806. re = sizeof (YSI_g_sCallbackAddresses);
  807. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  808. }
  809. // Do the initial fast elements.
  810. while (start != re)
  811. {
  812. pointer = YSI_g_sCallbackAddresses[start++];
  813. #emit PUSH.C 0
  814. #emit LCTRL 6
  815. #emit ADD.C 28
  816. #emit PUSH.pri
  817. #emit LOAD.S.pri pointer
  818. #emit SCTRL 6
  819. #emit CONST.alt 0xFFFFFFFF
  820. #emit STOR.S.pri ret
  821. #emit JEQ hooks_do_hooks_call_no_als
  822. }
  823. // Get any remaining pointers the old way.
  824. while (start++ != end)
  825. {
  826. idx = AMX_GetPublicPointer(idx, pointer, "@yH_FilterScriptExit");
  827. #emit PUSH.C 0
  828. #emit LCTRL 6
  829. #emit ADD.C 28
  830. #emit PUSH.pri
  831. #emit LOAD.S.pri pointer
  832. #emit SCTRL 6
  833. #emit CONST.alt 0xFFFFFFFF
  834. #emit STOR.S.pri ret
  835. #emit JEQ hooks_do_hooks_call_no_als
  836. }
  837. // Do ALS just in case (YSI no longer uses this though now).
  838. P:2("Hooks_OnFilterScriptExit end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnFilterScriptExit));
  839. HOOK_RETURN<FilterScriptExit>
  840. }
  841. #if defined _ALS_OnFilterScriptExit
  842. #undef OnFilterScriptExit
  843. #else
  844. #define _ALS_OnFilterScriptExit
  845. #endif
  846. #define OnFilterScriptExit S@@_OnFilterScriptExit
  847. ALS_FORWARD<FilterScriptExit>
  848. public OnPlayerConnect(playerid)
  849. {
  850. P:2("Hooks_OnPlayerConnect called: %d", playerid);
  851. new
  852. end = YSI_g_sCallbackData[ALS_OnPlayerConnect][E_FUNC_HOOK_DATA_END],
  853. start = YSI_g_sCallbackData[ALS_OnPlayerConnect][E_FUNC_HOOK_DATA_START],
  854. ret = ALS_R_PlayerConnect;
  855. if (start == end)
  856. {
  857. P:2("Hooks_OnPlayerConnect end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerConnect));
  858. HOOK_CALL<PlayerConnect>
  859. }
  860. new
  861. pointer,
  862. idx,
  863. re = end;
  864. if (end > sizeof (YSI_g_sCallbackAddresses))
  865. {
  866. re = sizeof (YSI_g_sCallbackAddresses);
  867. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  868. }
  869. // Do the initial fast elements. This was an experiment to play with the
  870. // stack so we only ever need to push the parameters and return address once
  871. // and do the loop using the return address! Shame I've not got it working
  872. // yet really!
  873. /*#emit PUSH.S playerid
  874. #emit PUSH.C 4
  875. #emit LCTRL 6
  876. #emit ADD.C 20
  877. #emit PUSH.pri
  878. // This is done twice so that the second time the loop runs (which isn't
  879. // actually done by "while" anymore, the loop is hidden) the code's correct.
  880. #emit STACK 12
  881. // This is where the code above makes the SCTRL call return to!
  882. #emit STACK 0xFFFFFFF4
  883. //while (start != re)
  884. // NOTE: THIS IS A LOOP! I know it doesn't look like one but it is!
  885. if (start != re)*/
  886. while (start != re)
  887. {
  888. pointer = YSI_g_sCallbackAddresses[start++];
  889. #emit PUSH.S playerid
  890. #emit PUSH.C 4
  891. #emit LCTRL 6
  892. #emit ADD.C 28
  893. #emit PUSH.pri
  894. #emit LOAD.S.pri pointer
  895. #emit SCTRL 6
  896. #emit CONST.alt 0xFFFFFFFF
  897. #emit STOR.S.pri ret
  898. #emit JEQ hooks_do_hooks_call_no_als
  899. }
  900. // Clean up the stack.
  901. // Get any remaining pointers the old way.
  902. while (start++ != end)
  903. {
  904. idx = AMX_GetPublicPointer(idx, pointer, "@yH_PlayerConnect");
  905. #emit PUSH.S playerid
  906. #emit PUSH.C 4
  907. #emit LCTRL 6
  908. #emit ADD.C 28
  909. #emit PUSH.pri
  910. #emit LOAD.S.pri pointer
  911. #emit SCTRL 6
  912. #emit CONST.alt 0xFFFFFFFF
  913. #emit STOR.S.pri ret
  914. #emit JEQ hooks_do_hooks_call_no_als
  915. }
  916. //#emit STACK 12
  917. // Do ALS just in case (YSI no longer uses this though now).
  918. P:2("Hooks_OnPlayerConnect end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerConnect));
  919. HOOK_RETURN<PlayerConnect>
  920. }
  921. #if defined _ALS_OnPlayerConnect
  922. #undef OnPlayerConnect
  923. #else
  924. #define _ALS_OnPlayerConnect
  925. #endif
  926. #define OnPlayerConnect S@@_OnPlayerConnect
  927. ALS_FORWARD<PlayerConnect>
  928. public OnPlayerDisconnect(playerid, reason)
  929. {
  930. P:2("Hooks_OnPlayerDisconnect called: %d, %d", playerid, reason);
  931. new
  932. end = YSI_g_sCallbackData[ALS_OnPlayerDisconnect][E_FUNC_HOOK_DATA_END],
  933. start = YSI_g_sCallbackData[ALS_OnPlayerDisconnect][E_FUNC_HOOK_DATA_START],
  934. ret = ALS_R_PlayerDisconnect;
  935. if (start == end)
  936. {
  937. P:2("Hooks_OnPlayerDisconnect end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerDisconnect));
  938. HOOK_CALL<PlayerDisconnect>
  939. }
  940. new
  941. idx,
  942. pointer,
  943. re = end;
  944. if (end > sizeof (YSI_g_sCallbackAddresses))
  945. {
  946. re = sizeof (YSI_g_sCallbackAddresses);
  947. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  948. }
  949. // Do the initial fast elements.
  950. while (start != re)
  951. {
  952. pointer = YSI_g_sCallbackAddresses[start++];
  953. #emit PUSH.S reason
  954. #emit PUSH.S playerid
  955. #emit PUSH.C 8
  956. #emit LCTRL 6
  957. #emit ADD.C 28
  958. #emit PUSH.pri
  959. #emit LOAD.S.pri pointer
  960. #emit SCTRL 6
  961. #emit CONST.alt 0xFFFFFFFF
  962. #emit STOR.S.pri ret
  963. #emit JEQ hooks_do_hooks_call_no_als
  964. }
  965. // Get any remaining pointers the old way.
  966. while (start++ != end)
  967. {
  968. idx = AMX_GetPublicPointer(idx, pointer, "@yH_PlayerDisconnect");
  969. #emit PUSH.S reason
  970. #emit PUSH.S playerid
  971. #emit PUSH.C 8
  972. #emit LCTRL 6
  973. #emit ADD.C 28
  974. #emit PUSH.pri
  975. #emit LOAD.S.pri pointer
  976. #emit SCTRL 6
  977. #emit CONST.alt 0xFFFFFFFF
  978. #emit STOR.S.pri ret
  979. #emit JEQ hooks_do_hooks_call_no_als
  980. }
  981. // Do ALS just in case (YSI no longer uses this though now).
  982. P:2("Hooks_OnPlayerDisconnect end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerDisconnect));
  983. HOOK_RETURN<PlayerDisconnect>
  984. }
  985. #if defined _ALS_OnPlayerDisconnect
  986. #undef OnPlayerDisconnect
  987. #else
  988. #define _ALS_OnPlayerDisconnect
  989. #endif
  990. #define OnPlayerDisconnect S@@_OnPlayerDisconnect
  991. ALS_FORWARD<PlayerDisconnect>
  992. public OnPlayerSpawn(playerid)
  993. {
  994. P:2("Hooks_OnPlayerSpawn called: %d", playerid);
  995. new
  996. end = YSI_g_sCallbackData[ALS_OnPlayerSpawn][E_FUNC_HOOK_DATA_END],
  997. start = YSI_g_sCallbackData[ALS_OnPlayerSpawn][E_FUNC_HOOK_DATA_START],
  998. ret = ALS_R_PlayerSpawn;
  999. if (start == end)
  1000. {
  1001. P:2("Hooks_OnPlayerSpawn end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerSpawn));
  1002. HOOK_CALL<PlayerSpawn>
  1003. }
  1004. new
  1005. idx,
  1006. pointer,
  1007. re = end;
  1008. if (end > sizeof (YSI_g_sCallbackAddresses))
  1009. {
  1010. re = sizeof (YSI_g_sCallbackAddresses);
  1011. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  1012. }
  1013. // Do the initial fast elements.
  1014. while (start != re)
  1015. {
  1016. pointer = YSI_g_sCallbackAddresses[start++];
  1017. #emit PUSH.S playerid
  1018. #emit PUSH.C 4
  1019. #emit LCTRL 6
  1020. #emit ADD.C 28
  1021. #emit PUSH.pri
  1022. #emit LOAD.S.pri pointer
  1023. #emit SCTRL 6
  1024. #emit CONST.alt 0xFFFFFFFF
  1025. #emit STOR.S.pri ret
  1026. #emit JEQ hooks_do_hooks_call_no_als
  1027. }
  1028. // Get any remaining pointers the old way.
  1029. while (start++ != end)
  1030. {
  1031. idx = AMX_GetPublicPointer(idx, pointer, "@yH_PlayerSpawn");
  1032. #emit PUSH.S playerid
  1033. #emit PUSH.C 4
  1034. #emit LCTRL 6
  1035. #emit ADD.C 28
  1036. #emit PUSH.pri
  1037. #emit LOAD.S.pri pointer
  1038. #emit SCTRL 6
  1039. #emit CONST.alt 0xFFFFFFFF
  1040. #emit STOR.S.pri ret
  1041. #emit JEQ hooks_do_hooks_call_no_als
  1042. }
  1043. // Do ALS just in case (YSI no longer uses this though now).
  1044. P:2("Hooks_OnPlayerSpawn end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerSpawn));
  1045. HOOK_RETURN<PlayerSpawn>
  1046. }
  1047. #if defined _ALS_OnPlayerSpawn
  1048. #undef OnPlayerSpawn
  1049. #else
  1050. #define _ALS_OnPlayerSpawn
  1051. #endif
  1052. #define OnPlayerSpawn S@@_OnPlayerSpawn
  1053. ALS_FORWARD<PlayerSpawn>
  1054. public OnPlayerDeath(playerid, killerid, reason)
  1055. {
  1056. P:2("Hooks_OnPlayerDeath called: %d, %d, %d", playerid, killerid, reason);
  1057. new
  1058. end = YSI_g_sCallbackData[ALS_OnPlayerDeath][E_FUNC_HOOK_DATA_END],
  1059. start = YSI_g_sCallbackData[ALS_OnPlayerDeath][E_FUNC_HOOK_DATA_START],
  1060. ret = ALS_R_PlayerDeath;
  1061. if (start == end)
  1062. {
  1063. P:2("Hooks_OnPlayerDeath end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerDeath));
  1064. HOOK_CALL<PlayerDeath>
  1065. }
  1066. new
  1067. idx,
  1068. pointer,
  1069. re = end;
  1070. if (end > sizeof (YSI_g_sCallbackAddresses))
  1071. {
  1072. re = sizeof (YSI_g_sCallbackAddresses);
  1073. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  1074. }
  1075. // Do the initial fast elements.
  1076. while (start != re)
  1077. {
  1078. pointer = YSI_g_sCallbackAddresses[start++];
  1079. #emit PUSH.S reason
  1080. #emit PUSH.S killerid
  1081. #emit PUSH.S playerid
  1082. #emit PUSH.C 12
  1083. #emit LCTRL 6
  1084. #emit ADD.C 28
  1085. #emit PUSH.pri
  1086. #emit LOAD.S.pri pointer
  1087. #emit SCTRL 6
  1088. #emit CONST.alt 0xFFFFFFFF
  1089. #emit STOR.S.pri ret
  1090. #emit JEQ hooks_do_hooks_call_no_als
  1091. }
  1092. // Get any remaining pointers the old way.
  1093. while (start++ != end)
  1094. {
  1095. idx = AMX_GetPublicPointer(idx, pointer, "@yH_PlayerDeath");
  1096. #emit PUSH.S reason
  1097. #emit PUSH.S killerid
  1098. #emit PUSH.S playerid
  1099. #emit PUSH.C 12
  1100. #emit LCTRL 6
  1101. #emit ADD.C 28
  1102. #emit PUSH.pri
  1103. #emit LOAD.S.pri pointer
  1104. #emit SCTRL 6
  1105. #emit CONST.alt 0xFFFFFFFF
  1106. #emit STOR.S.pri ret
  1107. #emit JEQ hooks_do_hooks_call_no_als
  1108. }
  1109. // Do ALS just in case (YSI no longer uses this though now).
  1110. P:2("Hooks_OnPlayerDeath end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerDeath));
  1111. HOOK_RETURN<PlayerDeath>
  1112. }
  1113. #if defined _ALS_OnPlayerDeath
  1114. #undef OnPlayerDeath
  1115. #else
  1116. #define _ALS_OnPlayerDeath
  1117. #endif
  1118. #define OnPlayerDeath S@@_OnPlayerDeath
  1119. ALS_FORWARD<PlayerDeath>
  1120. public OnVehicleSpawn(vehicleid)
  1121. {
  1122. P:2("Hooks_OnVehicleSpawn called: %d", vehicleid);
  1123. new
  1124. end = YSI_g_sCallbackData[ALS_OnVehicleSpawn][E_FUNC_HOOK_DATA_END],
  1125. start = YSI_g_sCallbackData[ALS_OnVehicleSpawn][E_FUNC_HOOK_DATA_START],
  1126. ret = ALS_R_VehicleSpawn;
  1127. if (start == end)
  1128. {
  1129. P:2("Hooks_OnVehicleSpawn end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnVehicleSpawn));
  1130. HOOK_CALL<VehicleSpawn>
  1131. }
  1132. new
  1133. idx,
  1134. pointer,
  1135. re = end;
  1136. if (end > sizeof (YSI_g_sCallbackAddresses))
  1137. {
  1138. re = sizeof (YSI_g_sCallbackAddresses);
  1139. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  1140. }
  1141. // Do the initial fast elements.
  1142. while (start != re)
  1143. {
  1144. pointer = YSI_g_sCallbackAddresses[start++];
  1145. #emit PUSH.S vehicleid
  1146. #emit PUSH.C 4
  1147. #emit LCTRL 6
  1148. #emit ADD.C 28
  1149. #emit PUSH.pri
  1150. #emit LOAD.S.pri pointer
  1151. #emit SCTRL 6
  1152. #emit CONST.alt 0xFFFFFFFF
  1153. #emit STOR.S.pri ret
  1154. #emit JEQ hooks_do_hooks_call_no_als
  1155. }
  1156. // Get any remaining pointers the old way.
  1157. while (start++ != end)
  1158. {
  1159. idx = AMX_GetPublicPointer(idx, pointer, "@yH_VehicleSpawn");
  1160. #emit PUSH.S vehicleid
  1161. #emit PUSH.C 4
  1162. #emit LCTRL 6
  1163. #emit ADD.C 28
  1164. #emit PUSH.pri
  1165. #emit LOAD.S.pri pointer
  1166. #emit SCTRL 6
  1167. #emit CONST.alt 0xFFFFFFFF
  1168. #emit STOR.S.pri ret
  1169. #emit JEQ hooks_do_hooks_call_no_als
  1170. }
  1171. // Do ALS just in case (YSI no longer uses this though now).
  1172. P:2("Hooks_OnVehicleSpawn end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnVehicleSpawn));
  1173. HOOK_RETURN<VehicleSpawn>
  1174. }
  1175. #if defined _ALS_OnVehicleSpawn
  1176. #undef OnVehicleSpawn
  1177. #else
  1178. #define _ALS_OnVehicleSpawn
  1179. #endif
  1180. #define OnVehicleSpawn S@@_OnVehicleSpawn
  1181. ALS_FORWARD<VehicleSpawn>
  1182. public OnVehicleDeath(vehicleid, killerid)
  1183. {
  1184. P:2("Hooks_OnVehicleDeath called: %d, %d", vehicleid, killerid);
  1185. new
  1186. end = YSI_g_sCallbackData[ALS_OnVehicleDeath][E_FUNC_HOOK_DATA_END],
  1187. start = YSI_g_sCallbackData[ALS_OnVehicleDeath][E_FUNC_HOOK_DATA_START],
  1188. ret = ALS_R_VehicleDeath;
  1189. if (start == end)
  1190. {
  1191. P:2("Hooks_OnVehicleDeath end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnVehicleDeath));
  1192. HOOK_CALL<VehicleDeath>
  1193. }
  1194. new
  1195. idx,
  1196. pointer,
  1197. re = end;
  1198. if (end > sizeof (YSI_g_sCallbackAddresses))
  1199. {
  1200. re = sizeof (YSI_g_sCallbackAddresses);
  1201. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  1202. }
  1203. // Do the initial fast elements.
  1204. while (start != re)
  1205. {
  1206. pointer = YSI_g_sCallbackAddresses[start++];
  1207. #emit PUSH.S killerid
  1208. #emit PUSH.S vehicleid
  1209. #emit PUSH.C 8
  1210. #emit LCTRL 6
  1211. #emit ADD.C 28
  1212. #emit PUSH.pri
  1213. #emit LOAD.S.pri pointer
  1214. #emit SCTRL 6
  1215. #emit CONST.alt 0xFFFFFFFF
  1216. #emit STOR.S.pri ret
  1217. #emit JEQ hooks_do_hooks_call_no_als
  1218. }
  1219. // Get any remaining pointers the old way.
  1220. while (start++ != end)
  1221. {
  1222. idx = AMX_GetPublicPointer(idx, pointer, "@yH_VehicleDeath");
  1223. #emit PUSH.S killerid
  1224. #emit PUSH.S vehicleid
  1225. #emit PUSH.C 8
  1226. #emit LCTRL 6
  1227. #emit ADD.C 28
  1228. #emit PUSH.pri
  1229. #emit LOAD.S.pri pointer
  1230. #emit SCTRL 6
  1231. #emit CONST.alt 0xFFFFFFFF
  1232. #emit STOR.S.pri ret
  1233. #emit JEQ hooks_do_hooks_call_no_als
  1234. }
  1235. // Do ALS just in case (YSI no longer uses this though now).
  1236. P:2("Hooks_OnVehicleDeath end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnVehicleDeath));
  1237. HOOK_RETURN<VehicleDeath>
  1238. }
  1239. #if defined _ALS_OnVehicleDeath
  1240. #undef OnVehicleDeath
  1241. #else
  1242. #define _ALS_OnVehicleDeath
  1243. #endif
  1244. #define OnVehicleDeath S@@_OnVehicleDeath
  1245. ALS_FORWARD<VehicleDeath>
  1246. public OnPlayerText(playerid, text[])
  1247. {
  1248. P:2("Hooks_OnPlayerText called: %d, \"%s\"", playerid, text);
  1249. new
  1250. end = YSI_g_sCallbackData[ALS_OnPlayerText][E_FUNC_HOOK_DATA_END],
  1251. start = YSI_g_sCallbackData[ALS_OnPlayerText][E_FUNC_HOOK_DATA_START],
  1252. ret = ALS_R_PlayerText;
  1253. if (start == end)
  1254. {
  1255. P:2("Hooks_OnPlayerText end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerText));
  1256. HOOK_CALL<PlayerText>
  1257. }
  1258. new
  1259. idx,
  1260. pointer,
  1261. re = end;
  1262. if (end > sizeof (YSI_g_sCallbackAddresses))
  1263. {
  1264. re = sizeof (YSI_g_sCallbackAddresses);
  1265. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  1266. }
  1267. // Do the initial fast elements.
  1268. while (start != re)
  1269. {
  1270. pointer = YSI_g_sCallbackAddresses[start++];
  1271. #emit PUSH.S text
  1272. #emit PUSH.S playerid
  1273. #emit PUSH.C 8
  1274. #emit LCTRL 6
  1275. #emit ADD.C 28
  1276. #emit PUSH.pri
  1277. #emit LOAD.S.pri pointer
  1278. #emit SCTRL 6
  1279. #emit CONST.alt 0xFFFFFFFF
  1280. #emit STOR.S.pri ret
  1281. #emit JEQ hooks_do_hooks_call_no_als
  1282. }
  1283. // Get any remaining pointers the old way.
  1284. while (start++ != end)
  1285. {
  1286. idx = AMX_GetPublicPointer(idx, pointer, "@yH_PlayerText");
  1287. #emit PUSH.S text
  1288. #emit PUSH.S playerid
  1289. #emit PUSH.C 8
  1290. #emit LCTRL 6
  1291. #emit ADD.C 28
  1292. #emit PUSH.pri
  1293. #emit LOAD.S.pri pointer
  1294. #emit SCTRL 6
  1295. #emit CONST.alt 0xFFFFFFFF
  1296. #emit STOR.S.pri ret
  1297. #emit JEQ hooks_do_hooks_call_no_als
  1298. }
  1299. // Do ALS just in case (YSI no longer uses this though now).
  1300. P:2("Hooks_OnPlayerText end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerText));
  1301. HOOK_RETURN<PlayerText>
  1302. }
  1303. #if defined _ALS_OnPlayerText
  1304. #undef OnPlayerText
  1305. #else
  1306. #define _ALS_OnPlayerText
  1307. #endif
  1308. #define OnPlayerText S@@_OnPlayerText
  1309. ALS_FORWARD<PlayerText>
  1310. public OnPlayerCommandText(playerid, cmdtext[])
  1311. {
  1312. P:2("Hooks_OnPlayerCommandText called: %d, \"%s\"", playerid, cmdtext);
  1313. new
  1314. end = YSI_g_sCallbackData[ALS_OnPlayerCommandText][E_FUNC_HOOK_DATA_END],
  1315. start = YSI_g_sCallbackData[ALS_OnPlayerCommandText][E_FUNC_HOOK_DATA_START],
  1316. ret = ALS_R_PlayerCommandText;
  1317. if (start == end)
  1318. {
  1319. P:2("Hooks_OnPlayerCommandText end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerCommandText));
  1320. HOOK_CALL<PlayerCommandText>
  1321. }
  1322. new
  1323. idx,
  1324. pointer,
  1325. re = end;
  1326. if (end > sizeof (YSI_g_sCallbackAddresses))
  1327. {
  1328. re = sizeof (YSI_g_sCallbackAddresses);
  1329. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  1330. }
  1331. // Do the initial fast elements.
  1332. while (start != re)
  1333. {
  1334. pointer = YSI_g_sCallbackAddresses[start++];
  1335. #emit PUSH.S cmdtext
  1336. #emit PUSH.S playerid
  1337. #emit PUSH.C 8
  1338. #emit LCTRL 6
  1339. #emit ADD.C 28
  1340. #emit PUSH.pri
  1341. #emit LOAD.S.pri pointer
  1342. #emit SCTRL 6
  1343. #emit CONST.alt 0xFFFFFFFF
  1344. #emit STOR.S.pri ret
  1345. #emit JEQ hooks_do_hooks_call_no_als
  1346. }
  1347. // Get any remaining pointers the old way.
  1348. while (start++ != end)
  1349. {
  1350. idx = AMX_GetPublicPointer(idx, pointer, "@yH_PlayerCommandText");
  1351. #emit PUSH.S cmdtext
  1352. #emit PUSH.S playerid
  1353. #emit PUSH.C 8
  1354. #emit LCTRL 6
  1355. #emit ADD.C 28
  1356. #emit PUSH.pri
  1357. #emit LOAD.S.pri pointer
  1358. #emit SCTRL 6
  1359. #emit CONST.alt 0xFFFFFFFF
  1360. #emit STOR.S.pri ret
  1361. #emit JEQ hooks_do_hooks_call_no_als
  1362. }
  1363. // Do ALS just in case (YSI no longer uses this though now).
  1364. P:2("Hooks_OnPlayerCommandText end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerCommandText));
  1365. HOOK_RETURN<PlayerCommandText>
  1366. }
  1367. #if defined _ALS_OnPlayerCommandText
  1368. #undef OnPlayerCommandText
  1369. #else
  1370. #define _ALS_OnPlayerCommandText
  1371. #endif
  1372. #define OnPlayerCommandText S@@_OnPlayerCommandText
  1373. ALS_FORWARD<PlayerCommandText>
  1374. public OnPlayerRequestClass(playerid, classid)
  1375. {
  1376. P:2("Hooks_OnPlayerRequestClass called: %d, %d", playerid, classid);
  1377. new
  1378. end = YSI_g_sCallbackData[ALS_OnPlayerRequestClass][E_FUNC_HOOK_DATA_END],
  1379. start = YSI_g_sCallbackData[ALS_OnPlayerRequestClass][E_FUNC_HOOK_DATA_START],
  1380. ret = ALS_R_PlayerRequestClass;
  1381. if (start == end)
  1382. {
  1383. P:2("Hooks_OnPlayerRequestClass end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerRequestClass));
  1384. HOOK_CALL<PlayerRequestClass>
  1385. }
  1386. new
  1387. idx,
  1388. pointer,
  1389. re = end;
  1390. if (end > sizeof (YSI_g_sCallbackAddresses))
  1391. {
  1392. re = sizeof (YSI_g_sCallbackAddresses);
  1393. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  1394. }
  1395. // Do the initial fast elements.
  1396. while (start != re)
  1397. {
  1398. pointer = YSI_g_sCallbackAddresses[start++];
  1399. #emit PUSH.S classid
  1400. #emit PUSH.S playerid
  1401. #emit PUSH.C 8
  1402. #emit LCTRL 6
  1403. #emit ADD.C 28
  1404. #emit PUSH.pri
  1405. #emit LOAD.S.pri pointer
  1406. #emit SCTRL 6
  1407. #emit CONST.alt 0xFFFFFFFF
  1408. #emit STOR.S.pri ret
  1409. #emit JEQ hooks_do_hooks_call_no_als
  1410. }
  1411. // Get any remaining pointers the old way.
  1412. while (start++ != end)
  1413. {
  1414. idx = AMX_GetPublicPointer(idx, pointer, "@yH_PlayerRequestClass");
  1415. #emit PUSH.S classid
  1416. #emit PUSH.S playerid
  1417. #emit PUSH.C 8
  1418. #emit LCTRL 6
  1419. #emit ADD.C 28
  1420. #emit PUSH.pri
  1421. #emit LOAD.S.pri pointer
  1422. #emit SCTRL 6
  1423. #emit CONST.alt 0xFFFFFFFF
  1424. #emit STOR.S.pri ret
  1425. #emit JEQ hooks_do_hooks_call_no_als
  1426. }
  1427. // Do ALS just in case (YSI no longer uses this though now).
  1428. P:2("Hooks_OnPlayerRequestClass end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerRequestClass));
  1429. HOOK_RETURN<PlayerRequestClass>
  1430. }
  1431. #if defined _ALS_OnPlayerRequestClass
  1432. #undef OnPlayerRequestClass
  1433. #else
  1434. #define _ALS_OnPlayerRequestClass
  1435. #endif
  1436. #define OnPlayerRequestClass S@@_OnPlayerRequestClass
  1437. ALS_FORWARD<PlayerRequestClass>
  1438. public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
  1439. {
  1440. P:2("Hooks_OnPlayerEnterVehicle called: %d, %d, %d", playerid, vehicleid, ispassenger);
  1441. new
  1442. end = YSI_g_sCallbackData[ALS_OnPlayerEnterVehicle][E_FUNC_HOOK_DATA_END],
  1443. start = YSI_g_sCallbackData[ALS_OnPlayerEnterVehicle][E_FUNC_HOOK_DATA_START],
  1444. ret = ALS_R_PlayerEnterVehicle;
  1445. if (start == end)
  1446. {
  1447. P:2("Hooks_OnPlayerEnterVehicle end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerEnterVehicle));
  1448. HOOK_CALL<PlayerEnterVehicle>
  1449. }
  1450. new
  1451. idx,
  1452. pointer,
  1453. re = end;
  1454. if (end > sizeof (YSI_g_sCallbackAddresses))
  1455. {
  1456. re = sizeof (YSI_g_sCallbackAddresses);
  1457. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  1458. }
  1459. // Do the initial fast elements.
  1460. while (start != re)
  1461. {
  1462. pointer = YSI_g_sCallbackAddresses[start++];
  1463. #emit PUSH.S ispassenger
  1464. #emit PUSH.S vehicleid
  1465. #emit PUSH.S playerid
  1466. #emit PUSH.C 12
  1467. #emit LCTRL 6
  1468. #emit ADD.C 28
  1469. #emit PUSH.pri
  1470. #emit LOAD.S.pri pointer
  1471. #emit SCTRL 6
  1472. #emit CONST.alt 0xFFFFFFFF
  1473. #emit STOR.S.pri ret
  1474. #emit JEQ hooks_do_hooks_call_no_als
  1475. }
  1476. // Get any remaining pointers the old way.
  1477. while (start++ != end)
  1478. {
  1479. idx = AMX_GetPublicPointer(idx, pointer, "@yH_PlayerEnterVehicle");
  1480. #emit PUSH.S ispassenger
  1481. #emit PUSH.S vehicleid
  1482. #emit PUSH.S playerid
  1483. #emit PUSH.C 12
  1484. #emit LCTRL 6
  1485. #emit ADD.C 28
  1486. #emit PUSH.pri
  1487. #emit LOAD.S.pri pointer
  1488. #emit SCTRL 6
  1489. #emit CONST.alt 0xFFFFFFFF
  1490. #emit STOR.S.pri ret
  1491. #emit JEQ hooks_do_hooks_call_no_als
  1492. }
  1493. // Do ALS just in case (YSI no longer uses this though now).
  1494. P:2("Hooks_OnPlayerEnterVehicle end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerEnterVehicle));
  1495. HOOK_RETURN<PlayerEnterVehicle>
  1496. }
  1497. #if defined _ALS_OnPlayerEnterVehicle
  1498. #undef OnPlayerEnterVehicle
  1499. #else
  1500. #define _ALS_OnPlayerEnterVehicle
  1501. #endif
  1502. #define OnPlayerEnterVehicle S@@_OnPlayerEnterVehicle
  1503. ALS_FORWARD<PlayerEnterVehicle>
  1504. public OnPlayerExitVehicle(playerid, vehicleid)
  1505. {
  1506. P:2("Hooks_OnPlayerExitVehicle called: %d, %d", playerid, vehicleid);
  1507. new
  1508. end = YSI_g_sCallbackData[ALS_OnPlayerExitVehicle][E_FUNC_HOOK_DATA_END],
  1509. start = YSI_g_sCallbackData[ALS_OnPlayerExitVehicle][E_FUNC_HOOK_DATA_START],
  1510. ret = ALS_R_PlayerExitVehicle;
  1511. if (start == end)
  1512. {
  1513. P:2("Hooks_OnPlayerExitVehicle end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerExitVehicle));
  1514. HOOK_CALL<PlayerExitVehicle>
  1515. }
  1516. new
  1517. idx,
  1518. pointer,
  1519. re = end;
  1520. if (end > sizeof (YSI_g_sCallbackAddresses))
  1521. {
  1522. re = sizeof (YSI_g_sCallbackAddresses);
  1523. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  1524. }
  1525. // Do the initial fast elements.
  1526. while (start != re)
  1527. {
  1528. pointer = YSI_g_sCallbackAddresses[start++];
  1529. #emit PUSH.S vehicleid
  1530. #emit PUSH.S playerid
  1531. #emit PUSH.C 8
  1532. #emit LCTRL 6
  1533. #emit ADD.C 28
  1534. #emit PUSH.pri
  1535. #emit LOAD.S.pri pointer
  1536. #emit SCTRL 6
  1537. #emit CONST.alt 0xFFFFFFFF
  1538. #emit STOR.S.pri ret
  1539. #emit JEQ hooks_do_hooks_call_no_als
  1540. }
  1541. // Get any remaining pointers the old way.
  1542. while (start++ != end)
  1543. {
  1544. idx = AMX_GetPublicPointer(idx, pointer, "@yH_PlayerExitVehicle");
  1545. #emit PUSH.S vehicleid
  1546. #emit PUSH.S playerid
  1547. #emit PUSH.C 8
  1548. #emit LCTRL 6
  1549. #emit ADD.C 28
  1550. #emit PUSH.pri
  1551. #emit LOAD.S.pri pointer
  1552. #emit SCTRL 6
  1553. #emit CONST.alt 0xFFFFFFFF
  1554. #emit STOR.S.pri ret
  1555. #emit JEQ hooks_do_hooks_call_no_als
  1556. }
  1557. // Do ALS just in case (YSI no longer uses this though now).
  1558. P:2("Hooks_OnPlayerExitVehicle end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerExitVehicle));
  1559. HOOK_RETURN<PlayerExitVehicle>
  1560. }
  1561. #if defined _ALS_OnPlayerExitVehicle
  1562. #undef OnPlayerExitVehicle
  1563. #else
  1564. #define _ALS_OnPlayerExitVehicle
  1565. #endif
  1566. #define OnPlayerExitVehicle S@@_OnPlayerExitVehicle
  1567. ALS_FORWARD<PlayerExitVehicle>
  1568. public OnPlayerStateChange(playerid, newstate, oldstate)
  1569. {
  1570. P:2("Hooks_OnPlayerStateChange called: %d, %d, %d", playerid, newstate, oldstate);
  1571. new
  1572. end = YSI_g_sCallbackData[ALS_OnPlayerStateChange][E_FUNC_HOOK_DATA_END],
  1573. start = YSI_g_sCallbackData[ALS_OnPlayerStateChange][E_FUNC_HOOK_DATA_START],
  1574. ret = ALS_R_PlayerStateChange;
  1575. if (start == end)
  1576. {
  1577. P:2("Hooks_OnPlayerStateChange end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerStateChange));
  1578. HOOK_CALL<PlayerStateChange>
  1579. }
  1580. new
  1581. idx,
  1582. pointer,
  1583. re = end;
  1584. if (end > sizeof (YSI_g_sCallbackAddresses))
  1585. {
  1586. re = sizeof (YSI_g_sCallbackAddresses);
  1587. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  1588. }
  1589. // Do the initial fast elements.
  1590. while (start != re)
  1591. {
  1592. pointer = YSI_g_sCallbackAddresses[start++];
  1593. #emit PUSH.S oldstate
  1594. #emit PUSH.S newstate
  1595. #emit PUSH.S playerid
  1596. #emit PUSH.C 12
  1597. #emit LCTRL 6
  1598. #emit ADD.C 28
  1599. #emit PUSH.pri
  1600. #emit LOAD.S.pri pointer
  1601. #emit SCTRL 6
  1602. #emit CONST.alt 0xFFFFFFFF
  1603. #emit STOR.S.pri ret
  1604. #emit JEQ hooks_do_hooks_call_no_als
  1605. }
  1606. // Get any remaining pointers the old way.
  1607. while (start++ != end)
  1608. {
  1609. idx = AMX_GetPublicPointer(idx, pointer, "@yH_PlayerStateChange");
  1610. #emit PUSH.S oldstate
  1611. #emit PUSH.S newstate
  1612. #emit PUSH.S playerid
  1613. #emit PUSH.C 12
  1614. #emit LCTRL 6
  1615. #emit ADD.C 28
  1616. #emit PUSH.pri
  1617. #emit LOAD.S.pri pointer
  1618. #emit SCTRL 6
  1619. #emit CONST.alt 0xFFFFFFFF
  1620. #emit STOR.S.pri ret
  1621. #emit JEQ hooks_do_hooks_call_no_als
  1622. }
  1623. // Do ALS just in case (YSI no longer uses this though now).
  1624. P:2("Hooks_OnPlayerStateChange end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerStateChange));
  1625. HOOK_RETURN<PlayerStateChange>
  1626. }
  1627. #if defined _ALS_OnPlayerStateChange
  1628. #undef OnPlayerStateChange
  1629. #else
  1630. #define _ALS_OnPlayerStateChange
  1631. #endif
  1632. #define OnPlayerStateChange S@@_OnPlayerStateChange
  1633. ALS_FORWARD<PlayerStateChange>
  1634. public OnPlayerEnterCheckpoint(playerid)
  1635. {
  1636. P:2("Hooks_OnPlayerEnterCheckpoint called: %d", playerid);
  1637. new
  1638. end = YSI_g_sCallbackData[ALS_OnPlayerEnterCheckpoint][E_FUNC_HOOK_DATA_END],
  1639. start = YSI_g_sCallbackData[ALS_OnPlayerEnterCheckpoint][E_FUNC_HOOK_DATA_START],
  1640. ret = ALS_R_PlayerEnterCheckpoint;
  1641. if (start == end)
  1642. {
  1643. P:2("Hooks_OnPlayerEnterCheckpoint end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerEnterCheckpoint));
  1644. HOOK_CALL<PlayerEnterCheckpoint>
  1645. }
  1646. new
  1647. idx,
  1648. pointer,
  1649. re = end;
  1650. if (end > sizeof (YSI_g_sCallbackAddresses))
  1651. {
  1652. re = sizeof (YSI_g_sCallbackAddresses);
  1653. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  1654. }
  1655. // Do the initial fast elements.
  1656. while (start != re)
  1657. {
  1658. pointer = YSI_g_sCallbackAddresses[start++];
  1659. #emit PUSH.S playerid
  1660. #emit PUSH.C 4
  1661. #emit LCTRL 6
  1662. #emit ADD.C 28
  1663. #emit PUSH.pri
  1664. #emit LOAD.S.pri pointer
  1665. #emit SCTRL 6
  1666. #emit CONST.alt 0xFFFFFFFF
  1667. #emit STOR.S.pri ret
  1668. #emit JEQ hooks_do_hooks_call_no_als
  1669. }
  1670. // Get any remaining pointers the old way.
  1671. while (start++ != end)
  1672. {
  1673. idx = AMX_GetPublicPointer(idx, pointer, "@yH_PlayerEnterCheckpoint");
  1674. #emit PUSH.S playerid
  1675. #emit PUSH.C 4
  1676. #emit LCTRL 6
  1677. #emit ADD.C 28
  1678. #emit PUSH.pri
  1679. #emit LOAD.S.pri pointer
  1680. #emit SCTRL 6
  1681. #emit CONST.alt 0xFFFFFFFF
  1682. #emit STOR.S.pri ret
  1683. #emit JEQ hooks_do_hooks_call_no_als
  1684. }
  1685. // Do ALS just in case (YSI no longer uses this though now).
  1686. P:2("Hooks_OnPlayerEnterCheckpoint end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerEnterCheckpoint));
  1687. HOOK_RETURN<PlayerEnterCheckpoint>
  1688. }
  1689. #if defined _ALS_OnPlayerEnterCheckpoint
  1690. #undef OnPlayerEnterCheckpoint
  1691. #else
  1692. #define _ALS_OnPlayerEnterCheckpoint
  1693. #endif
  1694. #define OnPlayerEnterCheckpoint S@@_OnPlayerEnterCheckpoint
  1695. ALS_FORWARD<PlayerEnterCheckpoint>
  1696. public OnPlayerLeaveCheckpoint(playerid)
  1697. {
  1698. P:2("Hooks_OnPlayerLeaveCheckpoint called: %d", playerid);
  1699. new
  1700. end = YSI_g_sCallbackData[ALS_OnPlayerLeaveCheckpoint][E_FUNC_HOOK_DATA_END],
  1701. start = YSI_g_sCallbackData[ALS_OnPlayerLeaveCheckpoint][E_FUNC_HOOK_DATA_START],
  1702. ret = ALS_R_PlayerLeaveCheckpoint;
  1703. if (start == end)
  1704. {
  1705. P:2("Hooks_OnPlayerLeaveCheckpoint end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerLeaveCheckpoint));
  1706. HOOK_CALL<PlayerLeaveCheckpoint>
  1707. }
  1708. new
  1709. idx,
  1710. pointer,
  1711. re = end;
  1712. if (end > sizeof (YSI_g_sCallbackAddresses))
  1713. {
  1714. re = sizeof (YSI_g_sCallbackAddresses);
  1715. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  1716. }
  1717. // Do the initial fast elements.
  1718. while (start != re)
  1719. {
  1720. pointer = YSI_g_sCallbackAddresses[start++];
  1721. #emit PUSH.S playerid
  1722. #emit PUSH.C 4
  1723. #emit LCTRL 6
  1724. #emit ADD.C 28
  1725. #emit PUSH.pri
  1726. #emit LOAD.S.pri pointer
  1727. #emit SCTRL 6
  1728. #emit CONST.alt 0xFFFFFFFF
  1729. #emit STOR.S.pri ret
  1730. #emit JEQ hooks_do_hooks_call_no_als
  1731. }
  1732. // Get any remaining pointers the old way.
  1733. while (start++ != end)
  1734. {
  1735. idx = AMX_GetPublicPointer(idx, pointer, "@yH_PlayerLeaveCheckpoint");
  1736. #emit PUSH.S playerid
  1737. #emit PUSH.C 4
  1738. #emit LCTRL 6
  1739. #emit ADD.C 28
  1740. #emit PUSH.pri
  1741. #emit LOAD.S.pri pointer
  1742. #emit SCTRL 6
  1743. #emit CONST.alt 0xFFFFFFFF
  1744. #emit STOR.S.pri ret
  1745. #emit JEQ hooks_do_hooks_call_no_als
  1746. }
  1747. // Do ALS just in case (YSI no longer uses this though now).
  1748. P:2("Hooks_OnPlayerLeaveCheckpoint end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerLeaveCheckpoint));
  1749. HOOK_RETURN<PlayerLeaveCheckpoint>
  1750. }
  1751. #if defined _ALS_OnPlayerLeaveCheckpoint
  1752. #undef OnPlayerLeaveCheckpoint
  1753. #else
  1754. #define _ALS_OnPlayerLeaveCheckpoint
  1755. #endif
  1756. #define OnPlayerLeaveCheckpoint S@@_OnPlayerLeaveCheckpoint
  1757. ALS_FORWARD<PlayerLeaveCheckpoint>
  1758. public OnPlayerEnterRaceCheckpoint(playerid)
  1759. {
  1760. P:2("Hooks_OnPlayerEnterRaceCheckpoint called: %d", playerid);
  1761. new
  1762. end = YSI_g_sCallbackData[ALS_OnPlayerEnterRaceCheckpoint][E_FUNC_HOOK_DATA_END],
  1763. start = YSI_g_sCallbackData[ALS_OnPlayerEnterRaceCheckpoint][E_FUNC_HOOK_DATA_START],
  1764. ret = ALS_R_PlayerEnterRaceCheckpoint;
  1765. if (start == end)
  1766. {
  1767. P:2("Hooks_OnPlayerEnterRaceCheckpoint end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerEnterRaceCheckpoint));
  1768. HOOK_CALL<PlayerEnterRaceCheckpoint>
  1769. }
  1770. new
  1771. idx,
  1772. pointer,
  1773. re = end;
  1774. if (end > sizeof (YSI_g_sCallbackAddresses))
  1775. {
  1776. re = sizeof (YSI_g_sCallbackAddresses);
  1777. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  1778. }
  1779. // Do the initial fast elements.
  1780. while (start != re)
  1781. {
  1782. pointer = YSI_g_sCallbackAddresses[start++];
  1783. #emit PUSH.S playerid
  1784. #emit PUSH.C 4
  1785. #emit LCTRL 6
  1786. #emit ADD.C 28
  1787. #emit PUSH.pri
  1788. #emit LOAD.S.pri pointer
  1789. #emit SCTRL 6
  1790. #emit CONST.alt 0xFFFFFFFF
  1791. #emit STOR.S.pri ret
  1792. #emit JEQ hooks_do_hooks_call_no_als
  1793. }
  1794. // Get any remaining pointers the old way.
  1795. while (start++ != end)
  1796. {
  1797. idx = AMX_GetPublicPointer(idx, pointer, "@yH_PlayerEnterRaceCheckpoint");
  1798. #emit PUSH.S playerid
  1799. #emit PUSH.C 4
  1800. #emit LCTRL 6
  1801. #emit ADD.C 28
  1802. #emit PUSH.pri
  1803. #emit LOAD.S.pri pointer
  1804. #emit SCTRL 6
  1805. #emit CONST.alt 0xFFFFFFFF
  1806. #emit STOR.S.pri ret
  1807. #emit JEQ hooks_do_hooks_call_no_als
  1808. }
  1809. // Do ALS just in case (YSI no longer uses this though now).
  1810. P:2("Hooks_OnPlayerEnterRaceCheckpoint end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerEnterRaceCheckpoint));
  1811. HOOK_RETURN<PlayerEnterRaceCheckpoint>
  1812. }
  1813. #if defined _ALS_OnPlayerEnterRaceCP
  1814. #undef OnPlayerEnterRaceCheckpoint
  1815. #else
  1816. #define _ALS_OnPlayerEnterRaceCP
  1817. #endif
  1818. #define OnPlayerEnterRaceCheckpoint S@@_OnPlayerEnterRaceCheckpoint
  1819. ALS_FORWARD<PlayerEnterRaceCheckpoint>
  1820. public OnPlayerLeaveRaceCheckpoint(playerid)
  1821. {
  1822. P:2("Hooks_OnPlayerLeaveRaceCheckpoint called: %d", playerid);
  1823. new
  1824. end = YSI_g_sCallbackData[ALS_OnPlayerLeaveRaceCheckpoint][E_FUNC_HOOK_DATA_END],
  1825. start = YSI_g_sCallbackData[ALS_OnPlayerLeaveRaceCheckpoint][E_FUNC_HOOK_DATA_START],
  1826. ret = ALS_R_PlayerLeaveRaceCheckpoint;
  1827. if (start == end)
  1828. {
  1829. P:2("Hooks_OnPlayerLeaveRaceCheckpoint end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerLeaveRaceCheckpoint));
  1830. HOOK_CALL<PlayerLeaveRaceCheckpoint>
  1831. }
  1832. new
  1833. idx,
  1834. pointer,
  1835. re = end;
  1836. if (end > sizeof (YSI_g_sCallbackAddresses))
  1837. {
  1838. re = sizeof (YSI_g_sCallbackAddresses);
  1839. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  1840. }
  1841. // Do the initial fast elements.
  1842. while (start != re)
  1843. {
  1844. pointer = YSI_g_sCallbackAddresses[start++];
  1845. #emit PUSH.S playerid
  1846. #emit PUSH.C 4
  1847. #emit LCTRL 6
  1848. #emit ADD.C 28
  1849. #emit PUSH.pri
  1850. #emit LOAD.S.pri pointer
  1851. #emit SCTRL 6
  1852. #emit CONST.alt 0xFFFFFFFF
  1853. #emit STOR.S.pri ret
  1854. #emit JEQ hooks_do_hooks_call_no_als
  1855. }
  1856. // Get any remaining pointers the old way.
  1857. while (start++ != end)
  1858. {
  1859. idx = AMX_GetPublicPointer(idx, pointer, "@yH_PlayerLeaveRaceCheckpoint");
  1860. #emit PUSH.S playerid
  1861. #emit PUSH.C 4
  1862. #emit LCTRL 6
  1863. #emit ADD.C 28
  1864. #emit PUSH.pri
  1865. #emit LOAD.S.pri pointer
  1866. #emit SCTRL 6
  1867. #emit CONST.alt 0xFFFFFFFF
  1868. #emit STOR.S.pri ret
  1869. #emit JEQ hooks_do_hooks_call_no_als
  1870. }
  1871. // Do ALS just in case (YSI no longer uses this though now).
  1872. P:2("Hooks_OnPlayerLeaveRaceCheckpoint end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerLeaveRaceCheckpoint));
  1873. HOOK_RETURN<PlayerLeaveRaceCheckpoint>
  1874. }
  1875. #if defined _ALS_OnPlayerLeaveRaceCP
  1876. #undef OnPlayerLeaveRaceCheckpoint
  1877. #else
  1878. #define _ALS_OnPlayerLeaveRaceCP
  1879. #endif
  1880. #define OnPlayerLeaveRaceCheckpoint S@@_OnPlayerLeaveRaceCheckpoint
  1881. ALS_FORWARD<PlayerLeaveRaceCheckpoint>
  1882. public OnRconCommand(cmd[])
  1883. {
  1884. P:2("Hooks_OnRconCommand called: \"%s\"", cmd);
  1885. new
  1886. end = YSI_g_sCallbackData[ALS_OnRconCommand][E_FUNC_HOOK_DATA_END],
  1887. start = YSI_g_sCallbackData[ALS_OnRconCommand][E_FUNC_HOOK_DATA_START],
  1888. ret = ALS_R_RconCommand;
  1889. if (start == end)
  1890. {
  1891. P:2("Hooks_OnRconCommand end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnRconCommand));
  1892. HOOK_CALL<RconCommand>
  1893. }
  1894. new
  1895. idx,
  1896. pointer,
  1897. re = end;
  1898. if (end > sizeof (YSI_g_sCallbackAddresses))
  1899. {
  1900. re = sizeof (YSI_g_sCallbackAddresses);
  1901. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  1902. }
  1903. // Do the initial fast elements.
  1904. while (start != re)
  1905. {
  1906. pointer = YSI_g_sCallbackAddresses[start++];
  1907. #emit PUSH.S cmd
  1908. #emit PUSH.C 4
  1909. #emit LCTRL 6
  1910. #emit ADD.C 28
  1911. #emit PUSH.pri
  1912. #emit LOAD.S.pri pointer
  1913. #emit SCTRL 6
  1914. #emit CONST.alt 0xFFFFFFFF
  1915. #emit STOR.S.pri ret
  1916. #emit JEQ hooks_do_hooks_call_no_als
  1917. }
  1918. // Get any remaining pointers the old way.
  1919. while (start++ != end)
  1920. {
  1921. idx = AMX_GetPublicPointer(idx, pointer, "@yH_RconCommand");
  1922. #emit PUSH.S cmd
  1923. #emit PUSH.C 4
  1924. #emit LCTRL 6
  1925. #emit ADD.C 28
  1926. #emit PUSH.pri
  1927. #emit LOAD.S.pri pointer
  1928. #emit SCTRL 6
  1929. #emit CONST.alt 0xFFFFFFFF
  1930. #emit STOR.S.pri ret
  1931. #emit JEQ hooks_do_hooks_call_no_als
  1932. }
  1933. // Do ALS just in case (YSI no longer uses this though now).
  1934. P:2("Hooks_OnRconCommand end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnRconCommand));
  1935. HOOK_RETURN<RconCommand>
  1936. }
  1937. #if defined _ALS_OnRconCommand
  1938. #undef OnRconCommand
  1939. #else
  1940. #define _ALS_OnRconCommand
  1941. #endif
  1942. #define OnRconCommand S@@_OnRconCommand
  1943. ALS_FORWARD<RconCommand>
  1944. public OnPlayerRequestSpawn(playerid)
  1945. {
  1946. P:2("Hooks_OnPlayerRequestSpawn called: %d", playerid);
  1947. new
  1948. end = YSI_g_sCallbackData[ALS_OnPlayerRequestSpawn][E_FUNC_HOOK_DATA_END],
  1949. start = YSI_g_sCallbackData[ALS_OnPlayerRequestSpawn][E_FUNC_HOOK_DATA_START],
  1950. ret = ALS_R_PlayerRequestSpawn;
  1951. if (start == end)
  1952. {
  1953. P:2("Hooks_OnPlayerRequestSpawn end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerRequestSpawn));
  1954. HOOK_CALL<PlayerRequestSpawn>
  1955. }
  1956. new
  1957. idx,
  1958. pointer,
  1959. re = end;
  1960. if (end > sizeof (YSI_g_sCallbackAddresses))
  1961. {
  1962. re = sizeof (YSI_g_sCallbackAddresses);
  1963. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  1964. }
  1965. // Do the initial fast elements.
  1966. while (start != re)
  1967. {
  1968. pointer = YSI_g_sCallbackAddresses[start++];
  1969. #emit PUSH.S playerid
  1970. #emit PUSH.C 4
  1971. #emit LCTRL 6
  1972. #emit ADD.C 28
  1973. #emit PUSH.pri
  1974. #emit LOAD.S.pri pointer
  1975. #emit SCTRL 6
  1976. #emit CONST.alt 0xFFFFFFFF
  1977. #emit STOR.S.pri ret
  1978. #emit JEQ hooks_do_hooks_call_no_als
  1979. }
  1980. // Get any remaining pointers the old way.
  1981. while (start++ != end)
  1982. {
  1983. idx = AMX_GetPublicPointer(idx, pointer, "@yH_PlayerRequestSpawn");
  1984. #emit PUSH.S playerid
  1985. #emit PUSH.C 4
  1986. #emit LCTRL 6
  1987. #emit ADD.C 28
  1988. #emit PUSH.pri
  1989. #emit LOAD.S.pri pointer
  1990. #emit SCTRL 6
  1991. #emit CONST.alt 0xFFFFFFFF
  1992. #emit STOR.S.pri ret
  1993. #emit JEQ hooks_do_hooks_call_no_als
  1994. }
  1995. // Do ALS just in case (YSI no longer uses this though now).
  1996. P:2("Hooks_OnPlayerRequestSpawn end: %d %d", _:Bit_GetBit(Bit:gs_ALS,_:ALS_OnPlayerRequestSpawn), ret);
  1997. HOOK_RETURN<PlayerRequestSpawn>
  1998. }
  1999. #if defined _ALS_OnPlayerRequestSpawn
  2000. #undef OnPlayerRequestSpawn
  2001. #else
  2002. #define _ALS_OnPlayerRequestSpawn
  2003. #endif
  2004. #define OnPlayerRequestSpawn S@@_OnPlayerRequestSpawn
  2005. ALS_FORWARD<PlayerRequestSpawn>
  2006. public OnObjectMoved(objectid)
  2007. {
  2008. P:2("Hooks_OnObjectMoved called: %d", objectid);
  2009. new
  2010. end = YSI_g_sCallbackData[ALS_OnObjectMoved][E_FUNC_HOOK_DATA_END],
  2011. start = YSI_g_sCallbackData[ALS_OnObjectMoved][E_FUNC_HOOK_DATA_START],
  2012. ret = ALS_R_ObjectMoved;
  2013. if (start == end)
  2014. {
  2015. P:2("Hooks_OnObjectMoved end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnObjectMoved));
  2016. HOOK_CALL<ObjectMoved>
  2017. }
  2018. new
  2019. idx,
  2020. pointer,
  2021. re = end;
  2022. if (end > sizeof (YSI_g_sCallbackAddresses))
  2023. {
  2024. re = sizeof (YSI_g_sCallbackAddresses);
  2025. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  2026. }
  2027. // Do the initial fast elements.
  2028. while (start != re)
  2029. {
  2030. pointer = YSI_g_sCallbackAddresses[start++];
  2031. #emit PUSH.S objectid
  2032. #emit PUSH.C 4
  2033. #emit LCTRL 6
  2034. #emit ADD.C 28
  2035. #emit PUSH.pri
  2036. #emit LOAD.S.pri pointer
  2037. #emit SCTRL 6
  2038. #emit CONST.alt 0xFFFFFFFF
  2039. #emit STOR.S.pri ret
  2040. #emit JEQ hooks_do_hooks_call_no_als
  2041. }
  2042. // Get any remaining pointers the old way.
  2043. while (start++ != end)
  2044. {
  2045. idx = AMX_GetPublicPointer(idx, pointer, "@yH_ObjectMoved");
  2046. #emit PUSH.S objectid
  2047. #emit PUSH.C 4
  2048. #emit LCTRL 6
  2049. #emit ADD.C 28
  2050. #emit PUSH.pri
  2051. #emit LOAD.S.pri pointer
  2052. #emit SCTRL 6
  2053. #emit CONST.alt 0xFFFFFFFF
  2054. #emit STOR.S.pri ret
  2055. #emit JEQ hooks_do_hooks_call_no_als
  2056. }
  2057. // Do ALS just in case (YSI no longer uses this though now).
  2058. P:2("Hooks_OnObjectMoved end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnObjectMoved));
  2059. HOOK_RETURN<ObjectMoved>
  2060. }
  2061. #if defined _ALS_OnObjectMoved
  2062. #undef OnObjectMoved
  2063. #else
  2064. #define _ALS_OnObjectMoved
  2065. #endif
  2066. #define OnObjectMoved S@@_OnObjectMoved
  2067. ALS_FORWARD<ObjectMoved>
  2068. public OnPlayerObjectMoved(playerid, objectid)
  2069. {
  2070. P:2("Hooks_OnPlayerObjectMoved called: %d, %d", playerid, objectid);
  2071. new
  2072. end = YSI_g_sCallbackData[ALS_OnPlayerObjectMoved][E_FUNC_HOOK_DATA_END],
  2073. start = YSI_g_sCallbackData[ALS_OnPlayerObjectMoved][E_FUNC_HOOK_DATA_START],
  2074. ret = ALS_R_PlayerObjectMoved;
  2075. if (start == end)
  2076. {
  2077. P:2("Hooks_OnPlayerObjectMoved end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerObjectMoved));
  2078. HOOK_CALL<PlayerObjectMoved>
  2079. }
  2080. new
  2081. idx,
  2082. pointer,
  2083. re = end;
  2084. if (end > sizeof (YSI_g_sCallbackAddresses))
  2085. {
  2086. re = sizeof (YSI_g_sCallbackAddresses);
  2087. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  2088. }
  2089. // Do the initial fast elements.
  2090. while (start != re)
  2091. {
  2092. pointer = YSI_g_sCallbackAddresses[start++];
  2093. #emit PUSH.S objectid
  2094. #emit PUSH.S playerid
  2095. #emit PUSH.C 8
  2096. #emit LCTRL 6
  2097. #emit ADD.C 28
  2098. #emit PUSH.pri
  2099. #emit LOAD.S.pri pointer
  2100. #emit SCTRL 6
  2101. #emit CONST.alt 0xFFFFFFFF
  2102. #emit STOR.S.pri ret
  2103. #emit JEQ hooks_do_hooks_call_no_als
  2104. }
  2105. // Get any remaining pointers the old way.
  2106. while (start++ != end)
  2107. {
  2108. idx = AMX_GetPublicPointer(idx, pointer, "@yH_PlayerObjectMoved");
  2109. #emit PUSH.S objectid
  2110. #emit PUSH.S playerid
  2111. #emit PUSH.C 8
  2112. #emit LCTRL 6
  2113. #emit ADD.C 28
  2114. #emit PUSH.pri
  2115. #emit LOAD.S.pri pointer
  2116. #emit SCTRL 6
  2117. #emit CONST.alt 0xFFFFFFFF
  2118. #emit STOR.S.pri ret
  2119. #emit JEQ hooks_do_hooks_call_no_als
  2120. }
  2121. // Do ALS just in case (YSI no longer uses this though now).
  2122. P:2("Hooks_OnPlayerObjectMoved end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerObjectMoved));
  2123. HOOK_RETURN<PlayerObjectMoved>
  2124. }
  2125. #if defined _ALS_OnPlayerObjectMoved
  2126. #undef OnPlayerObjectMoved
  2127. #else
  2128. #define _ALS_OnPlayerObjectMoved
  2129. #endif
  2130. #define OnPlayerObjectMoved S@@_OnPlayerObjectMoved
  2131. ALS_FORWARD<PlayerObjectMoved>
  2132. public OnPlayerPickUpPickup(playerid, pickupid)
  2133. {
  2134. P:2("Hooks_OnPlayerPickUpPickup called: %d, %d", playerid, pickupid);
  2135. new
  2136. end = YSI_g_sCallbackData[ALS_OnPlayerPickUpPickup][E_FUNC_HOOK_DATA_END],
  2137. start = YSI_g_sCallbackData[ALS_OnPlayerPickUpPickup][E_FUNC_HOOK_DATA_START],
  2138. ret = ALS_R_PlayerPickUpPickup;
  2139. if (start == end)
  2140. {
  2141. P:2("Hooks_OnPlayerPickUpPickup end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerPickUpPickup));
  2142. HOOK_CALL<PlayerPickUpPickup>
  2143. }
  2144. new
  2145. idx,
  2146. pointer,
  2147. re = end;
  2148. if (end > sizeof (YSI_g_sCallbackAddresses))
  2149. {
  2150. re = sizeof (YSI_g_sCallbackAddresses);
  2151. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  2152. }
  2153. // Do the initial fast elements.
  2154. while (start != re)
  2155. {
  2156. pointer = YSI_g_sCallbackAddresses[start++];
  2157. #emit PUSH.S pickupid
  2158. #emit PUSH.S playerid
  2159. #emit PUSH.C 8
  2160. #emit LCTRL 6
  2161. #emit ADD.C 28
  2162. #emit PUSH.pri
  2163. #emit LOAD.S.pri pointer
  2164. #emit SCTRL 6
  2165. #emit CONST.alt 0xFFFFFFFF
  2166. #emit STOR.S.pri ret
  2167. #emit JEQ hooks_do_hooks_call_no_als
  2168. }
  2169. // Get any remaining pointers the old way.
  2170. while (start++ != end)
  2171. {
  2172. idx = AMX_GetPublicPointer(idx, pointer, "@yH_PlayerPickUpPickup");
  2173. #emit PUSH.S pickupid
  2174. #emit PUSH.S playerid
  2175. #emit PUSH.C 8
  2176. #emit LCTRL 6
  2177. #emit ADD.C 28
  2178. #emit PUSH.pri
  2179. #emit LOAD.S.pri pointer
  2180. #emit SCTRL 6
  2181. #emit CONST.alt 0xFFFFFFFF
  2182. #emit STOR.S.pri ret
  2183. #emit JEQ hooks_do_hooks_call_no_als
  2184. }
  2185. // Do ALS just in case (YSI no longer uses this though now).
  2186. P:2("Hooks_OnPlayerPickUpPickup end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerPickUpPickup));
  2187. HOOK_RETURN<PlayerPickUpPickup>
  2188. }
  2189. #if defined _ALS_OnPlayerPickUpPickup
  2190. #undef OnPlayerPickUpPickup
  2191. #else
  2192. #define _ALS_OnPlayerPickUpPickup
  2193. #endif
  2194. #define OnPlayerPickUpPickup S@@_OnPlayerPickUpPickup
  2195. ALS_FORWARD<PlayerPickUpPickup>
  2196. public OnVehicleMod(playerid, vehicleid, componentid)
  2197. {
  2198. P:2("Hooks_OnVehicleMod called: %d, %d, %d", playerid, vehicleid, componentid);
  2199. new
  2200. end = YSI_g_sCallbackData[ALS_OnVehicleMod][E_FUNC_HOOK_DATA_END],
  2201. start = YSI_g_sCallbackData[ALS_OnVehicleMod][E_FUNC_HOOK_DATA_START],
  2202. ret = ALS_R_VehicleMod;
  2203. if (start == end)
  2204. {
  2205. P:2("Hooks_OnVehicleMod end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnVehicleMod));
  2206. HOOK_CALL<VehicleMod>
  2207. }
  2208. new
  2209. idx,
  2210. pointer,
  2211. re = end;
  2212. if (end > sizeof (YSI_g_sCallbackAddresses))
  2213. {
  2214. re = sizeof (YSI_g_sCallbackAddresses);
  2215. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  2216. }
  2217. // Do the initial fast elements.
  2218. while (start != re)
  2219. {
  2220. pointer = YSI_g_sCallbackAddresses[start++];
  2221. #emit PUSH.S componentid
  2222. #emit PUSH.S vehicleid
  2223. #emit PUSH.S playerid
  2224. #emit PUSH.C 12
  2225. #emit LCTRL 6
  2226. #emit ADD.C 28
  2227. #emit PUSH.pri
  2228. #emit LOAD.S.pri pointer
  2229. #emit SCTRL 6
  2230. #emit CONST.alt 0xFFFFFFFF
  2231. #emit STOR.S.pri ret
  2232. #emit JEQ hooks_do_hooks_call_no_als
  2233. }
  2234. // Get any remaining pointers the old way.
  2235. while (start++ != end)
  2236. {
  2237. idx = AMX_GetPublicPointer(idx, pointer, "@yH_VehicleMod");
  2238. #emit PUSH.S componentid
  2239. #emit PUSH.S vehicleid
  2240. #emit PUSH.S playerid
  2241. #emit PUSH.C 12
  2242. #emit LCTRL 6
  2243. #emit ADD.C 28
  2244. #emit PUSH.pri
  2245. #emit LOAD.S.pri pointer
  2246. #emit SCTRL 6
  2247. #emit CONST.alt 0xFFFFFFFF
  2248. #emit STOR.S.pri ret
  2249. #emit JEQ hooks_do_hooks_call_no_als
  2250. }
  2251. // Do ALS just in case (YSI no longer uses this though now).
  2252. P:2("Hooks_OnVehicleMod end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnVehicleMod));
  2253. HOOK_RETURN<VehicleMod>
  2254. }
  2255. #if defined _ALS_OnVehicleMod
  2256. #undef OnVehicleMod
  2257. #else
  2258. #define _ALS_OnVehicleMod
  2259. #endif
  2260. #define OnVehicleMod S@@_OnVehicleMod
  2261. ALS_FORWARD<VehicleMod>
  2262. public OnEnterExitModShop(playerid, enterexit, interiorid)
  2263. {
  2264. P:2("Hooks_OnEnterExitModShop called: %d, %d, %d", playerid, enterexit, interiorid);
  2265. new
  2266. end = YSI_g_sCallbackData[ALS_OnEnterExitModShop][E_FUNC_HOOK_DATA_END],
  2267. start = YSI_g_sCallbackData[ALS_OnEnterExitModShop][E_FUNC_HOOK_DATA_START],
  2268. ret = ALS_R_EnterExitModShop;
  2269. if (start == end)
  2270. {
  2271. P:2("Hooks_OnEnterExitModShop end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnEnterExitModShop));
  2272. HOOK_CALL<EnterExitModShop>
  2273. }
  2274. new
  2275. idx,
  2276. pointer,
  2277. re = end;
  2278. if (end > sizeof (YSI_g_sCallbackAddresses))
  2279. {
  2280. re = sizeof (YSI_g_sCallbackAddresses);
  2281. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  2282. }
  2283. // Do the initial fast elements.
  2284. while (start != re)
  2285. {
  2286. pointer = YSI_g_sCallbackAddresses[start++];
  2287. #emit PUSH.S interiorid
  2288. #emit PUSH.S enterexit
  2289. #emit PUSH.S playerid
  2290. #emit PUSH.C 12
  2291. #emit LCTRL 6
  2292. #emit ADD.C 28
  2293. #emit PUSH.pri
  2294. #emit LOAD.S.pri pointer
  2295. #emit SCTRL 6
  2296. #emit CONST.alt 0xFFFFFFFF
  2297. #emit STOR.S.pri ret
  2298. #emit JEQ hooks_do_hooks_call_no_als
  2299. }
  2300. // Get any remaining pointers the old way.
  2301. while (start++ != end)
  2302. {
  2303. idx = AMX_GetPublicPointer(idx, pointer, "@yH_EnterExitModShop");
  2304. #emit PUSH.S interiorid
  2305. #emit PUSH.S enterexit
  2306. #emit PUSH.S playerid
  2307. #emit PUSH.C 12
  2308. #emit LCTRL 6
  2309. #emit ADD.C 28
  2310. #emit PUSH.pri
  2311. #emit LOAD.S.pri pointer
  2312. #emit SCTRL 6
  2313. #emit CONST.alt 0xFFFFFFFF
  2314. #emit STOR.S.pri ret
  2315. #emit JEQ hooks_do_hooks_call_no_als
  2316. }
  2317. // Do ALS just in case (YSI no longer uses this though now).
  2318. P:2("Hooks_OnEnterExitModShop end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnEnterExitModShop));
  2319. HOOK_RETURN<EnterExitModShop>
  2320. }
  2321. #if defined _ALS_OnEnterExitModShop
  2322. #undef OnEnterExitModShop
  2323. #else
  2324. #define _ALS_OnEnterExitModShop
  2325. #endif
  2326. #define OnEnterExitModShop S@@_OnEnterExitModShop
  2327. ALS_FORWARD<EnterExitModShop>
  2328. public OnVehiclePaintjob(playerid, vehicleid, paintjobid)
  2329. {
  2330. P:2("Hooks_OnVehiclePaintjob called: %d, %d, %d", playerid, vehicleid, paintjobid);
  2331. new
  2332. end = YSI_g_sCallbackData[ALS_OnVehiclePaintjob][E_FUNC_HOOK_DATA_END],
  2333. start = YSI_g_sCallbackData[ALS_OnVehiclePaintjob][E_FUNC_HOOK_DATA_START],
  2334. ret = ALS_R_VehiclePaintjob;
  2335. if (start == end)
  2336. {
  2337. P:2("Hooks_OnVehiclePaintjob end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnVehiclePaintjob));
  2338. HOOK_CALL<VehiclePaintjob>
  2339. }
  2340. new
  2341. idx,
  2342. pointer,
  2343. re = end;
  2344. if (end > sizeof (YSI_g_sCallbackAddresses))
  2345. {
  2346. re = sizeof (YSI_g_sCallbackAddresses);
  2347. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  2348. }
  2349. // Do the initial fast elements.
  2350. while (start != re)
  2351. {
  2352. pointer = YSI_g_sCallbackAddresses[start++];
  2353. #emit PUSH.S paintjobid
  2354. #emit PUSH.S vehicleid
  2355. #emit PUSH.S playerid
  2356. #emit PUSH.C 12
  2357. #emit LCTRL 6
  2358. #emit ADD.C 28
  2359. #emit PUSH.pri
  2360. #emit LOAD.S.pri pointer
  2361. #emit SCTRL 6
  2362. #emit CONST.alt 0xFFFFFFFF
  2363. #emit STOR.S.pri ret
  2364. #emit JEQ hooks_do_hooks_call_no_als
  2365. }
  2366. // Get any remaining pointers the old way.
  2367. while (start++ != end)
  2368. {
  2369. idx = AMX_GetPublicPointer(idx, pointer, "@yH_VehiclePaintjob");
  2370. #emit PUSH.S paintjobid
  2371. #emit PUSH.S vehicleid
  2372. #emit PUSH.S playerid
  2373. #emit PUSH.C 12
  2374. #emit LCTRL 6
  2375. #emit ADD.C 28
  2376. #emit PUSH.pri
  2377. #emit LOAD.S.pri pointer
  2378. #emit SCTRL 6
  2379. #emit CONST.alt 0xFFFFFFFF
  2380. #emit STOR.S.pri ret
  2381. #emit JEQ hooks_do_hooks_call_no_als
  2382. }
  2383. // Do ALS just in case (YSI no longer uses this though now).
  2384. P:2("Hooks_OnVehiclePaintjob end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnVehiclePaintjob));
  2385. HOOK_RETURN<VehiclePaintjob>
  2386. }
  2387. #if defined _ALS_OnVehiclePaintjob
  2388. #undef OnVehiclePaintjob
  2389. #else
  2390. #define _ALS_OnVehiclePaintjob
  2391. #endif
  2392. #define OnVehiclePaintjob S@@_OnVehiclePaintjob
  2393. ALS_FORWARD<VehiclePaintjob>
  2394. public OnVehicleRespray(playerid, vehicleid, color1, color2)
  2395. {
  2396. P:2("Hooks_OnVehicleRespray called: %d, %d, %d, %d", playerid, vehicleid, color1, color2);
  2397. new
  2398. end = YSI_g_sCallbackData[ALS_OnVehicleRespray][E_FUNC_HOOK_DATA_END],
  2399. start = YSI_g_sCallbackData[ALS_OnVehicleRespray][E_FUNC_HOOK_DATA_START],
  2400. ret = ALS_R_VehicleRespray;
  2401. if (start == end)
  2402. {
  2403. P:2("Hooks_OnVehicleRespray end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnVehicleRespray));
  2404. HOOK_CALL<VehicleRespray>
  2405. }
  2406. new
  2407. idx,
  2408. pointer,
  2409. re = end;
  2410. if (end > sizeof (YSI_g_sCallbackAddresses))
  2411. {
  2412. re = sizeof (YSI_g_sCallbackAddresses);
  2413. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  2414. }
  2415. // Do the initial fast elements.
  2416. while (start != re)
  2417. {
  2418. pointer = YSI_g_sCallbackAddresses[start++];
  2419. #emit PUSH.S color2
  2420. #emit PUSH.S color1
  2421. #emit PUSH.S vehicleid
  2422. #emit PUSH.S playerid
  2423. #emit PUSH.C 16
  2424. #emit LCTRL 6
  2425. #emit ADD.C 28
  2426. #emit PUSH.pri
  2427. #emit LOAD.S.pri pointer
  2428. #emit SCTRL 6
  2429. #emit CONST.alt 0xFFFFFFFF
  2430. #emit STOR.S.pri ret
  2431. #emit JEQ hooks_do_hooks_call_no_als
  2432. }
  2433. // Get any remaining pointers the old way.
  2434. while (start++ != end)
  2435. {
  2436. idx = AMX_GetPublicPointer(idx, pointer, "@yH_VehicleRespray");
  2437. #emit PUSH.S color2
  2438. #emit PUSH.S color1
  2439. #emit PUSH.S vehicleid
  2440. #emit PUSH.S playerid
  2441. #emit PUSH.C 16
  2442. #emit LCTRL 6
  2443. #emit ADD.C 28
  2444. #emit PUSH.pri
  2445. #emit LOAD.S.pri pointer
  2446. #emit SCTRL 6
  2447. #emit CONST.alt 0xFFFFFFFF
  2448. #emit STOR.S.pri ret
  2449. #emit JEQ hooks_do_hooks_call_no_als
  2450. }
  2451. // Do ALS just in case (YSI no longer uses this though now).
  2452. P:2("Hooks_OnVehicleRespray end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnVehicleRespray));
  2453. HOOK_RETURN<VehicleRespray>
  2454. }
  2455. #if defined _ALS_OnVehicleRespray
  2456. #undef OnVehicleRespray
  2457. #else
  2458. #define _ALS_OnVehicleRespray
  2459. #endif
  2460. #define OnVehicleRespray S@@_OnVehicleRespray
  2461. ALS_FORWARD<VehicleRespray>
  2462. public OnVehicleDamageStatusUpdate(vehicleid, playerid)
  2463. {
  2464. P:2("Hooks_OnVehicleDamageStatusUpdate called: %d, %d", vehicleid, playerid);
  2465. new
  2466. end = YSI_g_sCallbackData[ALS_OnVehicleDamageStatusUpdate][E_FUNC_HOOK_DATA_END],
  2467. start = YSI_g_sCallbackData[ALS_OnVehicleDamageStatusUpdate][E_FUNC_HOOK_DATA_START],
  2468. ret = ALS_R_VehicleDamageStatusUpdate;
  2469. if (start == end)
  2470. {
  2471. P:2("Hooks_OnVehicleDamageStatusUpdate end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnVehicleDamageStatusUpdate));
  2472. HOOK_CALL<VehicleDamageStatusUpdate>
  2473. }
  2474. new
  2475. idx,
  2476. pointer,
  2477. re = end;
  2478. if (end > sizeof (YSI_g_sCallbackAddresses))
  2479. {
  2480. re = sizeof (YSI_g_sCallbackAddresses);
  2481. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  2482. }
  2483. // Do the initial fast elements.
  2484. while (start != re)
  2485. {
  2486. pointer = YSI_g_sCallbackAddresses[start++];
  2487. #emit PUSH.S playerid
  2488. #emit PUSH.S vehicleid
  2489. #emit PUSH.C 8
  2490. #emit LCTRL 6
  2491. #emit ADD.C 28
  2492. #emit PUSH.pri
  2493. #emit LOAD.S.pri pointer
  2494. #emit SCTRL 6
  2495. #emit CONST.alt 0xFFFFFFFF
  2496. #emit STOR.S.pri ret
  2497. #emit JEQ hooks_do_hooks_call_no_als
  2498. }
  2499. // Get any remaining pointers the old way.
  2500. while (start++ != end)
  2501. {
  2502. idx = AMX_GetPublicPointer(idx, pointer, "@yH_VehicleDamageStatusUpdate");
  2503. #emit PUSH.S playerid
  2504. #emit PUSH.S vehicleid
  2505. #emit PUSH.C 8
  2506. #emit LCTRL 6
  2507. #emit ADD.C 28
  2508. #emit PUSH.pri
  2509. #emit LOAD.S.pri pointer
  2510. #emit SCTRL 6
  2511. #emit CONST.alt 0xFFFFFFFF
  2512. #emit STOR.S.pri ret
  2513. #emit JEQ hooks_do_hooks_call_no_als
  2514. }
  2515. // Do ALS just in case (YSI no longer uses this though now).
  2516. P:2("Hooks_OnVehicleDamageStatusUpdate end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnVehicleDamageStatusUpdate));
  2517. HOOK_RETURN<VehicleDamageStatusUpdate>
  2518. }
  2519. #if defined _ALS_OnVehicleDamageStatusUpd
  2520. #undef OnVehicleDamageStatusUpdate
  2521. #else
  2522. #define _ALS_OnVehicleDamageStatusUpd
  2523. #endif
  2524. #define OnVehicleDamageStatusUpdate S@@_OnVehicleDamageStatusUpdate
  2525. ALS_FORWARD<VehicleDamageStatusUpdate>
  2526. public OnUnoccupiedVehicleUpdate(vehicleid, playerid, passenger_seat)
  2527. {
  2528. P:2("Hooks_OnUnoccupiedVehicleUpdate called: %d, %d, %d", vehicleid, playerid, passenger_seat);
  2529. new
  2530. end = YSI_g_sCallbackData[ALS_OnUnoccupiedVehicleUpdate][E_FUNC_HOOK_DATA_END],
  2531. start = YSI_g_sCallbackData[ALS_OnUnoccupiedVehicleUpdate][E_FUNC_HOOK_DATA_START],
  2532. ret = ALS_R_UnoccupiedVehicleUpdate;
  2533. if (start == end)
  2534. {
  2535. P:2("Hooks_OnUnoccupiedVehicleUpdate end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnUnoccupiedVehicleUpdate));
  2536. HOOK_CALL<UnoccupiedVehicleUpdate>
  2537. }
  2538. new
  2539. idx,
  2540. pointer,
  2541. re = end;
  2542. if (end > sizeof (YSI_g_sCallbackAddresses))
  2543. {
  2544. re = sizeof (YSI_g_sCallbackAddresses);
  2545. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  2546. }
  2547. // Do the initial fast elements.
  2548. while (start != re)
  2549. {
  2550. pointer = YSI_g_sCallbackAddresses[start++];
  2551. #emit PUSH.S passenger_seat
  2552. #emit PUSH.S playerid
  2553. #emit PUSH.S vehicleid
  2554. // I wonder if I could hack the stack with a negative number so that when
  2555. // the called function returns it puts all the header data BACK on to the
  2556. // stack instead of removing the parameters and header.
  2557. #emit PUSH.C 12
  2558. #emit LCTRL 6
  2559. #emit ADD.C 28
  2560. #emit PUSH.pri
  2561. #emit LOAD.S.pri pointer
  2562. #emit SCTRL 6
  2563. #emit CONST.alt 0xFFFFFFFF
  2564. #emit STOR.S.pri ret
  2565. #emit JEQ hooks_do_hooks_call_no_als
  2566. }
  2567. // Get any remaining pointers the old way.
  2568. while (start++ != end)
  2569. {
  2570. idx = AMX_GetPublicPointer(idx, pointer, "@yH_UnoccupiedVehicleUpdate");
  2571. #emit PUSH.S passenger_seat
  2572. #emit PUSH.S playerid
  2573. #emit PUSH.S vehicleid
  2574. #emit PUSH.C 12
  2575. #emit LCTRL 6
  2576. #emit ADD.C 28
  2577. #emit PUSH.pri
  2578. #emit LOAD.S.pri pointer
  2579. #emit SCTRL 6
  2580. #emit CONST.alt 0xFFFFFFFF
  2581. #emit STOR.S.pri ret
  2582. #emit JEQ hooks_do_hooks_call_no_als
  2583. }
  2584. // Do ALS just in case (YSI no longer uses this though now).
  2585. P:2("Hooks_OnUnoccupiedVehicleUpdate end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnUnoccupiedVehicleUpdate));
  2586. HOOK_RETURN<UnoccupiedVehicleUpdate>
  2587. }
  2588. #if defined _ALS_OnUnoccupiedVehicleUpdate
  2589. #undef OnUnoccupiedVehicleUpdate
  2590. #else
  2591. #define _ALS_OnUnoccupiedVehicleUpdate
  2592. #endif
  2593. #define OnUnoccupiedVehicleUpdate S@@_OnUnoccupiedVehicleUpdate
  2594. ALS_FORWARD<UnoccupiedVehicleUpdate>
  2595. public OnPlayerSelectedMenuRow(playerid, row)
  2596. {
  2597. P:2("Hooks_OnPlayerSelectedMenuRow called: %d, %d", playerid, row);
  2598. new
  2599. end = YSI_g_sCallbackData[ALS_OnPlayerSelectedMenuRow][E_FUNC_HOOK_DATA_END],
  2600. start = YSI_g_sCallbackData[ALS_OnPlayerSelectedMenuRow][E_FUNC_HOOK_DATA_START],
  2601. ret = ALS_R_PlayerSelectedMenuRow;
  2602. if (start == end)
  2603. {
  2604. P:2("Hooks_OnPlayerSelectedMenuRow end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerSelectedMenuRow));
  2605. HOOK_CALL<PlayerSelectedMenuRow>
  2606. }
  2607. new
  2608. idx,
  2609. pointer,
  2610. re = end;
  2611. if (end > sizeof (YSI_g_sCallbackAddresses))
  2612. {
  2613. re = sizeof (YSI_g_sCallbackAddresses);
  2614. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  2615. }
  2616. // Do the initial fast elements.
  2617. while (start != re)
  2618. {
  2619. pointer = YSI_g_sCallbackAddresses[start++];
  2620. #emit PUSH.S row
  2621. #emit PUSH.S playerid
  2622. #emit PUSH.C 8
  2623. #emit LCTRL 6
  2624. #emit ADD.C 28
  2625. #emit PUSH.pri
  2626. #emit LOAD.S.pri pointer
  2627. #emit SCTRL 6
  2628. #emit CONST.alt 0xFFFFFFFF
  2629. #emit STOR.S.pri ret
  2630. #emit JEQ hooks_do_hooks_call_no_als
  2631. }
  2632. // Get any remaining pointers the old way.
  2633. while (start++ != end)
  2634. {
  2635. idx = AMX_GetPublicPointer(idx, pointer, "@yH_PlayerSelectedMenuRow");
  2636. #emit PUSH.S row
  2637. #emit PUSH.S playerid
  2638. #emit PUSH.C 8
  2639. #emit LCTRL 6
  2640. #emit ADD.C 28
  2641. #emit PUSH.pri
  2642. #emit LOAD.S.pri pointer
  2643. #emit SCTRL 6
  2644. #emit CONST.alt 0xFFFFFFFF
  2645. #emit STOR.S.pri ret
  2646. #emit JEQ hooks_do_hooks_call_no_als
  2647. }
  2648. // Do ALS just in case (YSI no longer uses this though now).
  2649. P:2("Hooks_OnPlayerSelectedMenuRow end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerSelectedMenuRow));
  2650. HOOK_RETURN<PlayerSelectedMenuRow>
  2651. }
  2652. #if defined _ALS_OnPlayerSelectedMenuRow
  2653. #undef OnPlayerSelectedMenuRow
  2654. #else
  2655. #define _ALS_OnPlayerSelectedMenuRow
  2656. #endif
  2657. #define OnPlayerSelectedMenuRow S@@_OnPlayerSelectedMenuRow
  2658. ALS_FORWARD<PlayerSelectedMenuRow>
  2659. public OnPlayerExitedMenu(playerid)
  2660. {
  2661. P:2("Hooks_OnPlayerExitedMenu called: %d", playerid);
  2662. new
  2663. end = YSI_g_sCallbackData[ALS_OnPlayerExitedMenu][E_FUNC_HOOK_DATA_END],
  2664. start = YSI_g_sCallbackData[ALS_OnPlayerExitedMenu][E_FUNC_HOOK_DATA_START],
  2665. ret = ALS_R_PlayerExitedMenu;
  2666. if (start == end)
  2667. {
  2668. P:2("Hooks_OnPlayerExitedMenu end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerExitedMenu));
  2669. HOOK_CALL<PlayerExitedMenu>
  2670. }
  2671. new
  2672. idx,
  2673. pointer,
  2674. re = end;
  2675. if (end > sizeof (YSI_g_sCallbackAddresses))
  2676. {
  2677. re = sizeof (YSI_g_sCallbackAddresses);
  2678. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  2679. }
  2680. // Do the initial fast elements.
  2681. while (start != re)
  2682. {
  2683. pointer = YSI_g_sCallbackAddresses[start++];
  2684. #emit PUSH.S playerid
  2685. #emit PUSH.C 4
  2686. #emit LCTRL 6
  2687. #emit ADD.C 28
  2688. #emit PUSH.pri
  2689. #emit LOAD.S.pri pointer
  2690. #emit SCTRL 6
  2691. #emit CONST.alt 0xFFFFFFFF
  2692. #emit STOR.S.pri ret
  2693. #emit JEQ hooks_do_hooks_call_no_als
  2694. }
  2695. // Get any remaining pointers the old way.
  2696. while (start++ != end)
  2697. {
  2698. idx = AMX_GetPublicPointer(idx, pointer, "@yH_PlayerExitedMenu");
  2699. #emit PUSH.S playerid
  2700. #emit PUSH.C 4
  2701. #emit LCTRL 6
  2702. #emit ADD.C 28
  2703. #emit PUSH.pri
  2704. #emit LOAD.S.pri pointer
  2705. #emit SCTRL 6
  2706. #emit CONST.alt 0xFFFFFFFF
  2707. #emit STOR.S.pri ret
  2708. #emit JEQ hooks_do_hooks_call_no_als
  2709. }
  2710. // Do ALS just in case (YSI no longer uses this though now).
  2711. P:2("Hooks_OnPlayerExitedMenu end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerExitedMenu));
  2712. HOOK_RETURN<PlayerExitedMenu>
  2713. }
  2714. #if defined _ALS_OnPlayerExitedMenu
  2715. #undef OnPlayerExitedMenu
  2716. #else
  2717. #define _ALS_OnPlayerExitedMenu
  2718. #endif
  2719. #define OnPlayerExitedMenu S@@_OnPlayerExitedMenu
  2720. ALS_FORWARD<PlayerExitedMenu>
  2721. public OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid)
  2722. {
  2723. P:2("Hooks_OnPlayerInteriorChange called: %d, %d, %d", playerid, newinteriorid, oldinteriorid);
  2724. new
  2725. end = YSI_g_sCallbackData[ALS_OnPlayerInteriorChange][E_FUNC_HOOK_DATA_END],
  2726. start = YSI_g_sCallbackData[ALS_OnPlayerInteriorChange][E_FUNC_HOOK_DATA_START],
  2727. ret = ALS_R_PlayerInteriorChange;
  2728. if (start == end)
  2729. {
  2730. P:2("Hooks_OnPlayerInteriorChange end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerInteriorChange));
  2731. HOOK_CALL<PlayerInteriorChange>
  2732. }
  2733. new
  2734. idx,
  2735. pointer,
  2736. re = end;
  2737. if (end > sizeof (YSI_g_sCallbackAddresses))
  2738. {
  2739. re = sizeof (YSI_g_sCallbackAddresses);
  2740. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  2741. }
  2742. // Do the initial fast elements.
  2743. while (start != re)
  2744. {
  2745. pointer = YSI_g_sCallbackAddresses[start++];
  2746. #emit PUSH.S oldinteriorid
  2747. #emit PUSH.S newinteriorid
  2748. #emit PUSH.S playerid
  2749. #emit PUSH.C 12
  2750. #emit LCTRL 6
  2751. #emit ADD.C 28
  2752. #emit PUSH.pri
  2753. #emit LOAD.S.pri pointer
  2754. #emit SCTRL 6
  2755. #emit CONST.alt 0xFFFFFFFF
  2756. #emit STOR.S.pri ret
  2757. #emit JEQ hooks_do_hooks_call_no_als
  2758. }
  2759. // Get any remaining pointers the old way.
  2760. while (start++ != end)
  2761. {
  2762. idx = AMX_GetPublicPointer(idx, pointer, "@yH_PlayerInteriorChange");
  2763. #emit PUSH.S oldinteriorid
  2764. #emit PUSH.S newinteriorid
  2765. #emit PUSH.S playerid
  2766. #emit PUSH.C 12
  2767. #emit LCTRL 6
  2768. #emit ADD.C 28
  2769. #emit PUSH.pri
  2770. #emit LOAD.S.pri pointer
  2771. #emit SCTRL 6
  2772. #emit CONST.alt 0xFFFFFFFF
  2773. #emit STOR.S.pri ret
  2774. #emit JEQ hooks_do_hooks_call_no_als
  2775. }
  2776. // Do ALS just in case (YSI no longer uses this though now).
  2777. P:2("Hooks_OnPlayerInteriorChange end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerInteriorChange));
  2778. HOOK_RETURN<PlayerInteriorChange>
  2779. }
  2780. #if defined _ALS_OnPlayerInteriorChange
  2781. #undef OnPlayerInteriorChange
  2782. #else
  2783. #define _ALS_OnPlayerInteriorChange
  2784. #endif
  2785. #define OnPlayerInteriorChange S@@_OnPlayerInteriorChange
  2786. ALS_FORWARD<PlayerInteriorChange>
  2787. public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
  2788. {
  2789. P:2("Hooks_OnPlayerKeyStateChange called: %d, %d, %d", playerid, newkeys, oldkeys);
  2790. new
  2791. end = YSI_g_sCallbackData[ALS_OnPlayerKeyStateChange][E_FUNC_HOOK_DATA_END],
  2792. start = YSI_g_sCallbackData[ALS_OnPlayerKeyStateChange][E_FUNC_HOOK_DATA_START],
  2793. ret = ALS_R_PlayerKeyStateChange;
  2794. if (start == end)
  2795. {
  2796. P:2("Hooks_OnPlayerKeyStateChange end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerKeyStateChange));
  2797. HOOK_CALL<PlayerKeyStateChange>
  2798. }
  2799. new
  2800. idx,
  2801. pointer,
  2802. re = end;
  2803. if (end > sizeof (YSI_g_sCallbackAddresses))
  2804. {
  2805. re = sizeof (YSI_g_sCallbackAddresses);
  2806. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  2807. }
  2808. // Do the initial fast elements.
  2809. while (start != re)
  2810. {
  2811. pointer = YSI_g_sCallbackAddresses[start++];
  2812. #emit PUSH.S oldkeys
  2813. #emit PUSH.S newkeys
  2814. #emit PUSH.S playerid
  2815. #emit PUSH.C 12
  2816. #emit LCTRL 6
  2817. #emit ADD.C 28
  2818. #emit PUSH.pri
  2819. #emit LOAD.S.pri pointer
  2820. #emit SCTRL 6
  2821. #emit CONST.alt 0xFFFFFFFF
  2822. #emit STOR.S.pri ret
  2823. #emit JEQ hooks_do_hooks_call_no_als
  2824. }
  2825. // Get any remaining pointers the old way.
  2826. while (start++ != end)
  2827. {
  2828. idx = AMX_GetPublicPointer(idx, pointer, "@yH_PlayerKeyStateChange");
  2829. #emit PUSH.S oldkeys
  2830. #emit PUSH.S newkeys
  2831. #emit PUSH.S playerid
  2832. #emit PUSH.C 12
  2833. #emit LCTRL 6
  2834. #emit ADD.C 28
  2835. #emit PUSH.pri
  2836. #emit LOAD.S.pri pointer
  2837. #emit SCTRL 6
  2838. #emit CONST.alt 0xFFFFFFFF
  2839. #emit STOR.S.pri ret
  2840. #emit JEQ hooks_do_hooks_call_no_als
  2841. }
  2842. // Do ALS just in case (YSI no longer uses this though now).
  2843. P:2("Hooks_OnPlayerKeyStateChange end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerKeyStateChange));
  2844. HOOK_RETURN<PlayerKeyStateChange>
  2845. }
  2846. #if defined _ALS_OnPlayerKeyStateChange
  2847. #undef OnPlayerKeyStateChange
  2848. #else
  2849. #define _ALS_OnPlayerKeyStateChange
  2850. #endif
  2851. #define OnPlayerKeyStateChange S@@_OnPlayerKeyStateChange
  2852. ALS_FORWARD<PlayerKeyStateChange>
  2853. public OnRconLoginAttempt(ip[], password[], success)
  2854. {
  2855. P:2("Hooks_OnRconLoginAttempt called: \"%s\", \"%s\", %d", ip, password, success);
  2856. new
  2857. end = YSI_g_sCallbackData[ALS_OnRconLoginAttempt][E_FUNC_HOOK_DATA_END],
  2858. start = YSI_g_sCallbackData[ALS_OnRconLoginAttempt][E_FUNC_HOOK_DATA_START],
  2859. ret = ALS_R_RconLoginAttempt;
  2860. if (start == end)
  2861. {
  2862. P:2("Hooks_OnRconLoginAttempt end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnRconLoginAttempt));
  2863. HOOK_CALL<RconLoginAttempt>
  2864. }
  2865. new
  2866. idx,
  2867. pointer,
  2868. re = end;
  2869. if (end > sizeof (YSI_g_sCallbackAddresses))
  2870. {
  2871. re = sizeof (YSI_g_sCallbackAddresses);
  2872. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  2873. }
  2874. // Do the initial fast elements.
  2875. while (start != re)
  2876. {
  2877. pointer = YSI_g_sCallbackAddresses[start++];
  2878. #emit PUSH.S success
  2879. #emit PUSH.S password
  2880. #emit PUSH.S ip
  2881. #emit PUSH.C 12
  2882. #emit LCTRL 6
  2883. #emit ADD.C 28
  2884. #emit PUSH.pri
  2885. #emit LOAD.S.pri pointer
  2886. #emit SCTRL 6
  2887. #emit CONST.alt 0xFFFFFFFF
  2888. #emit STOR.S.pri ret
  2889. #emit JEQ hooks_do_hooks_call_no_als
  2890. }
  2891. // Get any remaining pointers the old way.
  2892. while (start++ != end)
  2893. {
  2894. idx = AMX_GetPublicPointer(idx, pointer, "@yH_RconLoginAttempt");
  2895. #emit PUSH.S success
  2896. #emit PUSH.S password
  2897. #emit PUSH.S ip
  2898. #emit PUSH.C 12
  2899. #emit LCTRL 6
  2900. #emit ADD.C 28
  2901. #emit PUSH.pri
  2902. #emit LOAD.S.pri pointer
  2903. #emit SCTRL 6
  2904. #emit CONST.alt 0xFFFFFFFF
  2905. #emit STOR.S.pri ret
  2906. #emit JEQ hooks_do_hooks_call_no_als
  2907. }
  2908. // Do ALS just in case (YSI no longer uses this though now).
  2909. P:2("Hooks_OnRconLoginAttempt end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnRconLoginAttempt));
  2910. HOOK_RETURN<RconLoginAttempt>
  2911. }
  2912. #if defined _ALS_OnRconLoginAttempt
  2913. #undef OnRconLoginAttempt
  2914. #else
  2915. #define _ALS_OnRconLoginAttempt
  2916. #endif
  2917. #define OnRconLoginAttempt S@@_OnRconLoginAttempt
  2918. ALS_FORWARD<RconLoginAttempt>
  2919. public OnPlayerUpdate(playerid)
  2920. {
  2921. P:7("Hooks_OnPlayerUpdate called: %d", playerid);
  2922. new
  2923. end = YSI_g_sCallbackData[ALS_OnPlayerUpdate][E_FUNC_HOOK_DATA_END],
  2924. start = YSI_g_sCallbackData[ALS_OnPlayerUpdate][E_FUNC_HOOK_DATA_START],
  2925. ret = ALS_R_PlayerUpdate;
  2926. if (start == end)
  2927. {
  2928. P:7("Hooks_OnPlayerUpdate end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerUpdate));
  2929. HOOK_CALL<PlayerUpdate>
  2930. }
  2931. new
  2932. idx,
  2933. pointer,
  2934. re = end;
  2935. if (end > sizeof (YSI_g_sCallbackAddresses))
  2936. {
  2937. re = sizeof (YSI_g_sCallbackAddresses);
  2938. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  2939. }
  2940. // Do the initial fast elements.
  2941. while (start != re)
  2942. {
  2943. pointer = YSI_g_sCallbackAddresses[start++];
  2944. #emit PUSH.S playerid
  2945. #emit PUSH.C 4
  2946. #emit LCTRL 6
  2947. #emit ADD.C 28
  2948. #emit PUSH.pri
  2949. #emit LOAD.S.pri pointer
  2950. #emit SCTRL 6
  2951. #emit CONST.alt 0xFFFFFFFF
  2952. #emit STOR.S.pri ret
  2953. #emit JEQ hooks_do_hooks_call_no_als
  2954. }
  2955. // Get any remaining pointers the old way.
  2956. while (start++ != end)
  2957. {
  2958. idx = AMX_GetPublicPointer(idx, pointer, "@yH_PlayerUpdate");
  2959. #emit PUSH.S playerid
  2960. #emit PUSH.C 4
  2961. #emit LCTRL 6
  2962. #emit ADD.C 28
  2963. #emit PUSH.pri
  2964. #emit LOAD.S.pri pointer
  2965. #emit SCTRL 6
  2966. #emit CONST.alt 0xFFFFFFFF
  2967. #emit STOR.S.pri ret
  2968. #emit JEQ hooks_do_hooks_call_no_als
  2969. }
  2970. // Do ALS just in case (YSI no longer uses this though now).
  2971. P:7("Hooks_OnPlayerUpdate end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerUpdate));
  2972. HOOK_RETURN<PlayerUpdate>
  2973. }
  2974. #if defined _ALS_OnPlayerUpdate
  2975. #undef OnPlayerUpdate
  2976. #else
  2977. #define _ALS_OnPlayerUpdate
  2978. #endif
  2979. #define OnPlayerUpdate S@@_OnPlayerUpdate
  2980. ALS_FORWARD<PlayerUpdate>
  2981. public OnPlayerStreamIn(playerid, forplayerid)
  2982. {
  2983. P:2("Hooks_OnPlayerStreamIn called: %d, %d", playerid, forplayerid);
  2984. new
  2985. end = YSI_g_sCallbackData[ALS_OnPlayerStreamIn][E_FUNC_HOOK_DATA_END],
  2986. start = YSI_g_sCallbackData[ALS_OnPlayerStreamIn][E_FUNC_HOOK_DATA_START],
  2987. ret = ALS_R_PlayerStreamIn;
  2988. if (start == end)
  2989. {
  2990. P:2("Hooks_OnPlayerStreamIn end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerStreamIn));
  2991. HOOK_CALL<PlayerStreamIn>
  2992. }
  2993. new
  2994. idx,
  2995. pointer,
  2996. re = end;
  2997. if (end > sizeof (YSI_g_sCallbackAddresses))
  2998. {
  2999. re = sizeof (YSI_g_sCallbackAddresses);
  3000. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  3001. }
  3002. // Do the initial fast elements.
  3003. while (start != re)
  3004. {
  3005. pointer = YSI_g_sCallbackAddresses[start++];
  3006. #emit PUSH.S forplayerid
  3007. #emit PUSH.S playerid
  3008. #emit PUSH.C 8
  3009. #emit LCTRL 6
  3010. #emit ADD.C 28
  3011. #emit PUSH.pri
  3012. #emit LOAD.S.pri pointer
  3013. #emit SCTRL 6
  3014. #emit CONST.alt 0xFFFFFFFF
  3015. #emit STOR.S.pri ret
  3016. #emit JEQ hooks_do_hooks_call_no_als
  3017. }
  3018. // Get any remaining pointers the old way.
  3019. while (start++ != end)
  3020. {
  3021. idx = AMX_GetPublicPointer(idx, pointer, "@yH_PlayerStreamIn");
  3022. #emit PUSH.S forplayerid
  3023. #emit PUSH.S playerid
  3024. #emit PUSH.C 8
  3025. #emit LCTRL 6
  3026. #emit ADD.C 28
  3027. #emit PUSH.pri
  3028. #emit LOAD.S.pri pointer
  3029. #emit SCTRL 6
  3030. #emit CONST.alt 0xFFFFFFFF
  3031. #emit STOR.S.pri ret
  3032. #emit JEQ hooks_do_hooks_call_no_als
  3033. }
  3034. // Do ALS just in case (YSI no longer uses this though now).
  3035. P:2("Hooks_OnPlayerStreamIn end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerStreamIn));
  3036. HOOK_RETURN<PlayerStreamIn>
  3037. }
  3038. #if defined _ALS_OnPlayerStreamIn
  3039. #undef OnPlayerStreamIn
  3040. #else
  3041. #define _ALS_OnPlayerStreamIn
  3042. #endif
  3043. #define OnPlayerStreamIn S@@_OnPlayerStreamIn
  3044. ALS_FORWARD<PlayerStreamIn>
  3045. public OnPlayerStreamOut(playerid, forplayerid)
  3046. {
  3047. P:2("Hooks_OnPlayerStreamOut called: %d, %d", playerid, forplayerid);
  3048. new
  3049. end = YSI_g_sCallbackData[ALS_OnPlayerStreamOut][E_FUNC_HOOK_DATA_END],
  3050. start = YSI_g_sCallbackData[ALS_OnPlayerStreamOut][E_FUNC_HOOK_DATA_START],
  3051. ret = ALS_R_PlayerStreamOut;
  3052. if (start == end)
  3053. {
  3054. P:2("Hooks_OnPlayerStreamOut end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerStreamOut));
  3055. HOOK_CALL<PlayerStreamOut>
  3056. }
  3057. new
  3058. idx,
  3059. pointer,
  3060. re = end;
  3061. if (end > sizeof (YSI_g_sCallbackAddresses))
  3062. {
  3063. re = sizeof (YSI_g_sCallbackAddresses);
  3064. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  3065. }
  3066. // Do the initial fast elements.
  3067. while (start != re)
  3068. {
  3069. pointer = YSI_g_sCallbackAddresses[start++];
  3070. #emit PUSH.S forplayerid
  3071. #emit PUSH.S playerid
  3072. #emit PUSH.C 8
  3073. #emit LCTRL 6
  3074. #emit ADD.C 28
  3075. #emit PUSH.pri
  3076. #emit LOAD.S.pri pointer
  3077. #emit SCTRL 6
  3078. #emit CONST.alt 0xFFFFFFFF
  3079. #emit STOR.S.pri ret
  3080. #emit JEQ hooks_do_hooks_call_no_als
  3081. }
  3082. // Get any remaining pointers the old way.
  3083. while (start++ != end)
  3084. {
  3085. idx = AMX_GetPublicPointer(idx, pointer, "@yH_PlayerStreamOut");
  3086. #emit PUSH.S forplayerid
  3087. #emit PUSH.S playerid
  3088. #emit PUSH.C 8
  3089. #emit LCTRL 6
  3090. #emit ADD.C 28
  3091. #emit PUSH.pri
  3092. #emit LOAD.S.pri pointer
  3093. #emit SCTRL 6
  3094. #emit CONST.alt 0xFFFFFFFF
  3095. #emit STOR.S.pri ret
  3096. #emit JEQ hooks_do_hooks_call_no_als
  3097. }
  3098. // Do ALS just in case (YSI no longer uses this though now).
  3099. P:2("Hooks_OnPlayerStreamOut end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerStreamOut));
  3100. HOOK_RETURN<PlayerStreamOut>
  3101. }
  3102. #if defined _ALS_OnPlayerStreamOut
  3103. #undef OnPlayerStreamOut
  3104. #else
  3105. #define _ALS_OnPlayerStreamOut
  3106. #endif
  3107. #define OnPlayerStreamOut S@@_OnPlayerStreamOut
  3108. ALS_FORWARD<PlayerStreamOut>
  3109. public OnVehicleStreamIn(vehicleid, forplayerid)
  3110. {
  3111. P:2("Hooks_OnVehicleStreamIn called: %d, %d", vehicleid, forplayerid);
  3112. new
  3113. end = YSI_g_sCallbackData[ALS_OnVehicleStreamIn][E_FUNC_HOOK_DATA_END],
  3114. start = YSI_g_sCallbackData[ALS_OnVehicleStreamIn][E_FUNC_HOOK_DATA_START],
  3115. ret = ALS_R_VehicleStreamIn;
  3116. if (start == end)
  3117. {
  3118. P:2("Hooks_OnVehicleStreamIn end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnVehicleStreamIn));
  3119. HOOK_CALL<VehicleStreamIn>
  3120. }
  3121. new
  3122. idx,
  3123. pointer,
  3124. re = end;
  3125. if (end > sizeof (YSI_g_sCallbackAddresses))
  3126. {
  3127. re = sizeof (YSI_g_sCallbackAddresses);
  3128. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  3129. }
  3130. // Do the initial fast elements.
  3131. while (start != re)
  3132. {
  3133. pointer = YSI_g_sCallbackAddresses[start++];
  3134. #emit PUSH.S forplayerid
  3135. #emit PUSH.S vehicleid
  3136. #emit PUSH.C 8
  3137. #emit LCTRL 6
  3138. #emit ADD.C 28
  3139. #emit PUSH.pri
  3140. #emit LOAD.S.pri pointer
  3141. #emit SCTRL 6
  3142. #emit CONST.alt 0xFFFFFFFF
  3143. #emit STOR.S.pri ret
  3144. #emit JEQ hooks_do_hooks_call_no_als
  3145. }
  3146. // Get any remaining pointers the old way.
  3147. while (start++ != end)
  3148. {
  3149. idx = AMX_GetPublicPointer(idx, pointer, "@yH_VehicleStreamIn");
  3150. #emit PUSH.S forplayerid
  3151. #emit PUSH.S vehicleid
  3152. #emit PUSH.C 8
  3153. #emit LCTRL 6
  3154. #emit ADD.C 28
  3155. #emit PUSH.pri
  3156. #emit LOAD.S.pri pointer
  3157. #emit SCTRL 6
  3158. #emit CONST.alt 0xFFFFFFFF
  3159. #emit STOR.S.pri ret
  3160. #emit JEQ hooks_do_hooks_call_no_als
  3161. }
  3162. // Do ALS just in case (YSI no longer uses this though now).
  3163. P:2("Hooks_OnVehicleStreamIn end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnVehicleStreamIn));
  3164. HOOK_RETURN<VehicleStreamIn>
  3165. }
  3166. #if defined _ALS_OnVehicleStreamIn
  3167. #undef OnVehicleStreamIn
  3168. #else
  3169. #define _ALS_OnVehicleStreamIn
  3170. #endif
  3171. #define OnVehicleStreamIn S@@_OnVehicleStreamIn
  3172. ALS_FORWARD<VehicleStreamIn>
  3173. public OnVehicleStreamOut(vehicleid, forplayerid)
  3174. {
  3175. P:2("Hooks_OnVehicleStreamOut called: %d, %d", vehicleid, forplayerid);
  3176. new
  3177. end = YSI_g_sCallbackData[ALS_OnVehicleStreamOut][E_FUNC_HOOK_DATA_END],
  3178. start = YSI_g_sCallbackData[ALS_OnVehicleStreamOut][E_FUNC_HOOK_DATA_START],
  3179. ret = ALS_R_VehicleStreamOut;
  3180. if (start == end)
  3181. {
  3182. P:2("Hooks_OnVehicleStreamOut end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnVehicleStreamOut));
  3183. HOOK_CALL<VehicleStreamOut>
  3184. }
  3185. new
  3186. idx,
  3187. pointer,
  3188. re = end;
  3189. if (end > sizeof (YSI_g_sCallbackAddresses))
  3190. {
  3191. re = sizeof (YSI_g_sCallbackAddresses);
  3192. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  3193. }
  3194. // Do the initial fast elements.
  3195. while (start != re)
  3196. {
  3197. pointer = YSI_g_sCallbackAddresses[start++];
  3198. #emit PUSH.S forplayerid
  3199. #emit PUSH.S vehicleid
  3200. #emit PUSH.C 8
  3201. #emit LCTRL 6
  3202. #emit ADD.C 28
  3203. #emit PUSH.pri
  3204. #emit LOAD.S.pri pointer
  3205. #emit SCTRL 6
  3206. #emit CONST.alt 0xFFFFFFFF
  3207. #emit STOR.S.pri ret
  3208. #emit JEQ hooks_do_hooks_call_no_als
  3209. }
  3210. // Get any remaining pointers the old way.
  3211. while (start++ != end)
  3212. {
  3213. idx = AMX_GetPublicPointer(idx, pointer, "@yH_VehicleStreamOut");
  3214. #emit PUSH.S forplayerid
  3215. #emit PUSH.S vehicleid
  3216. #emit PUSH.C 8
  3217. #emit LCTRL 6
  3218. #emit ADD.C 28
  3219. #emit PUSH.pri
  3220. #emit LOAD.S.pri pointer
  3221. #emit SCTRL 6
  3222. #emit CONST.alt 0xFFFFFFFF
  3223. #emit STOR.S.pri ret
  3224. #emit JEQ hooks_do_hooks_call_no_als
  3225. }
  3226. // Do ALS just in case (YSI no longer uses this though now).
  3227. P:2("Hooks_OnVehicleStreamOut end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnVehicleStreamOut));
  3228. HOOK_RETURN<VehicleStreamOut>
  3229. }
  3230. #if defined _ALS_OnVehicleStreamOut
  3231. #undef OnVehicleStreamOut
  3232. #else
  3233. #define _ALS_OnVehicleStreamOut
  3234. #endif
  3235. #define OnVehicleStreamOut S@@_OnVehicleStreamOut
  3236. ALS_FORWARD<VehicleStreamOut>
  3237. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  3238. {
  3239. P:2("Hooks_OnDialogResponse called: %d, %d, %d, %d, \"%s\"", playerid, dialogid, response, listitem, inputtext);
  3240. new
  3241. end = YSI_g_sCallbackData[ALS_OnDialogResponse][E_FUNC_HOOK_DATA_END],
  3242. start = YSI_g_sCallbackData[ALS_OnDialogResponse][E_FUNC_HOOK_DATA_START],
  3243. ret = ALS_R_DialogResponse;
  3244. if (start == end)
  3245. {
  3246. P:2("Hooks_OnDialogResponse end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnDialogResponse));
  3247. HOOK_CALL<DialogResponse>
  3248. }
  3249. new
  3250. idx,
  3251. pointer,
  3252. re = end;
  3253. if (end > sizeof (YSI_g_sCallbackAddresses))
  3254. {
  3255. re = sizeof (YSI_g_sCallbackAddresses);
  3256. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  3257. }
  3258. // Do the initial fast elements.
  3259. while (start != re)
  3260. {
  3261. pointer = YSI_g_sCallbackAddresses[start++];
  3262. #emit PUSH.S inputtext
  3263. #emit PUSH.S listitem
  3264. #emit PUSH.S response
  3265. #emit PUSH.S dialogid
  3266. #emit PUSH.S playerid
  3267. #emit PUSH.C 20
  3268. #emit LCTRL 6
  3269. #emit ADD.C 28
  3270. #emit PUSH.pri
  3271. #emit LOAD.S.pri pointer
  3272. #emit SCTRL 6
  3273. #emit CONST.alt 0xFFFFFFFF
  3274. #emit STOR.S.pri ret
  3275. #emit JEQ hooks_do_hooks_call_no_als
  3276. }
  3277. // Get any remaining pointers the old way.
  3278. while (start++ != end)
  3279. {
  3280. idx = AMX_GetPublicPointer(idx, pointer, "@yH_DialogResponse");
  3281. #emit PUSH.S inputtext
  3282. #emit PUSH.S listitem
  3283. #emit PUSH.S response
  3284. #emit PUSH.S dialogid
  3285. #emit PUSH.S playerid
  3286. #emit PUSH.C 20
  3287. #emit LCTRL 6
  3288. #emit ADD.C 28
  3289. #emit PUSH.pri
  3290. #emit LOAD.S.pri pointer
  3291. #emit SCTRL 6
  3292. #emit CONST.alt 0xFFFFFFFF
  3293. #emit STOR.S.pri ret
  3294. #emit JEQ hooks_do_hooks_call_no_als
  3295. }
  3296. // Do ALS just in case (YSI no longer uses this though now).
  3297. P:2("Hooks_OnDialogResponse end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnDialogResponse));
  3298. HOOK_RETURN<DialogResponse>
  3299. }
  3300. #if defined _ALS_OnDialogResponse
  3301. #undef OnDialogResponse
  3302. #else
  3303. #define _ALS_OnDialogResponse
  3304. #endif
  3305. #define OnDialogResponse S@@_OnDialogResponse
  3306. ALS_FORWARD<DialogResponse>
  3307. public OnPlayerClickPlayer(playerid, clickedplayerid, source)
  3308. {
  3309. P:2("Hooks_OnPlayerClickPlayer called: %d, %d, %d", playerid, clickedplayerid, source);
  3310. new
  3311. end = YSI_g_sCallbackData[ALS_OnPlayerClickPlayer][E_FUNC_HOOK_DATA_END],
  3312. start = YSI_g_sCallbackData[ALS_OnPlayerClickPlayer][E_FUNC_HOOK_DATA_START],
  3313. ret = ALS_R_PlayerClickPlayer;
  3314. if (start == end)
  3315. {
  3316. P:2("Hooks_OnPlayerClickPlayer end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerClickPlayer));
  3317. HOOK_CALL<PlayerClickPlayer>
  3318. }
  3319. new
  3320. idx,
  3321. pointer,
  3322. re = end;
  3323. if (end > sizeof (YSI_g_sCallbackAddresses))
  3324. {
  3325. re = sizeof (YSI_g_sCallbackAddresses);
  3326. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  3327. }
  3328. // Do the initial fast elements.
  3329. while (start != re)
  3330. {
  3331. pointer = YSI_g_sCallbackAddresses[start++];
  3332. #emit PUSH.S source
  3333. #emit PUSH.S clickedplayerid
  3334. #emit PUSH.S playerid
  3335. #emit PUSH.C 12
  3336. #emit LCTRL 6
  3337. #emit ADD.C 28
  3338. #emit PUSH.pri
  3339. #emit LOAD.S.pri pointer
  3340. #emit SCTRL 6
  3341. #emit CONST.alt 0xFFFFFFFF
  3342. #emit STOR.S.pri ret
  3343. #emit JEQ hooks_do_hooks_call_no_als
  3344. }
  3345. // Get any remaining pointers the old way.
  3346. while (start++ != end)
  3347. {
  3348. idx = AMX_GetPublicPointer(idx, pointer, "@yH_PlayerClickPlayer");
  3349. #emit PUSH.S source
  3350. #emit PUSH.S clickedplayerid
  3351. #emit PUSH.S playerid
  3352. #emit PUSH.C 12
  3353. #emit LCTRL 6
  3354. #emit ADD.C 28
  3355. #emit PUSH.pri
  3356. #emit LOAD.S.pri pointer
  3357. #emit SCTRL 6
  3358. #emit CONST.alt 0xFFFFFFFF
  3359. #emit STOR.S.pri ret
  3360. #emit JEQ hooks_do_hooks_call_no_als
  3361. }
  3362. // Do ALS just in case (YSI no longer uses this though now).
  3363. P:2("Hooks_OnPlayerClickPlayer end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerClickPlayer));
  3364. HOOK_RETURN<PlayerClickPlayer>
  3365. }
  3366. #if defined _ALS_OnPlayerClickPlayer
  3367. #undef OnPlayerClickPlayer
  3368. #else
  3369. #define _ALS_OnPlayerClickPlayer
  3370. #endif
  3371. #define OnPlayerClickPlayer S@@_OnPlayerClickPlayer
  3372. ALS_FORWARD<PlayerClickPlayer>
  3373. public OnPlayerTakeDamage(playerid, issuerid, Float:amount, weaponid)
  3374. {
  3375. P:2("Hooks_OnPlayerTakeDamage called: %d, %d, %f, %d", playerid, issuerid, Float:amount, weaponid);
  3376. new
  3377. end = YSI_g_sCallbackData[ALS_OnPlayerTakeDamage][E_FUNC_HOOK_DATA_END],
  3378. start = YSI_g_sCallbackData[ALS_OnPlayerTakeDamage][E_FUNC_HOOK_DATA_START],
  3379. ret = ALS_R_PlayerTakeDamage;
  3380. if (start == end)
  3381. {
  3382. P:2("Hooks_OnPlayerTakeDamage end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerTakeDamage));
  3383. HOOK_CALL<PlayerTakeDamage>
  3384. }
  3385. new
  3386. idx,
  3387. pointer,
  3388. re = end;
  3389. if (end > sizeof (YSI_g_sCallbackAddresses))
  3390. {
  3391. re = sizeof (YSI_g_sCallbackAddresses);
  3392. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  3393. }
  3394. // Do the initial fast elements.
  3395. while (start != re)
  3396. {
  3397. pointer = YSI_g_sCallbackAddresses[start++];
  3398. #emit PUSH.S weaponid
  3399. #emit PUSH.S amount
  3400. #emit PUSH.S issuerid
  3401. #emit PUSH.S playerid
  3402. #emit PUSH.C 16
  3403. #emit LCTRL 6
  3404. #emit ADD.C 28
  3405. #emit PUSH.pri
  3406. #emit LOAD.S.pri pointer
  3407. #emit SCTRL 6
  3408. #emit CONST.alt 0xFFFFFFFF
  3409. #emit STOR.S.pri ret
  3410. #emit JEQ hooks_do_hooks_call_no_als
  3411. }
  3412. // Get any remaining pointers the old way.
  3413. while (start++ != end)
  3414. {
  3415. idx = AMX_GetPublicPointer(idx, pointer, "@yH_PlayerTakeDamage");
  3416. #emit PUSH.S weaponid
  3417. #emit PUSH.S amount
  3418. #emit PUSH.S issuerid
  3419. #emit PUSH.S playerid
  3420. #emit PUSH.C 16
  3421. #emit LCTRL 6
  3422. #emit ADD.C 28
  3423. #emit PUSH.pri
  3424. #emit LOAD.S.pri pointer
  3425. #emit SCTRL 6
  3426. #emit CONST.alt 0xFFFFFFFF
  3427. #emit STOR.S.pri ret
  3428. #emit JEQ hooks_do_hooks_call_no_als
  3429. }
  3430. // Do ALS just in case (YSI no longer uses this though now).
  3431. P:2("Hooks_OnPlayerTakeDamage end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerTakeDamage));
  3432. HOOK_RETURN<PlayerTakeDamage>
  3433. }
  3434. #if defined _ALS_OnPlayerTakeDamage
  3435. #undef OnPlayerTakeDamage
  3436. #else
  3437. #define _ALS_OnPlayerTakeDamage
  3438. #endif
  3439. #define OnPlayerTakeDamage S@@_OnPlayerTakeDamage
  3440. ALS_FORWARD<PlayerTakeDamage>
  3441. public OnPlayerGiveDamage(playerid, damagedid, Float:amount, weaponid)
  3442. {
  3443. P:2("Hooks_OnPlayerGiveDamage called: %d, %d, %f, %d", playerid, damagedid, Float:amount, weaponid);
  3444. new
  3445. end = YSI_g_sCallbackData[ALS_OnPlayerGiveDamage][E_FUNC_HOOK_DATA_END],
  3446. start = YSI_g_sCallbackData[ALS_OnPlayerGiveDamage][E_FUNC_HOOK_DATA_START],
  3447. ret = ALS_R_PlayerGiveDamage;
  3448. if (start == end)
  3449. {
  3450. P:2("Hooks_OnPlayerGiveDamage end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerGiveDamage));
  3451. HOOK_CALL<PlayerGiveDamage>
  3452. }
  3453. new
  3454. idx,
  3455. pointer,
  3456. re = end;
  3457. if (end > sizeof (YSI_g_sCallbackAddresses))
  3458. {
  3459. re = sizeof (YSI_g_sCallbackAddresses);
  3460. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  3461. }
  3462. // Do the initial fast elements.
  3463. while (start != re)
  3464. {
  3465. pointer = YSI_g_sCallbackAddresses[start++];
  3466. #emit PUSH.S weaponid
  3467. #emit PUSH.S amount
  3468. #emit PUSH.S damagedid
  3469. #emit PUSH.S playerid
  3470. #emit PUSH.C 16
  3471. #emit LCTRL 6
  3472. #emit ADD.C 28
  3473. #emit PUSH.pri
  3474. #emit LOAD.S.pri pointer
  3475. #emit SCTRL 6
  3476. #emit CONST.alt 0xFFFFFFFF
  3477. #emit STOR.S.pri ret
  3478. #emit JEQ hooks_do_hooks_call_no_als
  3479. }
  3480. // Get any remaining pointers the old way.
  3481. while (start++ != end)
  3482. {
  3483. idx = AMX_GetPublicPointer(idx, pointer, "@yH_PlayerGiveDamage");
  3484. #emit PUSH.S weaponid
  3485. #emit PUSH.S amount
  3486. #emit PUSH.S damagedid
  3487. #emit PUSH.S playerid
  3488. #emit PUSH.C 16
  3489. #emit LCTRL 6
  3490. #emit ADD.C 28
  3491. #emit PUSH.pri
  3492. #emit LOAD.S.pri pointer
  3493. #emit SCTRL 6
  3494. #emit CONST.alt 0xFFFFFFFF
  3495. #emit STOR.S.pri ret
  3496. #emit JEQ hooks_do_hooks_call_no_als
  3497. }
  3498. // Do ALS just in case (YSI no longer uses this though now).
  3499. P:2("Hooks_OnPlayerGiveDamage end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerGiveDamage));
  3500. HOOK_RETURN<PlayerGiveDamage>
  3501. }
  3502. #if defined _ALS_OnPlayerGiveDamage
  3503. #undef OnPlayerGiveDamage
  3504. #else
  3505. #define _ALS_OnPlayerGiveDamage
  3506. #endif
  3507. #define OnPlayerGiveDamage S@@_OnPlayerGiveDamage
  3508. ALS_FORWARD<PlayerGiveDamage>
  3509. stock Hooks_OnPlayerLogin(playerid, uid) <y_hooks_PlayerLogin : y_hooks_PlayerLogin_none>
  3510. {
  3511. #pragma unused playerid, uid
  3512. }
  3513. stock Hooks_OnPlayerLogin(playerid, uid) <y_hooks_PlayerLogin : y_hooks_PlayerLogin_some>
  3514. {
  3515. P:2("Hooks_OnPlayerLogin called: %d, %d", playerid, uid);
  3516. new
  3517. end = YSI_g_sCallbackData[ALS_OnPlayerLogin][E_FUNC_HOOK_DATA_END],
  3518. start = YSI_g_sCallbackData[ALS_OnPlayerLogin][E_FUNC_HOOK_DATA_START],
  3519. ret = ALS_R_PlayerLogin;
  3520. if (start == end)
  3521. {
  3522. P:2("Hooks_OnPlayerLogin end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerLogin));
  3523. hooks_do_hooks_call_no_als:
  3524. return;
  3525. //HOOK_CALL<PlayerLogin>
  3526. }
  3527. new
  3528. idx,
  3529. pointer,
  3530. re = end;
  3531. if (end > sizeof (YSI_g_sCallbackAddresses))
  3532. {
  3533. re = sizeof (YSI_g_sCallbackAddresses);
  3534. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  3535. }
  3536. // Do the initial fast elements.
  3537. while (start != re)
  3538. {
  3539. pointer = YSI_g_sCallbackAddresses[start++];
  3540. #emit PUSH.S uid
  3541. #emit PUSH.S playerid
  3542. #emit PUSH.C 8
  3543. #emit LCTRL 6
  3544. #emit ADD.C 28
  3545. #emit PUSH.pri
  3546. #emit LOAD.S.pri pointer
  3547. #emit SCTRL 6
  3548. #emit CONST.alt 0xFFFFFFFF
  3549. #emit STOR.S.pri ret
  3550. #emit JEQ hooks_do_hooks_call_no_als
  3551. }
  3552. // Get any remaining pointers the old way.
  3553. while (start++ != end)
  3554. {
  3555. idx = AMX_GetPublicPointer(idx, pointer, "@yH_PlayerLogin");
  3556. #emit PUSH.S uid
  3557. #emit PUSH.S playerid
  3558. #emit PUSH.C 8
  3559. #emit LCTRL 6
  3560. #emit ADD.C 28
  3561. #emit PUSH.pri
  3562. #emit LOAD.S.pri pointer
  3563. #emit SCTRL 6
  3564. #emit CONST.alt 0xFFFFFFFF
  3565. #emit STOR.S.pri ret
  3566. #emit JEQ hooks_do_hooks_call_no_als
  3567. }
  3568. // Do ALS just in case (YSI no longer uses this though now).
  3569. P:2("Hooks_OnPlayerLogin end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerLogin));
  3570. //HOOK_RETURN<PlayerLogin>
  3571. }
  3572. /*#if defined _ALS_OnPlayerLogin
  3573. #undef OnPlayerLogin
  3574. #else
  3575. #define _ALS_OnPlayerLogin
  3576. #endif
  3577. #define OnPlayerLogin S@@_OnPlayerLogin
  3578. ALS_FORWARD<PlayerLogin>*/
  3579. stock Hooks_OnPlayerLogout(playerid, uid) <y_hooks_PlayerLogout : y_hooks_PlayerLogout_none>
  3580. {
  3581. #pragma unused playerid, uid
  3582. }
  3583. stock Hooks_OnPlayerLogout(playerid, uid) <y_hooks_PlayerLogout : y_hooks_PlayerLogout_some>
  3584. {
  3585. P:2("Hooks_OnPlayerLogout called: %d, %d", playerid, uid);
  3586. new
  3587. end = YSI_g_sCallbackData[ALS_OnPlayerLogout][E_FUNC_HOOK_DATA_END],
  3588. start = YSI_g_sCallbackData[ALS_OnPlayerLogout][E_FUNC_HOOK_DATA_START],
  3589. ret = ALS_R_PlayerLogout;
  3590. if (start == end)
  3591. {
  3592. P:2("Hooks_OnPlayerLogout end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerLogout));
  3593. //HOOK_CALL<PlayerLogout>
  3594. hooks_do_hooks_call_no_als:
  3595. return;
  3596. }
  3597. new
  3598. idx,
  3599. pointer,
  3600. re = end;
  3601. if (end > sizeof (YSI_g_sCallbackAddresses))
  3602. {
  3603. re = sizeof (YSI_g_sCallbackAddresses);
  3604. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  3605. }
  3606. // Do the initial fast elements.
  3607. while (start != re)
  3608. {
  3609. pointer = YSI_g_sCallbackAddresses[start++];
  3610. #emit PUSH.S uid
  3611. #emit PUSH.S playerid
  3612. #emit PUSH.C 8
  3613. #emit LCTRL 6
  3614. #emit ADD.C 28
  3615. #emit PUSH.pri
  3616. #emit LOAD.S.pri pointer
  3617. #emit SCTRL 6
  3618. #emit CONST.alt 0xFFFFFFFF
  3619. #emit STOR.S.pri ret
  3620. #emit JEQ hooks_do_hooks_call_no_als
  3621. }
  3622. // Get any remaining pointers the old way.
  3623. while (start++ != end)
  3624. {
  3625. idx = AMX_GetPublicPointer(idx, pointer, "@yH_PlayerLogout");
  3626. #emit PUSH.S uid
  3627. #emit PUSH.S playerid
  3628. #emit PUSH.C 8
  3629. #emit LCTRL 6
  3630. #emit ADD.C 28
  3631. #emit PUSH.pri
  3632. #emit LOAD.S.pri pointer
  3633. #emit SCTRL 6
  3634. #emit CONST.alt 0xFFFFFFFF
  3635. #emit STOR.S.pri ret
  3636. #emit JEQ hooks_do_hooks_call_no_als
  3637. }
  3638. // Do ALS just in case (YSI no longer uses this though now).
  3639. P:2("Hooks_OnPlayerLogout end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerLogout));
  3640. //HOOK_RETURN<PlayerLogout>
  3641. }
  3642. /*#if defined _ALS_OnPlayerLogout
  3643. #undef OnPlayerLogout
  3644. #else
  3645. #define _ALS_OnPlayerLogout
  3646. #endif
  3647. #define OnPlayerLogout S@@_OnPlayerlogout
  3648. ALS_FORWARD<PlayerLogout>*/
  3649. #if !defined OnPlayerClickMap
  3650. #undef ALS_PREFIX
  3651. #endinput
  3652. #endif
  3653. public OnPlayerClickMap(playerid, Float:fX, Float:fY, Float:fZ)
  3654. {
  3655. P:2("Hooks_OnPlayerClickMap called: %d, %f, %f, %f", playerid, fX, fY, fZ);
  3656. new
  3657. end = YSI_g_sCallbackData[ALS_OnPlayerClickMap][E_FUNC_HOOK_DATA_END],
  3658. start = YSI_g_sCallbackData[ALS_OnPlayerClickMap][E_FUNC_HOOK_DATA_START],
  3659. ret = ALS_R_PlayerClickMap;
  3660. if (start == end)
  3661. {
  3662. P:2("Hooks_OnPlayerClickMap end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerClickMap));
  3663. HOOK_CALL<PlayerClickMap>
  3664. }
  3665. new
  3666. idx,
  3667. pointer,
  3668. re = end;
  3669. if (end > sizeof (YSI_g_sCallbackAddresses))
  3670. {
  3671. re = sizeof (YSI_g_sCallbackAddresses);
  3672. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  3673. }
  3674. // Do the initial fast elements.
  3675. while (start != re)
  3676. {
  3677. pointer = YSI_g_sCallbackAddresses[start++];
  3678. #emit PUSH.S fZ
  3679. #emit PUSH.S fY
  3680. #emit PUSH.S fX
  3681. #emit PUSH.S playerid
  3682. #emit PUSH.C 16
  3683. #emit LCTRL 6
  3684. #emit ADD.C 28
  3685. #emit PUSH.pri
  3686. #emit LOAD.S.pri pointer
  3687. #emit SCTRL 6
  3688. #emit CONST.alt 0xFFFFFFFF
  3689. #emit STOR.S.pri ret
  3690. #emit JEQ hooks_do_hooks_call_no_als
  3691. }
  3692. // Get any remaining pointers the old way.
  3693. while (start++ != end)
  3694. {
  3695. idx = AMX_GetPublicPointer(idx, pointer, "@yH_PlayerClickMap");
  3696. #emit PUSH.S fZ
  3697. #emit PUSH.S fY
  3698. #emit PUSH.S fX
  3699. #emit PUSH.S playerid
  3700. #emit PUSH.C 16
  3701. #emit LCTRL 6
  3702. #emit ADD.C 28
  3703. #emit PUSH.pri
  3704. #emit LOAD.S.pri pointer
  3705. #emit SCTRL 6
  3706. #emit CONST.alt 0xFFFFFFFF
  3707. #emit STOR.S.pri ret
  3708. #emit JEQ hooks_do_hooks_call_no_als
  3709. }
  3710. // Do ALS just in case (YSI no longer uses this though now).
  3711. P:2("Hooks_OnPlayerClickMap end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerClickMap));
  3712. HOOK_RETURN<PlayerClickMap>
  3713. }
  3714. #if defined _ALS_OnPlayerClickMap
  3715. #undef OnPlayerClickMap
  3716. #else
  3717. #define _ALS_OnPlayerClickMap
  3718. #endif
  3719. #define OnPlayerClickMap S@@_OnPlayerClickMap
  3720. ALS_FORWARD<PlayerClickMap>
  3721. public OnPlayerClickTextDraw(playerid, Text:clickedid)
  3722. {
  3723. P:2("Hooks_OnPlayerClickTextDraw called: %d, %d", playerid, _:clickedid);
  3724. new
  3725. end = YSI_g_sCallbackData[ALS_OnPlayerClickTextDraw][E_FUNC_HOOK_DATA_END],
  3726. start = YSI_g_sCallbackData[ALS_OnPlayerClickTextDraw][E_FUNC_HOOK_DATA_START],
  3727. ret = ALS_R_PlayerClickTextDraw;
  3728. if (start == end)
  3729. {
  3730. P:2("Hooks_OnPlayerClickTextDraw end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerClickTextDraw));
  3731. HOOK_CALL<PlayerClickTextDraw>
  3732. }
  3733. new
  3734. idx,
  3735. pointer,
  3736. re = end;
  3737. if (end > sizeof (YSI_g_sCallbackAddresses))
  3738. {
  3739. re = sizeof (YSI_g_sCallbackAddresses);
  3740. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  3741. }
  3742. // Do the initial fast elements.
  3743. while (start != re)
  3744. {
  3745. pointer = YSI_g_sCallbackAddresses[start++];
  3746. #emit PUSH.S clickedid
  3747. #emit PUSH.S playerid
  3748. #emit PUSH.C 8
  3749. #emit LCTRL 6
  3750. #emit ADD.C 28
  3751. #emit PUSH.pri
  3752. #emit LOAD.S.pri pointer
  3753. #emit SCTRL 6
  3754. #emit CONST.alt 0xFFFFFFFF
  3755. #emit STOR.S.pri ret
  3756. #emit JEQ hooks_do_hooks_call_no_als
  3757. }
  3758. // Get any remaining pointers the old way.
  3759. while (start++ != end)
  3760. {
  3761. idx = AMX_GetPublicPointer(idx, pointer, "@yH_PlayerClickTextDraw");
  3762. #emit PUSH.S clickedid
  3763. #emit PUSH.S playerid
  3764. #emit PUSH.C 8
  3765. #emit LCTRL 6
  3766. #emit ADD.C 28
  3767. #emit PUSH.pri
  3768. #emit LOAD.S.pri pointer
  3769. #emit SCTRL 6
  3770. #emit CONST.alt 0xFFFFFFFF
  3771. #emit STOR.S.pri ret
  3772. #emit JEQ hooks_do_hooks_call_no_als
  3773. }
  3774. // Do ALS just in case (YSI no longer uses this though now).
  3775. P:2("Hooks_OnPlayerClickTextDraw end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerClickTextDraw));
  3776. HOOK_RETURN<PlayerClickTextDraw>
  3777. }
  3778. #if defined _ALS_OnPlayerClickTextDraw
  3779. #undef OnPlayerClickTextDraw
  3780. #else
  3781. #define _ALS_OnPlayerClickTextDraw
  3782. #endif
  3783. #define OnPlayerClickTextDraw S@@_OnPlayerClickTextDraw
  3784. ALS_FORWARD<PlayerClickTextDraw>
  3785. public OnPlayerClickPlayerTextDraw(playerid, PlayerText:playertextid)
  3786. {
  3787. P:2("Hooks_OnPlayerClickPlayerTextDraw called: %d, %d", playerid, _:playertextid);
  3788. new
  3789. end = YSI_g_sCallbackData[ALS_OnPlayerClickPlayerTextDraw][E_FUNC_HOOK_DATA_END],
  3790. start = YSI_g_sCallbackData[ALS_OnPlayerClickPlayerTextDraw][E_FUNC_HOOK_DATA_START],
  3791. ret = ALS_R_PlayerClickPlayerTextDraw;
  3792. if (start == end)
  3793. {
  3794. P:2("Hooks_OnPlayerClickPlayerTextDraw end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerClickPlayerTextDraw));
  3795. HOOK_CALL<PlayerClickPlayerTextDraw>
  3796. }
  3797. new
  3798. idx,
  3799. pointer,
  3800. re = end;
  3801. if (end > sizeof (YSI_g_sCallbackAddresses))
  3802. {
  3803. re = sizeof (YSI_g_sCallbackAddresses);
  3804. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  3805. }
  3806. // Do the initial fast elements.
  3807. while (start != re)
  3808. {
  3809. pointer = YSI_g_sCallbackAddresses[start++];
  3810. #emit PUSH.S playertextid
  3811. #emit PUSH.S playerid
  3812. #emit PUSH.C 8
  3813. #emit LCTRL 6
  3814. #emit ADD.C 28
  3815. #emit PUSH.pri
  3816. #emit LOAD.S.pri pointer
  3817. #emit SCTRL 6
  3818. #emit CONST.alt 0xFFFFFFFF
  3819. #emit STOR.S.pri ret
  3820. #emit JEQ hooks_do_hooks_call_no_als
  3821. }
  3822. // Get any remaining pointers the old way.
  3823. while (start++ != end)
  3824. {
  3825. idx = AMX_GetPublicPointer(idx, pointer, "@yH_PlayerClickPlayerTextDraw");
  3826. #emit PUSH.S playertextid
  3827. #emit PUSH.S playerid
  3828. #emit PUSH.C 8
  3829. #emit LCTRL 6
  3830. #emit ADD.C 28
  3831. #emit PUSH.pri
  3832. #emit LOAD.S.pri pointer
  3833. #emit SCTRL 6
  3834. #emit CONST.alt 0xFFFFFFFF
  3835. #emit STOR.S.pri ret
  3836. #emit JEQ hooks_do_hooks_call_no_als
  3837. }
  3838. // Do ALS just in case (YSI no longer uses this though now).
  3839. P:2("Hooks_OnPlayerClickPlayerTextDraw end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerClickPlayerTextDraw));
  3840. HOOK_RETURN<PlayerClickPlayerTextDraw>
  3841. }
  3842. #if defined _ALS_OnPlayerClickPlayerID
  3843. #else
  3844. #define _ALS_OnPlayerClickPlayerTD
  3845. #endif
  3846. #define OnPlayerClickPlayerTextDraw S@@_OnPlayerClickPlayerTextDraw
  3847. ALS_FORWARD<PlayerClickPlayerTextDraw>
  3848. public OnPlayerEditObject(playerid, playerobject, objectid, response, Float:fX, Float:fY, Float:fZ, Float:fRotX, Float:fRotY, Float:fRotZ)
  3849. {
  3850. P:2("Hooks_OnPlayerEditObject called: %d, %d, %d, %d, %f, %f, %f, %f, %f, %f", playerid, playerobject, objectid, response, fX, fY, fZ, fRotX, fRotY, fRotZ);
  3851. new
  3852. end = YSI_g_sCallbackData[ALS_OnPlayerEditObject][E_FUNC_HOOK_DATA_END],
  3853. start = YSI_g_sCallbackData[ALS_OnPlayerEditObject][E_FUNC_HOOK_DATA_START],
  3854. ret = ALS_R_PlayerEditObject;
  3855. if (start == end)
  3856. {
  3857. P:2("Hooks_OnPlayerEditObject end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerEditObject));
  3858. HOOK_CALL<PlayerEditObject>
  3859. }
  3860. new
  3861. idx,
  3862. pointer,
  3863. re = end;
  3864. if (end > sizeof (YSI_g_sCallbackAddresses))
  3865. {
  3866. re = sizeof (YSI_g_sCallbackAddresses);
  3867. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  3868. }
  3869. // Do the initial fast elements.
  3870. while (start != re)
  3871. {
  3872. pointer = YSI_g_sCallbackAddresses[start++];
  3873. #emit PUSH.S fRotZ
  3874. #emit PUSH.S fRotY
  3875. #emit PUSH.S fRotX
  3876. #emit PUSH.S fZ
  3877. #emit PUSH.S fY
  3878. #emit PUSH.S fX
  3879. #emit PUSH.S response
  3880. #emit PUSH.S objectid
  3881. #emit PUSH.S playerobject
  3882. #emit PUSH.S playerid
  3883. #emit PUSH.C 40
  3884. #emit LCTRL 6
  3885. #emit ADD.C 28
  3886. #emit PUSH.pri
  3887. #emit LOAD.S.pri pointer
  3888. #emit SCTRL 6
  3889. #emit CONST.alt 0xFFFFFFFF
  3890. #emit STOR.S.pri ret
  3891. #emit JEQ hooks_do_hooks_call_no_als
  3892. }
  3893. // Get any remaining pointers the old way.
  3894. while (start++ != end)
  3895. {
  3896. idx = AMX_GetPublicPointer(idx, pointer, "@yH_PlayerEditObject");
  3897. #emit PUSH.S fRotZ
  3898. #emit PUSH.S fRotY
  3899. #emit PUSH.S fRotX
  3900. #emit PUSH.S fZ
  3901. #emit PUSH.S fY
  3902. #emit PUSH.S fX
  3903. #emit PUSH.S response
  3904. #emit PUSH.S objectid
  3905. #emit PUSH.S playerobject
  3906. #emit PUSH.S playerid
  3907. #emit PUSH.C 40
  3908. #emit LCTRL 6
  3909. #emit ADD.C 28
  3910. #emit PUSH.pri
  3911. #emit LOAD.S.pri pointer
  3912. #emit SCTRL 6
  3913. #emit CONST.alt 0xFFFFFFFF
  3914. #emit STOR.S.pri ret
  3915. #emit JEQ hooks_do_hooks_call_no_als
  3916. }
  3917. // Do ALS just in case (YSI no longer uses this though now).
  3918. P:2("Hooks_OnPlayerEditObject end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerEditObject));
  3919. HOOK_RETURN<PlayerEditObject>
  3920. }
  3921. #if defined _ALS_OnPlayerEditObject
  3922. #undef OnPlayerEditObject
  3923. #else
  3924. #define _ALS_OnPlayerEditObject
  3925. #endif
  3926. #define OnPlayerEditObject S@@_OnPlayerEditObject
  3927. ALS_FORWARD<PlayerEditObject>
  3928. public OnPlayerEditAttachedObject(playerid, response, index, modelid, boneid, Float:fOffsetX, Float:fOffsetY, Float:fOffsetZ, Float:fRotX, Float:fRotY, Float:fRotZ, Float:fScaleX, Float:fScaleY, Float:fScaleZ)
  3929. {
  3930. P:2("Hooks_OnPlayerEditAttachedObject called: %d, %d, %d, %d, %d, %f, %f, %f, %f, %f, %f, %f, %f, %f", playerid, response, index, modelid, boneid, fOffsetX, fOffsetY, fOffsetZ, fRotX, fRotY, fRotZ, fScaleX, fScaleY, fScaleZ);
  3931. new
  3932. end = YSI_g_sCallbackData[ALS_OnPlayerEditAttachedObject][E_FUNC_HOOK_DATA_END],
  3933. start = YSI_g_sCallbackData[ALS_OnPlayerEditAttachedObject][E_FUNC_HOOK_DATA_START],
  3934. ret = ALS_R_PlayerEditAttachedObject;
  3935. if (start == end)
  3936. {
  3937. P:2("Hooks_OnPlayerEditAttachedObject end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerEditAttachedObject));
  3938. HOOK_CALL<PlayerEditAttachedObject>
  3939. }
  3940. new
  3941. idx,
  3942. pointer,
  3943. re = end;
  3944. if (end > sizeof (YSI_g_sCallbackAddresses))
  3945. {
  3946. re = sizeof (YSI_g_sCallbackAddresses);
  3947. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  3948. }
  3949. // Do the initial fast elements.
  3950. while (start != re)
  3951. {
  3952. pointer = YSI_g_sCallbackAddresses[start++];
  3953. #emit PUSH.S fScaleZ
  3954. #emit PUSH.S fScaleY
  3955. #emit PUSH.S fScaleX
  3956. #emit PUSH.S fRotZ
  3957. #emit PUSH.S fRotY
  3958. #emit PUSH.S fRotX
  3959. #emit PUSH.S fOffsetZ
  3960. #emit PUSH.S fOffsetY
  3961. #emit PUSH.S fOffsetX
  3962. #emit PUSH.S boneid
  3963. #emit PUSH.S modelid
  3964. #emit PUSH.S index
  3965. #emit PUSH.S response
  3966. #emit PUSH.S playerid
  3967. #emit PUSH.C 56
  3968. #emit LCTRL 6
  3969. #emit ADD.C 28
  3970. #emit PUSH.pri
  3971. #emit LOAD.S.pri pointer
  3972. #emit SCTRL 6
  3973. #emit CONST.alt 0xFFFFFFFF
  3974. #emit STOR.S.pri ret
  3975. #emit JEQ hooks_do_hooks_call_no_als
  3976. }
  3977. // Get any remaining pointers the old way.
  3978. while (start++ != end)
  3979. {
  3980. idx = AMX_GetPublicPointer(idx, pointer, "@yH_PlayerEditAttachedObject");
  3981. #emit PUSH.S fScaleZ
  3982. #emit PUSH.S fScaleY
  3983. #emit PUSH.S fScaleX
  3984. #emit PUSH.S fRotZ
  3985. #emit PUSH.S fRotY
  3986. #emit PUSH.S fRotX
  3987. #emit PUSH.S fOffsetZ
  3988. #emit PUSH.S fOffsetY
  3989. #emit PUSH.S fOffsetX
  3990. #emit PUSH.S boneid
  3991. #emit PUSH.S modelid
  3992. #emit PUSH.S index
  3993. #emit PUSH.S response
  3994. #emit PUSH.S playerid
  3995. #emit PUSH.C 56
  3996. #emit LCTRL 6
  3997. #emit ADD.C 28
  3998. #emit PUSH.pri
  3999. #emit LOAD.S.pri pointer
  4000. #emit SCTRL 6
  4001. #emit CONST.alt 0xFFFFFFFF
  4002. #emit STOR.S.pri ret
  4003. #emit JEQ hooks_do_hooks_call_no_als
  4004. }
  4005. // Do ALS just in case (YSI no longer uses this though now).
  4006. P:2("Hooks_OnPlayerEditAttachedObject end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerEditAttachedObject));
  4007. HOOK_RETURN<PlayerEditAttachedObject>
  4008. }
  4009. #if defined _ALS_OnPlayerEditAttachedObject
  4010. #undef OnPlayerEditAttachedObject
  4011. #else
  4012. #define _ALS_OnPlayerEditAttachedObject
  4013. #endif
  4014. #define OnPlayerEditAttachedObject S@@_OnPlayerEditAttachedObject
  4015. ALS_FORWARD<PlayerEditAttachedObject>
  4016. public OnPlayerSelectObject(playerid, type, objectid, modelid, Float:fX, Float:fY, Float:fZ)
  4017. {
  4018. P:2("Hooks_OnPlayerSelectObject called: %d, %d, %d, %d, %f, %f, %f", playerid, type, objectid, modelid, fX, fY, fZ);
  4019. new
  4020. end = YSI_g_sCallbackData[ALS_OnPlayerSelectObject][E_FUNC_HOOK_DATA_END],
  4021. start = YSI_g_sCallbackData[ALS_OnPlayerSelectObject][E_FUNC_HOOK_DATA_START],
  4022. ret = ALS_R_PlayerSelectObject;
  4023. if (start == end)
  4024. {
  4025. P:2("Hooks_OnPlayerSelectObject end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerSelectObject));
  4026. HOOK_CALL<PlayerSelectObject>
  4027. }
  4028. new
  4029. idx,
  4030. pointer,
  4031. re = end;
  4032. if (end > sizeof (YSI_g_sCallbackAddresses))
  4033. {
  4034. re = sizeof (YSI_g_sCallbackAddresses);
  4035. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  4036. }
  4037. // Do the initial fast elements.
  4038. while (start != re)
  4039. {
  4040. pointer = YSI_g_sCallbackAddresses[start++];
  4041. #emit PUSH.S fZ
  4042. #emit PUSH.S fY
  4043. #emit PUSH.S fX
  4044. #emit PUSH.S modelid
  4045. #emit PUSH.S objectid
  4046. #emit PUSH.S type
  4047. #emit PUSH.S playerid
  4048. #emit PUSH.C 28
  4049. #emit LCTRL 6
  4050. #emit ADD.C 28
  4051. #emit PUSH.pri
  4052. #emit LOAD.S.pri pointer
  4053. #emit SCTRL 6
  4054. #emit CONST.alt 0xFFFFFFFF
  4055. #emit STOR.S.pri ret
  4056. #emit JEQ hooks_do_hooks_call_no_als
  4057. }
  4058. // Get any remaining pointers the old way.
  4059. while (start++ != end)
  4060. {
  4061. idx = AMX_GetPublicPointer(idx, pointer, "@yH_PlayerSelectObject");
  4062. #emit PUSH.S fZ
  4063. #emit PUSH.S fY
  4064. #emit PUSH.S fX
  4065. #emit PUSH.S modelid
  4066. #emit PUSH.S objectid
  4067. #emit PUSH.S type
  4068. #emit PUSH.S playerid
  4069. #emit PUSH.C 28
  4070. #emit LCTRL 6
  4071. #emit ADD.C 28
  4072. #emit PUSH.pri
  4073. #emit LOAD.S.pri pointer
  4074. #emit SCTRL 6
  4075. #emit CONST.alt 0xFFFFFFFF
  4076. #emit STOR.S.pri ret
  4077. #emit JEQ hooks_do_hooks_call_no_als
  4078. }
  4079. // Do ALS just in case (YSI no longer uses this though now).
  4080. P:2("Hooks_OnPlayerSelectObject end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerSelectObject));
  4081. HOOK_RETURN<PlayerSelectObject>
  4082. }
  4083. #if defined _ALS_OnPlayerSelectObject
  4084. #undef OnPlayerSelectObject
  4085. #else
  4086. #define _ALS_OnPlayerSelectObject
  4087. #endif
  4088. #define OnPlayerSelectObject S@@_OnPlayerSelectObject
  4089. ALS_FORWARD<PlayerSelectObject>
  4090. // Allow hooking of streamer plugin callbacks.
  4091. #if !defined _YSI_PLUGINS_STREAMER
  4092. #undef ALS_PREFIX
  4093. #endinput
  4094. #endif
  4095. public OnDynamicObjectMoved(objectid)
  4096. {
  4097. P:2("Hooks_OnDynamicObjectMoved called: %d", objectid);
  4098. new
  4099. end = YSI_g_sCallbackData[ALS_OnDynamicObjectMoved][E_FUNC_HOOK_DATA_END],
  4100. start = YSI_g_sCallbackData[ALS_OnDynamicObjectMoved][E_FUNC_HOOK_DATA_START],
  4101. ret = ALS_R_DynamicObjectMoved;
  4102. if (start == end)
  4103. {
  4104. P:2("Hooks_OnDynamicObjectMoved end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnDynamicObjectMoved));
  4105. HOOK_CALL<DynamicObjectMoved>
  4106. }
  4107. new
  4108. idx,
  4109. pointer,
  4110. re = end;
  4111. if (end > sizeof (YSI_g_sCallbackAddresses))
  4112. {
  4113. re = sizeof (YSI_g_sCallbackAddresses);
  4114. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  4115. }
  4116. // Do the initial fast elements.
  4117. while (start != re)
  4118. {
  4119. pointer = YSI_g_sCallbackAddresses[start++];
  4120. #emit PUSH.S objectid
  4121. #emit PUSH.C 4
  4122. #emit LCTRL 6
  4123. #emit ADD.C 28
  4124. #emit PUSH.pri
  4125. #emit LOAD.S.pri pointer
  4126. #emit SCTRL 6
  4127. #emit CONST.alt 0xFFFFFFFF
  4128. #emit STOR.S.pri ret
  4129. #emit JEQ hooks_do_hooks_call_no_als
  4130. }
  4131. // Get any remaining pointers the old way.
  4132. while (start++ != end)
  4133. {
  4134. idx = AMX_GetPublicPointer(idx, pointer, "@yH_DynamicObjectMoved");
  4135. #emit PUSH.S objectid
  4136. #emit PUSH.C 4
  4137. #emit LCTRL 6
  4138. #emit ADD.C 28
  4139. #emit PUSH.pri
  4140. #emit LOAD.S.pri pointer
  4141. #emit SCTRL 6
  4142. #emit CONST.alt 0xFFFFFFFF
  4143. #emit STOR.S.pri ret
  4144. #emit JEQ hooks_do_hooks_call_no_als
  4145. }
  4146. // Do ALS just in case (YSI no longer uses this though now).
  4147. P:2("Hooks_OnDynamicObjectMoved end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnDynamicObjectMoved));
  4148. HOOK_RETURN<DynamicObjectMoved>
  4149. }
  4150. #if defined _ALS_OnDynamicObjectMoved
  4151. #undef OnDynamicObjectMoved
  4152. #else
  4153. #define _ALS_OnDynamicObjectMoved
  4154. #endif
  4155. #define OnDynamicObjectMoved S@@_OnDynamicObjectMoved
  4156. ALS_FORWARD<DynamicObjectMoved>
  4157. public OnPlayerEditDynamicObject(playerid, objectid, response, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz)
  4158. {
  4159. P:2("Hooks_OnPlayerEditDynamicObject called: %d, %d, %d, %f, %f, %f, %f, %f, %f", playerid, objectid, response, x, y, z, rx, ry, rz);
  4160. new
  4161. end = YSI_g_sCallbackData[ALS_OnPlayerEditDynamicObject][E_FUNC_HOOK_DATA_END],
  4162. start = YSI_g_sCallbackData[ALS_OnPlayerEditDynamicObject][E_FUNC_HOOK_DATA_START],
  4163. ret = ALS_R_PlayerEditDynamicObject;
  4164. if (start == end)
  4165. {
  4166. P:2("Hooks_OnPlayerEditDynamicObject end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerEditDynamicObject));
  4167. HOOK_CALL<PlayerEditDynamicObject>
  4168. }
  4169. new
  4170. idx,
  4171. pointer,
  4172. re = end;
  4173. if (end > sizeof (YSI_g_sCallbackAddresses))
  4174. {
  4175. re = sizeof (YSI_g_sCallbackAddresses);
  4176. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  4177. }
  4178. // Do the initial fast elements.
  4179. while (start != re)
  4180. {
  4181. pointer = YSI_g_sCallbackAddresses[start++];
  4182. #emit PUSH.S rz
  4183. #emit PUSH.S ry
  4184. #emit PUSH.S rx
  4185. #emit PUSH.S z
  4186. #emit PUSH.S y
  4187. #emit PUSH.S x
  4188. #emit PUSH.S response
  4189. #emit PUSH.S objectid
  4190. #emit PUSH.S playerid
  4191. #emit PUSH.C 36
  4192. #emit LCTRL 6
  4193. #emit ADD.C 28
  4194. #emit PUSH.pri
  4195. #emit LOAD.S.pri pointer
  4196. #emit SCTRL 6
  4197. #emit CONST.alt 0xFFFFFFFF
  4198. #emit STOR.S.pri ret
  4199. #emit JEQ hooks_do_hooks_call_no_als
  4200. }
  4201. // Get any remaining pointers the old way.
  4202. while (start++ != end)
  4203. {
  4204. idx = AMX_GetPublicPointer(idx, pointer, "@yH_PlayerEditDynamicObject");
  4205. #emit PUSH.S rz
  4206. #emit PUSH.S ry
  4207. #emit PUSH.S rx
  4208. #emit PUSH.S z
  4209. #emit PUSH.S y
  4210. #emit PUSH.S x
  4211. #emit PUSH.S response
  4212. #emit PUSH.S objectid
  4213. #emit PUSH.S playerid
  4214. #emit PUSH.C 36
  4215. #emit LCTRL 6
  4216. #emit ADD.C 28
  4217. #emit PUSH.pri
  4218. #emit LOAD.S.pri pointer
  4219. #emit SCTRL 6
  4220. #emit CONST.alt 0xFFFFFFFF
  4221. #emit STOR.S.pri ret
  4222. #emit JEQ hooks_do_hooks_call_no_als
  4223. }
  4224. // Do ALS just in case (YSI no longer uses this though now).
  4225. P:2("Hooks_OnPlayerEditDynamicObject end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerEditDynamicObject));
  4226. HOOK_RETURN<PlayerEditDynamicObject>
  4227. }
  4228. #if defined _ALS_OnPlayerEditDynamicObject
  4229. #undef OnPlayerEditDynamicObject
  4230. #else
  4231. #define _ALS_OnPlayerEditDynamicObject
  4232. #endif
  4233. #define OnPlayerEditDynamicObject S@@_OnPlayerEditDynamicObject
  4234. ALS_FORWARD<PlayerEditDynamicObject>
  4235. public OnPlayerSelectDynamicObject(playerid, objectid, modelid, Float:x, Float:y, Float:z)
  4236. {
  4237. P:2("Hooks_OnPlayerSelectDynamicObject called: %d, %d, %d, %f, %f, %f", playerid, objectid, modelid, x, y, z);
  4238. new
  4239. end = YSI_g_sCallbackData[ALS_OnPlayerSelectDynamicObject][E_FUNC_HOOK_DATA_END],
  4240. start = YSI_g_sCallbackData[ALS_OnPlayerSelectDynamicObject][E_FUNC_HOOK_DATA_START],
  4241. ret = ALS_R_PlayerSelectDynamicObject;
  4242. if (start == end)
  4243. {
  4244. P:2("Hooks_OnPlayerSelectDynamicObject end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerSelectDynamicObject));
  4245. HOOK_CALL<PlayerSelectDynamicObject>
  4246. }
  4247. new
  4248. idx,
  4249. pointer,
  4250. re = end;
  4251. if (end > sizeof (YSI_g_sCallbackAddresses))
  4252. {
  4253. re = sizeof (YSI_g_sCallbackAddresses);
  4254. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  4255. }
  4256. // Do the initial fast elements.
  4257. while (start != re)
  4258. {
  4259. pointer = YSI_g_sCallbackAddresses[start++];
  4260. #emit PUSH.S z
  4261. #emit PUSH.S y
  4262. #emit PUSH.S x
  4263. #emit PUSH.S modelid
  4264. #emit PUSH.S objectid
  4265. #emit PUSH.S playerid
  4266. #emit PUSH.C 24
  4267. #emit LCTRL 6
  4268. #emit ADD.C 28
  4269. #emit PUSH.pri
  4270. #emit LOAD.S.pri pointer
  4271. #emit SCTRL 6
  4272. #emit CONST.alt 0xFFFFFFFF
  4273. #emit STOR.S.pri ret
  4274. #emit JEQ hooks_do_hooks_call_no_als
  4275. }
  4276. // Get any remaining pointers the old way.
  4277. while (start++ != end)
  4278. {
  4279. idx = AMX_GetPublicPointer(idx, pointer, "@yH_PlayerSelectDynamicObject");
  4280. #emit PUSH.S z
  4281. #emit PUSH.S y
  4282. #emit PUSH.S x
  4283. #emit PUSH.S modelid
  4284. #emit PUSH.S objectid
  4285. #emit PUSH.S playerid
  4286. #emit PUSH.C 24
  4287. #emit LCTRL 6
  4288. #emit ADD.C 28
  4289. #emit PUSH.pri
  4290. #emit LOAD.S.pri pointer
  4291. #emit SCTRL 6
  4292. #emit CONST.alt 0xFFFFFFFF
  4293. #emit STOR.S.pri ret
  4294. #emit JEQ hooks_do_hooks_call_no_als
  4295. }
  4296. // Do ALS just in case (YSI no longer uses this though now).
  4297. P:2("Hooks_OnPlayerSelectDynamicObject end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerSelectDynamicObject));
  4298. HOOK_RETURN<PlayerSelectDynamicObject>
  4299. }
  4300. #if defined _ALS_OnPlayerSelectDynamicObj
  4301. #undef OnPlayerSelectDynamicObject
  4302. #else
  4303. #define _ALS_OnPlayerSelectDynamicObj
  4304. #endif
  4305. #define OnPlayerSelectDynamicObject S@@_OnPlayerSelectDynamicObject
  4306. ALS_FORWARD<PlayerSelectDynamicObject>
  4307. public OnPlayerPickUpDynamicPickup(playerid, pickupid)
  4308. {
  4309. P:2("Hooks_OnPlayerPickUpDynamicPickup called: %d, %d", playerid, pickupid);
  4310. new
  4311. end = YSI_g_sCallbackData[ALS_OnPlayerPickUpDynamicPickup][E_FUNC_HOOK_DATA_END],
  4312. start = YSI_g_sCallbackData[ALS_OnPlayerPickUpDynamicPickup][E_FUNC_HOOK_DATA_START],
  4313. ret = ALS_R_PlayerPickUpDynamicPickup;
  4314. if (start == end)
  4315. {
  4316. P:2("Hooks_OnPlayerPickUpDynamicPickup end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerPickUpDynamicPickup));
  4317. HOOK_CALL<PlayerPickUpDynamicPickup>
  4318. }
  4319. new
  4320. idx,
  4321. pointer,
  4322. re = end;
  4323. if (end > sizeof (YSI_g_sCallbackAddresses))
  4324. {
  4325. re = sizeof (YSI_g_sCallbackAddresses);
  4326. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  4327. }
  4328. // Do the initial fast elements.
  4329. while (start != re)
  4330. {
  4331. pointer = YSI_g_sCallbackAddresses[start++];
  4332. #emit PUSH.S pickupid
  4333. #emit PUSH.S playerid
  4334. #emit PUSH.C 8
  4335. #emit LCTRL 6
  4336. #emit ADD.C 28
  4337. #emit PUSH.pri
  4338. #emit LOAD.S.pri pointer
  4339. #emit SCTRL 6
  4340. #emit CONST.alt 0xFFFFFFFF
  4341. #emit STOR.S.pri ret
  4342. #emit JEQ hooks_do_hooks_call_no_als
  4343. }
  4344. // Get any remaining pointers the old way.
  4345. while (start++ != end)
  4346. {
  4347. idx = AMX_GetPublicPointer(idx, pointer, "@yH_PlayerPickUpDynamicPickup");
  4348. #emit PUSH.S pickupid
  4349. #emit PUSH.S playerid
  4350. #emit PUSH.C 8
  4351. #emit LCTRL 6
  4352. #emit ADD.C 28
  4353. #emit PUSH.pri
  4354. #emit LOAD.S.pri pointer
  4355. #emit SCTRL 6
  4356. #emit CONST.alt 0xFFFFFFFF
  4357. #emit STOR.S.pri ret
  4358. #emit JEQ hooks_do_hooks_call_no_als
  4359. }
  4360. // Do ALS just in case (YSI no longer uses this though now).
  4361. P:2("Hooks_OnPlayerPickUpDynamicPickup end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerPickUpDynamicPickup));
  4362. HOOK_RETURN<PlayerPickUpDynamicPickup>
  4363. }
  4364. #if defined _ALS_OnPlayerPickUpDynamicPUp
  4365. #undef OnPlayerPickUpDynamicPickup
  4366. #else
  4367. #define _ALS_OnPlayerPickUpDynamicPUp
  4368. #endif
  4369. #define OnPlayerPickUpDynamicPickup S@@_OnPlayerPickUpDynamicPickup
  4370. ALS_FORWARD<PlayerPickUpDynamicPickup>
  4371. public OnPlayerEnterDynamicCP(playerid, checkpointid)
  4372. {
  4373. P:2("Hooks_OnPlayerEnterDynamicCP called: %d, %d", playerid, checkpointid);
  4374. new
  4375. end = YSI_g_sCallbackData[ALS_OnPlayerEnterDynamicCP][E_FUNC_HOOK_DATA_END],
  4376. start = YSI_g_sCallbackData[ALS_OnPlayerEnterDynamicCP][E_FUNC_HOOK_DATA_START],
  4377. ret = ALS_R_PlayerEnterDynamicCP;
  4378. if (start == end)
  4379. {
  4380. P:2("Hooks_OnPlayerEnterDynamicCP end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerEnterDynamicCP));
  4381. HOOK_CALL<PlayerEnterDynamicCP>
  4382. }
  4383. new
  4384. idx,
  4385. pointer,
  4386. re = end;
  4387. if (end > sizeof (YSI_g_sCallbackAddresses))
  4388. {
  4389. re = sizeof (YSI_g_sCallbackAddresses);
  4390. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  4391. }
  4392. // Do the initial fast elements.
  4393. while (start != re)
  4394. {
  4395. pointer = YSI_g_sCallbackAddresses[start++];
  4396. #emit PUSH.S checkpointid
  4397. #emit PUSH.S playerid
  4398. #emit PUSH.C 8
  4399. #emit LCTRL 6
  4400. #emit ADD.C 28
  4401. #emit PUSH.pri
  4402. #emit LOAD.S.pri pointer
  4403. #emit SCTRL 6
  4404. #emit CONST.alt 0xFFFFFFFF
  4405. #emit STOR.S.pri ret
  4406. #emit JEQ hooks_do_hooks_call_no_als
  4407. }
  4408. // Get any remaining pointers the old way.
  4409. while (start++ != end)
  4410. {
  4411. idx = AMX_GetPublicPointer(idx, pointer, "@yH_PlayerEnterDynamicCP");
  4412. #emit PUSH.S checkpointid
  4413. #emit PUSH.S playerid
  4414. #emit PUSH.C 8
  4415. #emit LCTRL 6
  4416. #emit ADD.C 28
  4417. #emit PUSH.pri
  4418. #emit LOAD.S.pri pointer
  4419. #emit SCTRL 6
  4420. #emit CONST.alt 0xFFFFFFFF
  4421. #emit STOR.S.pri ret
  4422. #emit JEQ hooks_do_hooks_call_no_als
  4423. }
  4424. // Do ALS just in case (YSI no longer uses this though now).
  4425. P:2("Hooks_OnPlayerEnterDynamicCP end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerEnterDynamicCP));
  4426. HOOK_RETURN<PlayerEnterDynamicCP>
  4427. }
  4428. #if defined _ALS_OnPlayerEnterDynamicCP
  4429. #undef OnPlayerEnterDynamicCP
  4430. #else
  4431. #define _ALS_OnPlayerEnterDynamicCP
  4432. #endif
  4433. #define OnPlayerEnterDynamicCP S@@_OnPlayerEnterDynamicCP
  4434. ALS_FORWARD<PlayerEnterDynamicCP>
  4435. public OnPlayerLeaveDynamicCP(playerid, checkpointid)
  4436. {
  4437. P:2("Hooks_OnPlayerLeaveDynamicCP called: %d, %d", playerid, checkpointid);
  4438. new
  4439. end = YSI_g_sCallbackData[ALS_OnPlayerLeaveDynamicCP][E_FUNC_HOOK_DATA_END],
  4440. start = YSI_g_sCallbackData[ALS_OnPlayerLeaveDynamicCP][E_FUNC_HOOK_DATA_START],
  4441. ret = ALS_R_PlayerLeaveDynamicCP;
  4442. if (start == end)
  4443. {
  4444. P:2("Hooks_OnPlayerLeaveDynamicCP end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerLeaveDynamicCP));
  4445. HOOK_CALL<PlayerLeaveDynamicCP>
  4446. }
  4447. new
  4448. idx,
  4449. pointer,
  4450. re = end;
  4451. if (end > sizeof (YSI_g_sCallbackAddresses))
  4452. {
  4453. re = sizeof (YSI_g_sCallbackAddresses);
  4454. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  4455. }
  4456. // Do the initial fast elements.
  4457. while (start != re)
  4458. {
  4459. pointer = YSI_g_sCallbackAddresses[start++];
  4460. #emit PUSH.S checkpointid
  4461. #emit PUSH.S playerid
  4462. #emit PUSH.C 8
  4463. #emit LCTRL 6
  4464. #emit ADD.C 28
  4465. #emit PUSH.pri
  4466. #emit LOAD.S.pri pointer
  4467. #emit SCTRL 6
  4468. #emit CONST.alt 0xFFFFFFFF
  4469. #emit STOR.S.pri ret
  4470. #emit JEQ hooks_do_hooks_call_no_als
  4471. }
  4472. // Get any remaining pointers the old way.
  4473. while (start++ != end)
  4474. {
  4475. idx = AMX_GetPublicPointer(idx, pointer, "@yH_PlayerLeaveDynamicCP");
  4476. #emit PUSH.S checkpointid
  4477. #emit PUSH.S playerid
  4478. #emit PUSH.C 8
  4479. #emit LCTRL 6
  4480. #emit ADD.C 28
  4481. #emit PUSH.pri
  4482. #emit LOAD.S.pri pointer
  4483. #emit SCTRL 6
  4484. #emit CONST.alt 0xFFFFFFFF
  4485. #emit STOR.S.pri ret
  4486. #emit JEQ hooks_do_hooks_call_no_als
  4487. }
  4488. // Do ALS just in case (YSI no longer uses this though now).
  4489. P:2("Hooks_OnPlayerLeaveDynamicCP end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerLeaveDynamicCP));
  4490. HOOK_RETURN<PlayerLeaveDynamicCP>
  4491. }
  4492. #if defined _ALS_OnPlayerLeaveDynamicCP
  4493. #undef OnPlayerLeaveDynamicCP
  4494. #else
  4495. #define _ALS_OnPlayerLeaveDynamicCP
  4496. #endif
  4497. #define OnPlayerLeaveDynamicCP S@@_OnPlayerLeaveDynamicCP
  4498. ALS_FORWARD<PlayerLeaveDynamicCP>
  4499. public OnPlayerEnterDynamicRaceCP(playerid, checkpointid)
  4500. {
  4501. P:2("Hooks_OnPlayerEnterDynamicRaceCP called: %d, %d", playerid, checkpointid);
  4502. new
  4503. end = YSI_g_sCallbackData[ALS_OnPlayerEnterDynamicRaceCP][E_FUNC_HOOK_DATA_END],
  4504. start = YSI_g_sCallbackData[ALS_OnPlayerEnterDynamicRaceCP][E_FUNC_HOOK_DATA_START],
  4505. ret = ALS_R_PlayerEnterDynamicRaceCP;
  4506. if (start == end)
  4507. {
  4508. P:2("Hooks_OnPlayerEnterDynamicRaceCP end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerEnterDynamicRaceCP));
  4509. HOOK_CALL<PlayerEnterDynamicRaceCP>
  4510. }
  4511. new
  4512. idx,
  4513. pointer,
  4514. re = end;
  4515. if (end > sizeof (YSI_g_sCallbackAddresses))
  4516. {
  4517. re = sizeof (YSI_g_sCallbackAddresses);
  4518. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  4519. }
  4520. // Do the initial fast elements.
  4521. while (start != re)
  4522. {
  4523. pointer = YSI_g_sCallbackAddresses[start++];
  4524. #emit PUSH.S checkpointid
  4525. #emit PUSH.S playerid
  4526. #emit PUSH.C 8
  4527. #emit LCTRL 6
  4528. #emit ADD.C 28
  4529. #emit PUSH.pri
  4530. #emit LOAD.S.pri pointer
  4531. #emit SCTRL 6
  4532. #emit CONST.alt 0xFFFFFFFF
  4533. #emit STOR.S.pri ret
  4534. #emit JEQ hooks_do_hooks_call_no_als
  4535. }
  4536. // Get any remaining pointers the old way.
  4537. while (start++ != end)
  4538. {
  4539. idx = AMX_GetPublicPointer(idx, pointer, "@yH_PlayerEnterDynamicRaceCP");
  4540. #emit PUSH.S checkpointid
  4541. #emit PUSH.S playerid
  4542. #emit PUSH.C 8
  4543. #emit LCTRL 6
  4544. #emit ADD.C 28
  4545. #emit PUSH.pri
  4546. #emit LOAD.S.pri pointer
  4547. #emit SCTRL 6
  4548. #emit CONST.alt 0xFFFFFFFF
  4549. #emit STOR.S.pri ret
  4550. #emit JEQ hooks_do_hooks_call_no_als
  4551. }
  4552. // Do ALS just in case (YSI no longer uses this though now).
  4553. P:2("Hooks_OnPlayerEnterDynamicRaceCP end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerEnterDynamicRaceCP));
  4554. HOOK_RETURN<PlayerEnterDynamicRaceCP>
  4555. }
  4556. #if defined _ALS_OnPlayerEnterDynamicRaceCP
  4557. #undef OnPlayerEnterDynamicRaceCP
  4558. #else
  4559. #define _ALS_OnPlayerEnterDynamicRaceCP
  4560. #endif
  4561. #define OnPlayerEnterDynamicRaceCP S@@_OnPlayerEnterDynamicRaceCP
  4562. ALS_FORWARD<PlayerEnterDynamicRaceCP>
  4563. public OnPlayerLeaveDynamicRaceCP(playerid, checkpointid)
  4564. {
  4565. P:2("Hooks_OnPlayerLeaveDynamicRaceCP called: %d, %d", playerid, checkpointid);
  4566. new
  4567. end = YSI_g_sCallbackData[ALS_OnPlayerLeaveDynamicRaceCP][E_FUNC_HOOK_DATA_END],
  4568. start = YSI_g_sCallbackData[ALS_OnPlayerLeaveDynamicRaceCP][E_FUNC_HOOK_DATA_START],
  4569. ret = ALS_R_PlayerLeaveDynamicRaceCP;
  4570. if (start == end)
  4571. {
  4572. P:2("Hooks_OnPlayerLeaveDynamicRaceCP end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerLeaveDynamicRaceCP));
  4573. HOOK_CALL<PlayerLeaveDynamicRaceCP>
  4574. }
  4575. new
  4576. idx,
  4577. pointer,
  4578. re = end;
  4579. if (end > sizeof (YSI_g_sCallbackAddresses))
  4580. {
  4581. re = sizeof (YSI_g_sCallbackAddresses);
  4582. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  4583. }
  4584. // Do the initial fast elements.
  4585. while (start != re)
  4586. {
  4587. pointer = YSI_g_sCallbackAddresses[start++];
  4588. #emit PUSH.S checkpointid
  4589. #emit PUSH.S playerid
  4590. #emit PUSH.C 8
  4591. #emit LCTRL 6
  4592. #emit ADD.C 28
  4593. #emit PUSH.pri
  4594. #emit LOAD.S.pri pointer
  4595. #emit SCTRL 6
  4596. #emit CONST.alt 0xFFFFFFFF
  4597. #emit STOR.S.pri ret
  4598. #emit JEQ hooks_do_hooks_call_no_als
  4599. }
  4600. // Get any remaining pointers the old way.
  4601. while (start++ != end)
  4602. {
  4603. idx = AMX_GetPublicPointer(idx, pointer, "@yH_PlayerLeaveDynamicRaceCP");
  4604. #emit PUSH.S checkpointid
  4605. #emit PUSH.S playerid
  4606. #emit PUSH.C 8
  4607. #emit LCTRL 6
  4608. #emit ADD.C 28
  4609. #emit PUSH.pri
  4610. #emit LOAD.S.pri pointer
  4611. #emit SCTRL 6
  4612. #emit CONST.alt 0xFFFFFFFF
  4613. #emit STOR.S.pri ret
  4614. #emit JEQ hooks_do_hooks_call_no_als
  4615. }
  4616. // Do ALS just in case (YSI no longer uses this though now).
  4617. P:2("Hooks_OnPlayerLeaveDynamicRaceCP end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerLeaveDynamicRaceCP));
  4618. HOOK_RETURN<PlayerLeaveDynamicRaceCP>
  4619. }
  4620. #if defined _ALS_OnPlayerLeaveDynamicRaceCP
  4621. #undef OnPlayerLeaveDynamicRaceCP
  4622. #else
  4623. #define _ALS_OnPlayerLeaveDynamicRaceCP
  4624. #endif
  4625. #define OnPlayerLeaveDynamicRaceCP S@@_OnPlayerLeaveDynamicRaceCP
  4626. ALS_FORWARD<PlayerLeaveDynamicRaceCP>
  4627. public OnPlayerEnterDynamicArea(playerid, areaid)
  4628. {
  4629. P:2("Hooks_OnPlayerEnterDynamicArea called: %d, %d", playerid, areaid);
  4630. new
  4631. end = YSI_g_sCallbackData[ALS_OnPlayerEnterDynamicArea][E_FUNC_HOOK_DATA_END],
  4632. start = YSI_g_sCallbackData[ALS_OnPlayerEnterDynamicArea][E_FUNC_HOOK_DATA_START],
  4633. ret = ALS_R_PlayerEnterDynamicArea;
  4634. if (start == end)
  4635. {
  4636. P:2("Hooks_OnPlayerEnterDynamicArea end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerEnterDynamicArea));
  4637. HOOK_CALL<PlayerEnterDynamicArea>
  4638. }
  4639. new
  4640. idx,
  4641. pointer,
  4642. re = end;
  4643. if (end > sizeof (YSI_g_sCallbackAddresses))
  4644. {
  4645. re = sizeof (YSI_g_sCallbackAddresses);
  4646. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  4647. }
  4648. // Do the initial fast elements.
  4649. while (start != re)
  4650. {
  4651. pointer = YSI_g_sCallbackAddresses[start++];
  4652. #emit PUSH.S areaid
  4653. #emit PUSH.S playerid
  4654. #emit PUSH.C 8
  4655. #emit LCTRL 6
  4656. #emit ADD.C 28
  4657. #emit PUSH.pri
  4658. #emit LOAD.S.pri pointer
  4659. #emit SCTRL 6
  4660. #emit CONST.alt 0xFFFFFFFF
  4661. #emit STOR.S.pri ret
  4662. #emit JEQ hooks_do_hooks_call_no_als
  4663. }
  4664. // Get any remaining pointers the old way.
  4665. while (start++ != end)
  4666. {
  4667. idx = AMX_GetPublicPointer(idx, pointer, "@yH_PlayerEnterDynamicArea");
  4668. #emit PUSH.S areaid
  4669. #emit PUSH.S playerid
  4670. #emit PUSH.C 8
  4671. #emit LCTRL 6
  4672. #emit ADD.C 28
  4673. #emit PUSH.pri
  4674. #emit LOAD.S.pri pointer
  4675. #emit SCTRL 6
  4676. #emit CONST.alt 0xFFFFFFFF
  4677. #emit STOR.S.pri ret
  4678. #emit JEQ hooks_do_hooks_call_no_als
  4679. }
  4680. // Do ALS just in case (YSI no longer uses this though now).
  4681. P:2("Hooks_OnPlayerEnterDynamicArea end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerEnterDynamicArea));
  4682. HOOK_RETURN<PlayerEnterDynamicArea>
  4683. }
  4684. #if defined _ALS_OnPlayerEnterDynamicArea
  4685. #undef OnPlayerEnterDynamicArea
  4686. #else
  4687. #define _ALS_OnPlayerEnterDynamicArea
  4688. #endif
  4689. #define OnPlayerEnterDynamicArea S@@_OnPlayerEnterDynamicArea
  4690. ALS_FORWARD<PlayerEnterDynamicArea>
  4691. public OnPlayerLeaveDynamicArea(playerid, areaid)
  4692. {
  4693. P:2("Hooks_OnPlayerLeaveDynamicArea called: %d, %d", playerid, areaid);
  4694. new
  4695. end = YSI_g_sCallbackData[ALS_OnPlayerLeaveDynamicArea][E_FUNC_HOOK_DATA_END],
  4696. start = YSI_g_sCallbackData[ALS_OnPlayerLeaveDynamicArea][E_FUNC_HOOK_DATA_START],
  4697. ret = ALS_R_PlayerLeaveDynamicArea;
  4698. if (start == end)
  4699. {
  4700. P:2("Hooks_OnPlayerLeaveDynamicArea end 1: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerLeaveDynamicArea));
  4701. HOOK_CALL<PlayerLeaveDynamicArea>
  4702. }
  4703. new
  4704. idx,
  4705. pointer,
  4706. re = end;
  4707. if (end > sizeof (YSI_g_sCallbackAddresses))
  4708. {
  4709. re = sizeof (YSI_g_sCallbackAddresses);
  4710. if (start != sizeof (YSI_g_sCallbackAddresses)) idx = YSI_g_sLastFoundIndex;
  4711. }
  4712. // Do the initial fast elements.
  4713. while (start != re)
  4714. {
  4715. pointer = YSI_g_sCallbackAddresses[start++];
  4716. #emit PUSH.S areaid
  4717. #emit PUSH.S playerid
  4718. #emit PUSH.C 8
  4719. #emit LCTRL 6
  4720. #emit ADD.C 28
  4721. #emit PUSH.pri
  4722. #emit LOAD.S.pri pointer
  4723. #emit SCTRL 6
  4724. #emit CONST.alt 0xFFFFFFFF
  4725. #emit STOR.S.pri ret
  4726. #emit JEQ hooks_do_hooks_call_no_als
  4727. }
  4728. // Get any remaining pointers the old way.
  4729. while (start++ != end)
  4730. {
  4731. idx = AMX_GetPublicPointer(idx, pointer, "@yH_PlayerLeaveDynamicArea");
  4732. #emit PUSH.S areaid
  4733. #emit PUSH.S playerid
  4734. #emit PUSH.C 8
  4735. #emit LCTRL 6
  4736. #emit ADD.C 28
  4737. #emit PUSH.pri
  4738. #emit LOAD.S.pri pointer
  4739. #emit SCTRL 6
  4740. #emit CONST.alt 0xFFFFFFFF
  4741. #emit STOR.S.pri ret
  4742. #emit JEQ hooks_do_hooks_call_no_als
  4743. }
  4744. // Do ALS just in case (YSI no longer uses this though now).
  4745. P:2("Hooks_OnPlayerLeaveDynamicArea end 2: %d %d", ret, _:Bit_GetBit(Bit:gs_ALS, _:ALS_OnPlayerLeaveDynamicArea));
  4746. HOOK_RETURN<PlayerLeaveDynamicArea>
  4747. }
  4748. #if defined _ALS_OnPlayerLeaveDynamicArea
  4749. #undef OnPlayerLeaveDynamicArea
  4750. #else
  4751. #define _ALS_OnPlayerLeaveDynamicArea
  4752. #endif
  4753. #define OnPlayerLeaveDynamicArea S@@_OnPlayerLeaveDynamicArea
  4754. ALS_FORWARD<PlayerLeaveDynamicArea>
  4755. #undef ALS_PREFIX