| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354435543564357435843594360436143624363436443654366436743684369437043714372437343744375437643774378437943804381438243834384438543864387438843894390439143924393439443954396439743984399440044014402440344044405440644074408440944104411441244134414441544164417441844194420442144224423442444254426442744284429443044314432443344344435443644374438443944404441444244434444444544464447444844494450445144524453445444554456445744584459446044614462446344644465446644674468446944704471447244734474447544764477447844794480448144824483448444854486448744884489449044914492449344944495449644974498449945004501450245034504450545064507450845094510451145124513451445154516451745184519452045214522452345244525452645274528452945304531453245334534453545364537453845394540454145424543454445454546454745484549455045514552455345544555455645574558455945604561456245634564456545664567456845694570457145724573457445754576457745784579458045814582458345844585458645874588458945904591459245934594459545964597459845994600460146024603460446054606460746084609461046114612461346144615461646174618461946204621462246234624462546264627462846294630463146324633463446354636463746384639464046414642464346444645464646474648464946504651465246534654465546564657465846594660466146624663466446654666466746684669467046714672467346744675467646774678467946804681468246834684468546864687468846894690469146924693469446954696469746984699470047014702470347044705470647074708470947104711471247134714471547164717471847194720472147224723472447254726472747284729473047314732473347344735473647374738473947404741474247434744474547464747474847494750475147524753475447554756475747584759476047614762476347644765476647674768476947704771477247734774477547764777477847794780478147824783478447854786478747884789479047914792479347944795479647974798479948004801480248034804480548064807480848094810481148124813481448154816481748184819482048214822482348244825482648274828482948304831483248334834483548364837483848394840484148424843484448454846484748484849485048514852485348544855485648574858485948604861486248634864486548664867486848694870487148724873487448754876487748784879488048814882488348844885488648874888488948904891489248934894489548964897489848994900490149024903490449054906490749084909491049114912491349144915491649174918491949204921492249234924492549264927492849294930493149324933493449354936493749384939494049414942494349444945494649474948494949504951495249534954495549564957495849594960496149624963496449654966496749684969497049714972497349744975497649774978497949804981498249834984498549864987498849894990499149924993499449954996499749984999500050015002500350045005500650075008500950105011501250135014501550165017501850195020502150225023502450255026502750285029503050315032503350345035503650375038503950405041504250435044504550465047504850495050505150525053505450555056505750585059506050615062506350645065506650675068506950705071507250735074507550765077507850795080508150825083508450855086508750885089509050915092509350945095509650975098509951005101510251035104510551065107510851095110511151125113511451155116511751185119512051215122512351245125512651275128512951305131513251335134513551365137513851395140514151425143514451455146514751485149515051515152515351545155515651575158515951605161516251635164516551665167516851695170517151725173517451755176517751785179518051815182518351845185518651875188518951905191519251935194519551965197519851995200520152025203520452055206520752085209521052115212521352145215521652175218521952205221522252235224522552265227522852295230523152325233523452355236523752385239524052415242524352445245524652475248524952505251525252535254525552565257525852595260526152625263526452655266526752685269527052715272527352745275527652775278527952805281528252835284528552865287528852895290529152925293529452955296529752985299530053015302530353045305530653075308530953105311531253135314531553165317531853195320532153225323532453255326532753285329533053315332533353345335533653375338533953405341534253435344534553465347534853495350535153525353535453555356535753585359536053615362536353645365536653675368536953705371537253735374537553765377537853795380538153825383538453855386538753885389539053915392539353945395539653975398539954005401540254035404540554065407540854095410541154125413541454155416541754185419542054215422542354245425542654275428542954305431543254335434543554365437543854395440544154425443544454455446544754485449545054515452545354545455545654575458545954605461546254635464546554665467546854695470547154725473547454755476547754785479548054815482548354845485548654875488548954905491549254935494549554965497549854995500550155025503550455055506550755085509551055115512551355145515551655175518551955205521552255235524552555265527552855295530553155325533553455355536553755385539554055415542554355445545554655475548554955505551555255535554555555565557555855595560556155625563556455655566556755685569557055715572557355745575557655775578557955805581558255835584558555865587558855895590559155925593559455955596559755985599560056015602560356045605560656075608560956105611561256135614561556165617561856195620562156225623562456255626562756285629563056315632563356345635563656375638563956405641564256435644564556465647564856495650565156525653565456555656565756585659566056615662566356645665566656675668566956705671567256735674567556765677567856795680568156825683568456855686568756885689569056915692569356945695569656975698569957005701570257035704570557065707570857095710571157125713571457155716571757185719572057215722572357245725572657275728572957305731573257335734573557365737573857395740574157425743574457455746574757485749575057515752575357545755575657575758575957605761576257635764576557665767576857695770577157725773577457755776577757785779578057815782578357845785578657875788578957905791579257935794579557965797579857995800580158025803580458055806580758085809581058115812581358145815581658175818581958205821582258235824582558265827582858295830583158325833583458355836583758385839584058415842584358445845584658475848584958505851585258535854585558565857585858595860586158625863586458655866586758685869587058715872587358745875587658775878587958805881588258835884588558865887588858895890589158925893589458955896589758985899590059015902590359045905590659075908590959105911591259135914591559165917591859195920592159225923592459255926592759285929593059315932593359345935593659375938593959405941594259435944594559465947594859495950595159525953595459555956595759585959596059615962596359645965596659675968596959705971597259735974597559765977597859795980598159825983598459855986598759885989599059915992599359945995599659975998599960006001600260036004600560066007600860096010601160126013601460156016601760186019602060216022602360246025602660276028602960306031603260336034603560366037603860396040604160426043604460456046604760486049605060516052605360546055605660576058605960606061606260636064606560666067606860696070607160726073607460756076607760786079608060816082608360846085608660876088608960906091609260936094609560966097609860996100610161026103610461056106610761086109611061116112611361146115611661176118611961206121612261236124612561266127612861296130613161326133613461356136613761386139614061416142614361446145614661476148614961506151615261536154615561566157615861596160616161626163616461656166616761686169617061716172617361746175617661776178617961806181618261836184618561866187618861896190619161926193619461956196619761986199620062016202620362046205620662076208620962106211621262136214621562166217621862196220622162226223622462256226622762286229623062316232623362346235623662376238623962406241624262436244624562466247624862496250625162526253625462556256625762586259626062616262626362646265626662676268626962706271627262736274627562766277627862796280628162826283628462856286628762886289629062916292629362946295629662976298629963006301630263036304630563066307630863096310631163126313631463156316631763186319632063216322632363246325632663276328632963306331633263336334633563366337633863396340634163426343634463456346634763486349635063516352635363546355635663576358635963606361636263636364636563666367636863696370637163726373637463756376637763786379638063816382638363846385638663876388638963906391639263936394639563966397639863996400640164026403640464056406640764086409641064116412641364146415641664176418641964206421642264236424642564266427642864296430643164326433643464356436643764386439644064416442644364446445644664476448644964506451645264536454645564566457645864596460646164626463646464656466646764686469647064716472647364746475647664776478647964806481648264836484648564866487648864896490649164926493649464956496649764986499650065016502650365046505650665076508650965106511651265136514651565166517651865196520652165226523652465256526652765286529653065316532653365346535653665376538653965406541654265436544654565466547654865496550655165526553655465556556655765586559656065616562656365646565656665676568656965706571657265736574657565766577657865796580658165826583658465856586658765886589659065916592659365946595659665976598659966006601660266036604660566066607660866096610661166126613661466156616661766186619662066216622662366246625662666276628662966306631663266336634663566366637663866396640664166426643664466456646664766486649665066516652665366546655665666576658665966606661666266636664666566666667666866696670667166726673667466756676667766786679668066816682668366846685668666876688668966906691669266936694669566966697669866996700670167026703670467056706670767086709671067116712671367146715671667176718671967206721672267236724672567266727672867296730673167326733673467356736673767386739674067416742674367446745674667476748674967506751675267536754675567566757675867596760676167626763676467656766676767686769677067716772677367746775677667776778677967806781678267836784678567866787678867896790679167926793679467956796679767986799680068016802680368046805680668076808680968106811681268136814681568166817681868196820682168226823682468256826682768286829683068316832683368346835683668376838683968406841684268436844684568466847684868496850685168526853685468556856685768586859686068616862686368646865686668676868686968706871687268736874687568766877687868796880688168826883688468856886688768886889689068916892689368946895689668976898689969006901690269036904690569066907690869096910691169126913691469156916691769186919692069216922692369246925692669276928692969306931693269336934693569366937693869396940694169426943694469456946694769486949695069516952695369546955695669576958695969606961696269636964696569666967696869696970697169726973697469756976697769786979698069816982698369846985698669876988698969906991699269936994699569966997699869997000700170027003700470057006700770087009701070117012701370147015701670177018701970207021702270237024702570267027702870297030703170327033703470357036703770387039704070417042704370447045704670477048704970507051705270537054705570567057705870597060706170627063706470657066706770687069707070717072707370747075707670777078707970807081708270837084708570867087708870897090709170927093709470957096709770987099710071017102710371047105710671077108710971107111711271137114711571167117711871197120712171227123712471257126712771287129713071317132713371347135713671377138713971407141714271437144714571467147714871497150715171527153715471557156715771587159716071617162716371647165716671677168716971707171717271737174717571767177717871797180718171827183718471857186718771887189719071917192719371947195719671977198719972007201720272037204720572067207720872097210721172127213721472157216721772187219722072217222722372247225722672277228722972307231723272337234723572367237723872397240724172427243724472457246724772487249725072517252725372547255725672577258725972607261726272637264726572667267726872697270727172727273727472757276727772787279728072817282728372847285728672877288728972907291729272937294729572967297729872997300730173027303730473057306730773087309731073117312731373147315731673177318731973207321732273237324732573267327732873297330733173327333733473357336733773387339734073417342734373447345734673477348734973507351735273537354735573567357735873597360736173627363736473657366736773687369737073717372737373747375737673777378737973807381738273837384738573867387738873897390739173927393739473957396739773987399740074017402740374047405740674077408740974107411741274137414741574167417741874197420742174227423742474257426742774287429743074317432743374347435743674377438743974407441744274437444744574467447744874497450745174527453745474557456745774587459746074617462746374647465746674677468746974707471747274737474747574767477747874797480748174827483748474857486748774887489749074917492749374947495749674977498749975007501750275037504750575067507750875097510751175127513751475157516751775187519752075217522752375247525752675277528752975307531753275337534753575367537753875397540754175427543754475457546754775487549755075517552755375547555755675577558755975607561756275637564756575667567756875697570757175727573757475757576757775787579758075817582758375847585758675877588758975907591759275937594759575967597759875997600760176027603760476057606760776087609761076117612761376147615761676177618761976207621762276237624762576267627762876297630763176327633763476357636763776387639764076417642764376447645764676477648764976507651765276537654765576567657765876597660766176627663766476657666766776687669767076717672767376747675767676777678767976807681768276837684768576867687768876897690769176927693769476957696769776987699770077017702770377047705770677077708770977107711771277137714771577167717771877197720772177227723772477257726772777287729773077317732773377347735773677377738773977407741774277437744774577467747774877497750775177527753775477557756775777587759776077617762776377647765776677677768776977707771777277737774777577767777777877797780778177827783778477857786778777887789779077917792779377947795779677977798779978007801780278037804780578067807780878097810781178127813781478157816781778187819782078217822782378247825782678277828782978307831783278337834783578367837783878397840784178427843784478457846784778487849785078517852785378547855785678577858785978607861786278637864786578667867786878697870787178727873787478757876787778787879788078817882788378847885788678877888788978907891789278937894789578967897789878997900790179027903790479057906790779087909791079117912791379147915791679177918791979207921792279237924792579267927792879297930793179327933793479357936793779387939794079417942794379447945794679477948794979507951795279537954795579567957795879597960796179627963796479657966796779687969797079717972797379747975797679777978797979807981798279837984798579867987798879897990799179927993799479957996799779987999800080018002800380048005800680078008800980108011801280138014801580168017801880198020802180228023802480258026802780288029803080318032803380348035803680378038803980408041804280438044804580468047804880498050805180528053805480558056805780588059806080618062806380648065806680678068806980708071807280738074807580768077807880798080808180828083808480858086808780888089809080918092809380948095809680978098809981008101810281038104810581068107810881098110811181128113811481158116811781188119812081218122812381248125812681278128812981308131813281338134813581368137813881398140814181428143814481458146814781488149815081518152815381548155815681578158815981608161816281638164816581668167816881698170817181728173817481758176817781788179818081818182818381848185818681878188818981908191819281938194819581968197819881998200820182028203820482058206820782088209821082118212821382148215821682178218821982208221822282238224822582268227822882298230823182328233823482358236823782388239824082418242824382448245824682478248824982508251825282538254825582568257825882598260826182628263826482658266826782688269827082718272827382748275827682778278827982808281828282838284828582868287828882898290829182928293829482958296829782988299830083018302830383048305830683078308830983108311831283138314831583168317831883198320832183228323832483258326832783288329833083318332833383348335833683378338833983408341834283438344834583468347834883498350835183528353835483558356835783588359836083618362836383648365836683678368836983708371837283738374837583768377837883798380838183828383838483858386838783888389839083918392839383948395839683978398839984008401840284038404840584068407840884098410841184128413841484158416841784188419842084218422842384248425842684278428842984308431843284338434843584368437843884398440844184428443844484458446844784488449845084518452845384548455845684578458845984608461846284638464846584668467846884698470847184728473847484758476847784788479848084818482848384848485848684878488848984908491849284938494849584968497849884998500850185028503850485058506850785088509851085118512851385148515851685178518851985208521852285238524852585268527852885298530853185328533853485358536853785388539854085418542854385448545854685478548854985508551855285538554855585568557855885598560856185628563856485658566856785688569857085718572857385748575857685778578857985808581858285838584858585868587858885898590859185928593859485958596859785988599860086018602860386048605860686078608860986108611861286138614861586168617861886198620862186228623862486258626862786288629863086318632863386348635863686378638863986408641864286438644864586468647864886498650865186528653865486558656865786588659866086618662866386648665866686678668866986708671867286738674867586768677867886798680868186828683868486858686868786888689869086918692869386948695869686978698869987008701870287038704870587068707870887098710871187128713871487158716871787188719872087218722872387248725872687278728872987308731873287338734873587368737873887398740874187428743874487458746874787488749875087518752875387548755875687578758875987608761876287638764876587668767876887698770877187728773877487758776877787788779878087818782878387848785878687878788878987908791879287938794879587968797879887998800880188028803880488058806880788088809881088118812881388148815881688178818881988208821882288238824882588268827882888298830883188328833883488358836883788388839884088418842884388448845884688478848884988508851885288538854885588568857885888598860886188628863886488658866886788688869887088718872887388748875887688778878887988808881888288838884888588868887888888898890889188928893889488958896889788988899 |
- /*
- * ===============
- * INTRODUCTION:
- * ===============
- *
- * fixes.inc - Community patch for buggy SA:MP functions.
- *
- * ================
- * LIST OF FIXES:
- * ================
- *
- * FIX: GetPlayerColor
- * PROBLEM: Returns "0" if "SetPlayerColor" has never been called.
- * SOLUTION: Call "SetPlayerColor" in "OnPlayerConnect".
- * SEE: "OnPlayerConnect".
- * AUTHOR: KoczkaHUN
- *
- * FIX: FILTERSCRIPT
- * PROBLEM: Despite the fact that is in every new script, many people don't
- * define "FILTERSCRIPT" where appropriate.
- * SOLUTION: Provide an "IS_FILTERSCRIPT" variable (note the naming to match
- * the original macro).
- * AUTHOR: Y_Less (https://github.com/Y-Less/)
- * SEE: "OnFilterScriptInit" and "OnGameModeInit".
- *
- * FIX: SpawnPlayer
- * PROBLEM: Kills the player if they are in a vehicle.
- * SOLUTION: Remove the from the vehicle.
- * SEE: "FIXES_SpawnPlayer".
- * AUTHOR: Y_Less (https://github.com/Y-Less/)
- *
- * FIX: SetPlayerName
- * PROBLEM: Using "SetPlayerName" when the new name only differs from the old
- * name in case does not alter the name at all.
- * SOLUTION: Change their name twice - once to "_FIXES TEMP NAME" and then to
- * the actual required name.
- * SEE: "OnPlayerConnect" and "FIXES_SetPlayerName".
- * AUTHOR: Y_Less (https://github.com/Y-Less/)
- * AUTHOR: Slice (https://github.com/oscar-broman/)
- * AUTHOR: simonepri (https://github.com/simonepri/)
- *
- * FIX: GetPlayerSkin
- * PROBLEM: Returns the new skin after "SetSpawnInfo" is called but before the
- * player actually respawns to get the new skin.
- * SOLUTION: Record the skin in "OnPlayerSpawn" and always return that one.
- * SEE: "OnPlayerSpawn", "FIXES_GetPlayerSkin" and "FIXES_SetPlayerSkin".
- * AUTHOR: Y_Less (https://github.com/Y-Less/)
- *
- * FIX: GetWeaponName
- * PROBLEM: Returns nothing for 18, 44, and 45.
- * SOLUTION: Return the correct names ("Molotov Cocktail", "Thermal Goggles",
- * and "Night vision Goggles").
- * SEE: "FIXES_GetWeaponName".
- * AUTHOR: Y_Less (https://github.com/Y-Less/)
- * FIXED IN: 0.3.7
- *
- * FIX: SetPlayerWorldBounds
- * PROBLEM: Aiming can bypass the edge.
- * SOLUTION: Check for the player leaving the area and reset them to their last
- * good position if they leave the area (aiming or not).
- * SEE: "OnPlayerUpdate" and "FIXES_SetPlayerWorldBounds".
- * AUTHOR: Y_Less (https://github.com/Y-Less/)
- *
- * FIX: TogglePlayerControllable
- * PROBLEM: Other players see you moving on the spot.
- * SOLUTION: Return 0 in OnPlayerUpdate.
- * SEE: "FIXES_TogglePlayerControllable" and "OnPlayerUpdate".
- * AUTHOR: Slice (https://github.com/oscar-broman/)
- * POST: http://forum.sa-mp.com/showpost.php?p=876854
- *
- * FIX: HydraSniper
- * PROBLEM: Entering military aircraft with a sniper rifle messes up views.
- * SOLUTION: Set their armed weapon to fists.
- * SEE: "OnPlayerStateChange", "FIXES_GivePlayerWeapon",
- * "FIXES_SetPlayerArmedWeapon".
- * AUTHOR: funky1234
- * POST: http://forum.sa-mp.com/showpost.php?p=965644
- *
- * FIX: IsPlayerInCheckpoint
- * PROBLEM: Function returns an undefined value if it is called before any
- * other checkpoint functions are called to initialise the value.
- * SOLUTION: Call "DisablePlayerCheckpoint" when they connect.
- * SEE: "OnPlayerConnect".
- * AUTHOR: Y_Less (https://github.com/Y-Less/)
- *
- * FIX: IsPlayerInRaceCheckpoint
- * PROBLEM: Function returns an undefined value if it is called before any
- * other race checkpoint functions are called to initialise the value.
- * SOLUTION: Call "DisablePlayerRaceCheckpoint" when they connect.
- * SEE: "OnPlayerConnect".
- * AUTHOR: Y_Less (https://github.com/Y-Less/)
- *
- * FIX: GetPlayerWeapon
- * PROBLEM: Returns the old value after using "SetPlayerArmedWeapon" when they
- * are in a vehicle.
- * SOLUTION: If "SetPlayerArmedWeapon" is called in a vehicle, store the new
- * value and return that instead.
- * SEE: "OnPlayerStateChange", "FIXES_SetPlayerArmedWeapon", and
- * "FIXES_GetPlayerWeapon".
- * AUTHOR: Y_Less (https://github.com/Y-Less/)
- *
- * FIX: PutPlayerInVehicle
- * PROBLEM: If this is used on a passenger the driver of their old vehicle
- * doesn't see them in their new vehicle.
- * SOLUTION: Remove them from the vehicle first.
- * SEE: "OnPlayerStateChange" and "FIXES_PutPlayerInVehicle".
- * AUTHOR: leong124
- * AUTHOR: Y_Less (https://github.com/Y-Less/)
- * POST: http://forum.sa-mp.com/showpost.php?p=1265965
- *
- * FIX: KEY_AIM
- * PROBLEM: "KEY_AIM" isn't defined by default.
- * SOLUTION: Define it.
- * SEE: N/A.
- * AUTHOR: Y_Less (https://github.com/Y-Less/)
- *
- * FIX: SetPlayerCheckpoint
- * PROBLEM: If a checkpoint is already set it will use the size of that
- * checkpoint instead of the new one.
- * SOLUTION: Call "DisablePlayerCheckpoint" before setting the checkpoint.
- * SEE: "FIXES_SetPlayerCheckpoint".
- * AUTHOR: ziggi (https://github.com/ziggi/)
- *
- * FIX: SetPlayerRaceCheckpoint
- * PROBLEM: If a checkpoint is already set it will use the size of that
- * checkpoint instead of the new one.
- * SOLUTION: Call "DisablePlayerRaceCheckpoint" before setting the checkpoint.
- * SEE: "FIXES_SetPlayerRaceCheckpoint".
- * AUTHOR: ziggi (https://github.com/ziggi/)
- *
- * FIX: TextDrawCreate
- * PROBLEM: Crashes on a blank string.
- * SOLUTION: Intercept blank strings.
- * SEE: "FIXES_TextDrawCreate".
- * AUTHOR: wups
- *
- * FIX: TextDrawSetString
- * PROBLEM: Crashes on a blank string and size greater than 1024.
- * SOLUTION: Intercept blank strings and truncate long strings.
- * SEE: "FIXES_TextDrawSetString".
- * AUTHOR: TomTrox
- *
- * FIX: CreatePlayerTextDraw
- * PROBLEM: Crashes on a blank string.
- * SOLUTION: Intercept blank strings.
- * SEE: "FIXES_CreatePlayerTextDraw".
- * AUTHOR: wups
- * AUTHOR: Y_Less (https://github.com/Y-Less/)
- *
- * FIX: PlayerTextDrawSetString
- * PROBLEM: Crashes on a blank string and size greater than 1024.
- * SOLUTION: Intercept blank strings and truncate long strings.
- * SEE: "FIXES_PlayerTextDrawSetString".
- * AUTHOR: TomTrox
- * AUTHOR: Y_Less (https://github.com/Y-Less/)
- *
- * FIX: AllowInteriorWeapons
- * PROBLEM: Does nothing.
- * SOLUTION: Set the player's weapon to fists in an interior.
- * SEE: "FIXES_AllowInteriorWeapons", "OnGameModeInit" and
- * "OnPlayerUpdate".
- * AUTHOR: KoczkaHUN
- *
- * FIX: OnPlayerEnterVehicle
- * PROBLEM: Crashes other players when people enter an invalid seat.
- * SOLUTION: Desync the people with invalid seats.
- * SEE: "OnPlayerStateChange" and "OnPlayerUpdate".
- * AUTHOR: RyDeR`
- * AUTHOR: Y_Less (https://github.com/Y-Less/)
- * POST: http://forum.sa-mp.com/showpost.php?p=1410296
- *
- * FIX: OnPlayerEnterVehicle_2
- * PROBLEM: Crashes the server when hacks enter an invalid vehicle.
- * SOLUTION: Desync the people with invalid vehicles.
- * SEE: "OnPlayerEnterVehicle".
- * AUTHOR: im
- * AUTHOR: Y_Less (https://github.com/Y-Less/)
- *
- * FIX: AllowTeleport
- * PROBLEM: 0.3dRC9 removed "AllowPlayerTeleport" and "AllowAdminTeleport" in
- * favour of "OnPlayerClickMap". Some scripts used the old code and.
- * SOLUTION: Teleport the player in "OnPlayerClickMap".
- * SEE: "OnPlayerClickMap", "FIXES_AllowPlayerTeleport", and
- * "FIXES_AllowAdminTeleport".
- * AUTHOR: Y_Less (https://github.com/Y-Less/)
- *
- * FIX: SetPlayerSpecialAction
- * PROBLEM: Removing jetpacks from players by setting their special action to 0
- * causes the sound to stay until death.
- * SOLUTION: Call "ClearAnimations" before "SetPlayerSpecialAction".
- * SEE: "FIXES_SetPlayerSpecialAction".
- * AUTHOR: MP2
- *
- * FIX: OnDialogResponse
- * PROBLEM: Cheaters can spoof the dialogid they are using to respond to ones
- * they can't actually see.
- * SOLUTION: Store the displayed dialogid and use that instead.
- * SEE: "FIXES_OnDialogResponse", "FIXES_ShowPlayerDialog".
- * AUTHOR: Y_Less (https://github.com/Y-Less/)
- * FIXED IN: 0.3e RC6
- *
- * FIX: GetPlayerDialog
- * PROBLEM: This function doesn't exist. Fixed for hidden dialogs.
- * SOLUTION: Add it. DEFAULTS TO FALSE!
- * SEE: "FIXES_GetPlayerDialog".
- * AUTHOR: Y_Less (https://github.com/Y-Less/)
- * AUTHOR: simonepri (https://github.com/simonepri/)
- *
- * FIX: PlayerDialogResponse
- * PROBLEM: A player's dialog doesn't hide when the gamemode restarts, causing
- * the server to print "Warning: PlayerDialogResponse PlayerId: 0
- * dialog ID doesn't match last sent dialog ID".
- * SOLUTION: Hide it.
- * SEE: "OnPlayerConnect", "OnGameModeExit".
- * AUTHOR: simonepri (https://github.com/simonepri/)
- *
- * FIX: SetSpawnInfo
- * PROBLEM: Kicks the player if "SpawnPlayer" is called before "SetSpawnInfo".
- * SOLUTION: Call "SetSpawnInfo" at least once.
- * SEE: "OnPlayerConnect".
- * AUTHOR: Y_Less (https://github.com/Y-Less/)
- *
- * FIX: SetPlayerSkin
- * PROBLEM: Breaks sitting on bikes.
- * SOLUTION: Put them back in the vehicle after setting their skin.
- * SEE: "FIXES_SetPlayerSkin".
- * AUTHOR: CyNiC
- * POST: http://forum.sa-mp.com/showpost.php?p=1756094
- *
- * FIX: HideMenuForPlayer
- * PROBLEM: Crashes when passed an invalid menu ID.
- * SOLUTION: Don't hide it when passed an invalid menu.
- * SEE: "FIXES_HideMenuForPlayer".
- * AUTHOR: Y_Less (https://github.com/Y-Less/)
- * POST: http://forum.sa-mp.com/showpost.php?p=1787297
- *
- * FIX: valstr
- * PROBLEM: Crashes on large numbers.
- * SOLUTION: Use "format" instead.
- * SEE: "FIXES_valstr".
- * AUTHOR: Slice (https://github.com/oscar-broman/)
- *
- * FIX: fclose
- * PROBLEM: Crashes on an invalid handle.
- * SOLUTION: Check for an invalid handle.
- * SEE: "FIXES_fclose".
- * AUTHOR: Slice (https://github.com/oscar-broman/)
- *
- * FIX: fwrite
- * PROBLEM: Crashes on an invalid handle.
- * SOLUTION: Check for an invalid handle.
- * SEE: "FIXES_fwrite".
- * AUTHOR: Slice (https://github.com/oscar-broman/)
- *
- * FIX: fread
- * PROBLEM: Crashes on an invalid handle.
- * SOLUTION: Check for an invalid handle.
- * SEE: "FIXES_fread".
- * AUTHOR: Slice (https://github.com/oscar-broman/)
- *
- * FIX: fputchar
- * PROBLEM: Crashes on an invalid handle.
- * SOLUTION: Check for an invalid handle.
- * SEE: "FIXES_fputchar".
- * AUTHOR: Slice (https://github.com/oscar-broman/)
- *
- * FIX: fgetchar
- * PROBLEM: Crashes on an invalid handle.
- * SOLUTION: Check for an invalid handle.
- * SEE: "FIXES_fgetchar".
- * AUTHOR: Slice (https://github.com/oscar-broman/)
- *
- * FIX: fblockwrite
- * PROBLEM: Crashes on an invalid handle.
- * SOLUTION: Check for an invalid handle.
- * SEE: "FIXES_fblockwrite".
- * AUTHOR: Slice (https://github.com/oscar-broman/)
- *
- * FIX: fblockread
- * PROBLEM: Crashes on an invalid handle.
- * SOLUTION: Check for an invalid handle.
- * SEE: "FIXES_fblockread".
- * AUTHOR: Slice (https://github.com/oscar-broman/)
- *
- * FIX: fseek
- * PROBLEM: Crashes on an invalid handle.
- * SOLUTION: Check for an invalid handle.
- * SEE: "FIXES_fseek".
- * AUTHOR: Slice (https://github.com/oscar-broman/)
- *
- * FIX: flength
- * PROBLEM: Crashes on an invalid handle.
- * SOLUTION: Check for an invalid handle.
- * SEE: "FIXES_flength".
- * AUTHOR: Slice (https://github.com/oscar-broman/)
- *
- * FIX: file_inc
- * PROBLEM: Includes or excludes all the file function fixes together (can
- * cause major overhead).
- * SOLUTION: Optionally group them all under one define. DEFAULTS TO FALSE!
- * SEE: "FIX_file_inc".
- * AUTHOR: Y_Less (https://github.com/Y-Less/)
- *
- * FIX: IsPlayerAttachedObjectSlotUsed
- * PROBLEM: Doesn't work in OnPlayerDisconnect.
- * SOLUTION: Maintain an internal record of slots used.
- * SEE: "FIXES_SetPlayerAttachedObject",
- * "FIXES_RemovePlayerAttachedObject",
- * "FIXES_IsPAttachedObjectSlotUsed", and
- * "OnPlayerDisconnect".
- * AUTHOR: Y_Less (https://github.com/Y-Less/)
- *
- * FIX: SetPlayerAttachedObject
- * PROBLEM: Doesn't remove objects when the mode ends.
- * SOLUTION: Remove them.
- * SEE: "FIXES_SetPlayerAttachedObject",
- * "FIXES_RemovePlayerAttachedObject", and
- * "OnPlayerDisconnect".
- * AUTHOR: Y_Less (https://github.com/Y-Less/)
- *
- * FIX: OnPlayerDeath
- * PROBLEM: Clients get stuck when they die with an animation applied.
- * SOLUTION: Clear their animations.
- * SEE: "OnPlayerDeath" and "OnPlayerUpdate".
- * AUTHOR: h02
- * POST: http://forum.sa-mp.com/showpost.php?p=1641144
- *
- * FIX: strins
- * PROBLEM: Ignores the "maxlength" parameter causing possible crashes.
- * SOLUTION: Manually check the length.
- * SEE: "FIXES_strins".
- * AUTHOR: Slice (https://github.com/oscar-broman/)
- * AUTHOR: Y_Less (https://github.com/Y-Less)
- *
- * FIX: IsPlayerConnected
- * PROBLEM: Only uses the lower two bytes of a passed ID.
- * SOLUTION: Mask the numbers.
- * SEE: "FIXES_IsPlayerConnected".
- * AUTHOR: Slice (https://github.com/oscar-broman/)
- *
- * FIX: OnPlayerCommandText
- * PROBLEM: Can crash ZCMD when passed a null string.
- * SOLUTION: Pass NULL if invalid inputs given.
- * SEE: "OnPlayerCommandText".
- * AUTHOR: Y_Less (https://github.com/Y-Less/)
- * POST: http://forum.sa-mp.com/showpost.php?p=1909511
- *
- * FIX: TrainExit
- * PROBLEM: When getting out of a train entered by "PutPlayerInVehicle", the
- * camera does not reset properly.
- * SOLUTION: Reset the camera.
- * SEE: "FIXES_PutPlayerInVehicle", "FIXES_OnPlayerStateChange".
- * AUTHOR: Terminator3
- * AUTHOR: Y_Less (https://github.com/Y-Less/)
- *
- * FIX: Kick
- * PROBLEM: Calling "Kick" in "OnPlayerConnect" doesn't work properly.
- * SOLUTION: Defer it.
- * SEE: "OnPlayerConnect", "FIXES_Kick".
- * AUTHOR: Y_Less (https://github.com/Y-Less/)
- * POST: http://forum.sa-mp.com/showpost.php?p=1989453
- * FIXED IN: 0.3x
- *
- * FIX: OnVehicleMod
- * PROBLEM: Crashes other players when invalid mods are applied.
- * SOLUTION: Desync the player.
- * SEE: "OnVehicleMod".
- * AUTHOR: JernejL (https://github.com/JernejL/)
- * AUTHOR: Y_Less (https://github.com/Y-Less/)
- * POST: http://forum.sa-mp.com/showpost.php?p=1671500
- *
- * FIX: random
- * PROBLEM: Doesn't work with negative numbers.
- * SOLUTION: Invert then reinvert. DEFAULTS TO FALSE!
- * SEE: "FIXES_random".
- * AUTHOR: simonepri (https://github.com/simonepri/)
- *
- * FIX: sleep
- * PROBLEM: Leaks bytes from the stack.
- * SOLUTION: Call a function to store the correct value.
- * SEE: "FIXES_sleep".
- * AUTHOR: Y_Less (https://github.com/Y-Less/)
- *
- * FIX: AddMenuItem
- * PROBLEM: Crashes when passed an invalid menu ID.
- * SOLUTION: Don't hide it when passed an invalid menu.
- * SEE: "FIXES_AddMenuItem".
- * AUTHOR: Y_Less (https://github.com/Y-Less/)
- *
- * FIX: SetMenuColumnHeader
- * PROBLEM: Crashes when passed an invalid menu ID.
- * SOLUTION: Don't hide it when passed an invalid menu.
- * SEE: "FIXES_SetMenuColumnHeader".
- * AUTHOR: Y_Less (https://github.com/Y-Less/)
- *
- * FIX: ShowMenuForPlayer
- * PROBLEM: Crashes when passed an invalid menu ID.
- * SOLUTION: Don't hide it when passed an invalid menu.
- * SEE: "FIXES_ShowMenuForPlayer".
- * AUTHOR: Y_Less (https://github.com/Y-Less/)
- *
- * FIX: HideMenuForPlayer
- * PROBLEM: Crashes when passed an invalid menu ID.
- * SOLUTION: Don't hide it when passed an invalid menu.
- * SEE: "FIXES_HideMenuForPlayer".
- * AUTHOR: Y_Less (https://github.com/Y-Less/)
- * POST: http://forum.sa-mp.com/showpost.php?p=1787297
- *
- * FIX: HideMenuForPlayer_2
- * PROBLEM: Ignores the "menuid" parameter.
- * SOLUTION: Only hide the correct menu. DEFAULTS TO FALSE!
- * SEE: "FIXES_HideMenuForPlayer".
- * AUTHOR: Y_Less (https://github.com/Y-Less/)
- *
- * FIX: DisableMenu
- * PROBLEM: Crashes when passed an invalid menu ID.
- * SOLUTION: Don't hide it when passed an invalid menu.
- * SEE: "FIXES_DisableMenu".
- * AUTHOR: Y_Less (https://github.com/Y-Less/)
- *
- * FIX: DisableMenuRow
- * PROBLEM: Crashes when passed an invalid menu ID.
- * SOLUTION: Don't hide it when passed an invalid menu.
- * SEE: "FIXES_DisableMenuRow".
- * AUTHOR: Y_Less (https://github.com/Y-Less/)
- *
- * FIX: Menus
- * PROBLEM: All menu function fixes are included separately for major overhead.
- * SOLUTION: Optionally group them all under one define.
- * SEE: "FIX_Menus", "_FIX_Menus"
- * AUTHOR: Y_Less (https://github.com/Y-Less/)
- *
- * FIX: GetPlayerMenu
- * PROBLEM: Returns previous menu when none is displayed.
- * SOLUTION: Return the correct value.
- * SEE: "FIXES_GetPlayerMenu", "OnPlayerSelectedMenuRow".
- * AUTHOR: Y_Less (https://github.com/Y-Less/)
- *
- * FIX: GetPlayerInterior
- * PROBLEM: Always returns 0 for NPCs.
- * SOLUTION: Return the correct value.
- * SEE: "FIXES_GetPlayerInterior", "FIXES_SetPlayerInterior".
- * AUTHOR: Y_Less (https://github.com/Y-Less/)
- * AUTHOR: simonepri (https://github.com/simonepri/)
- *
- * FIX: ClearAnimations
- * PROBLEM: Use ClearAnimation while you are in a vehicle cause the player exit
- * from it.
- * SOLUTION: Apply an animation instead of clear animation.
- * SEE: "FIXES_ClearAnimations".
- * AUTHOR: simonepri (https://github.com/simonepri/)
- *
- * FIX: ClearAnimations_2
- * PROBLEM: ClearAnimations doesn't do anything when the animation ends if we
- * pass 1 for the freeze parameter in ApplyAnimation.
- * SOLUTION: Apply an idle animation for stop and then use ClearAnimation.
- * SEE: "FIXES_ClearAnimations".
- * AUTHOR: simonepri (https://github.com/simonepri/)
- *
- * FIX: DriveBy
- * PROBLEM: If you press KEY_CROUCH while you're passenger and if you are
- * armed, the player start to aim; if you repress KEY_CROUCH the
- * player don't return in vehicle.
- * SOLUTION: Apply the animation to return the player in the vehicle.
- * SEE: "OnPlayerKeyStateChange".
- * AUTHOR: simonepri (https://github.com/simonepri/)
- *
- * FIX: GangZoneCreate
- * PROBLEM: Gang zones bug on the main map for players at certain angles
- * relative to them.
- * SOLUTION: Set a non floating value for the gang zone co-ordinate.
- * SEE: "FIXES_GangZoneCreate".
- * AUTHOR: simonepri (https://github.com/simonepri/)
- * AUTHOR: Y_Less (https://github.com/Y-Less/)
- *
- * FIX: SPECIAL_ACTION_PISSING
- * PROBLEM: "SPECIAL_ACTION_PISSING" isn't defined by default.
- * SOLUTION: Define it.
- * SEE: N/A.
- * AUTHOR: simonepri (https://github.com/simonepri/)
- *
- * FIX: IsValidVehicle
- * PROBLEM: "IsValidVehicle" isn't defined by default.
- * SOLUTION: Define it.
- * SEE: N/A.
- * AUTHOR: simonepri (https://github.com/simonepri/)
- *
- * FIX: ApplyAnimation
- * PROBLEM: Passing an invalid animation library in ApplyAnimation causes a
- * client crash for streamed in players.
- * SOLUTION: Block ApplyAnimation when an invalid library is passed.
- * SEE: "FIXES_ApplyAnimation".
- * AUTHOR: simonepri (https://github.com/simonepri/)
- *
- * FIX: ApplyAnimation_2
- * PROBLEM: First time a library is used, it does nothing.
- * SOLUTION: Apply animations twice when first using a library.
- * SEE: "FIXES_ApplyAnimation".
- * AUTHOR: simonepri (https://github.com/simonepri/)
- * AUTHOR: Lordzy (https://github.com/Lordzy/)
- * AUTHOR: Y_Less (https://github.com/Y-Less/)
- *
- * FIX: ApplyActorAnimation
- * PROBLEM: Passing an invalid animation library in ApplyAnimation causes a
- * client crash for streamed in players.
- * SOLUTION: Block ApplyActorAnimation when an invalid library is passed.
- * SEE: "FIXES_ApplyActorAnimation".
- * AUTHOR: simonepri (https://github.com/simonepri/)
- * AUTHOR: ziggi (https://github.com/ziggi/)
- *
- * FIX: ApplyActorAnimation_2
- * PROBLEM: First time a library is used, it does nothing.
- * SOLUTION: Apply animations twice when first using a library.
- * SEE: "FIXES_ApplyActorAnimation".
- * AUTHOR: simonepri (https://github.com/simonepri/)
- * AUTHOR: Lordzy (https://github.com/Lordzy/)
- * AUTHOR: Y_Less (https://github.com/Y-Less/)
- * AUTHOR: ziggi (https://github.com/ziggi/)
- *
- * FIX: OnPlayerSpawn
- * PROBLEM: San Andreas deducts $100 from players.
- * SOLUTION: Give them it back.
- * SEE: "OnPlayerSpawn".
- * AUTHOR: Y_Less (https://github.com/Y-Less/)
- *
- * FIX: GetGravity
- * PROBLEM: "GetGravity" isn't defined by default.
- * SOLUTION: Define it.
- * SEE: N/A.
- * AUTHOR: Whitetiger (https://github.com/Whitetigerswt)
- * POST: http://forum.sa-mp.com/showpost.php?p=1706447
- *
- * FIX: gpci
- * PROBLEM: "gpci" isn't defined by default.
- * SOLUTION: Define it.
- * SEE: N/A.
- * AUTHOR: simonepri (https://github.com/simonepri/)
- * POST: http://pastebin.com/VQSGpbSm
- *
- * FIX: Natives
- * PROBLEM: Several natives are included by default, this enables or disables
- * them all. Therefore this is an umbrella fix for several fixes.
- * SOLUTION: Define them.
- * SEE: "FIX_GetGravity", "FIX_gpci", "FIX_IsValidVehicle".
- * AUTHOR: Y_Less (https://github.com/Y-Less/)
- *
- * FIX: OnPlayerConnect
- * PROBLEM: This function isn't called for players when a filterscript starts.
- * SOLUTION: Call it for all connected players.
- * SEE: "FIXES_OnFilterScriptInit".
- * AUTHOR: Y_Less (https://github.com/Y-Less/)
- *
- * FIX: OnPlayerDisconnect
- * PROBLEM: This function isn't called for players when a filterscript ends.
- * SOLUTION: Call it for all connected players.
- * SEE: "FIXES_OnFilterScriptExit".
- * AUTHOR: Y_Less (https://github.com/Y-Less/)
- *
- * FIX: GameText
- * PROBLEM: Several styles do not display for the time specified.
- * SOLUTION: Recreate the styles in Text Draws and use those instead.
- * SEE: "FIXES_GameTextForAll", "FIXES_GameTextForPlayer".
- * AUTHOR: Y_Less (https://github.com/Y-Less/)
- *
- * FIX: GameTextStyles
- * PROBLEM: San Andreas has fixed styles for area and vehicle names, but they
- * are not included in the GameText styles list.
- * SOLUTION: Add them. DEFAULTS TO FALSE.
- * SEE: "FIXES_GameTextForAll", "FIXES_GameTextForPlayer".
- * AUTHOR: Y_Less (https://github.com/Y-Less/)
- *
- * FIX: HideGameText
- * PROBLEM: There is no "HideGameTextForXYZ" function.
- * SOLUTION: Show a single space for a game text. DEFAULTS TO FALSE.
- * SEE: "FIXES_HideGameTextForAll", "FIXES_HideGameTextForPlayer".
- * AUTHOR: Y_Less (https://github.com/Y-Less/)
- *
- * FIX: BODYPARTS
- * PROBLEM: The bodyparts to be used in OnPlayer(Take/Give)Damage are not
- * defined by default
- * SOLUTION: Define it.
- * SEE: N/A.
- * AUTHOR: Whitetiger (https://github.com/Whitetigerswt)
- *
- * FIX: CAMERAMODES
- * PROBLEM: The camera modes for GetPlayerCameraMode are not defined by
- * default.
- * SOLUTION: Define it.
- * SEE: N/A.
- * AUTHOR: Whitetiger (https://github.com/Whitetigerswt)
- * POST: http://forum.sa-mp.com/showpost.php?p=1309730
- *
- * FIX: SetPlayerCamera
- * PROBLEM: Using the camera functions directly after enabling spectator mode
- * doesn't work.
- * SOLUTION: Defer them.
- * SEE: "FIXES_SetPlayerCameraPos", "FIXES_SetPlayerCameraLookAt",
- * "FIXES_TogglePlayerSpectating".
- * AUTHOR: Emmet_ (https://github.com/emmet-jones)
- *
- * FIX: SetPlayerTime
- * PROBLEM: Using this function under "OnPlayerConnect" doesn't work.
- * SOLUTION: Defer it.
- * SEE: "FIXES_SetPlayerTime"
- * AUTHOR: Emmet_ (https://github.com/emmet-jones)
- *
- * FIX: OnPlayerRequestClass
- * PROBLEM: Random blunts and bottles sometimes appear in class selection.
- * SOLUTION: Call "RemoveBuildingForPlayer".
- * SEE: "OnPlayerRequestClass"
- * AUTHOR: Y_Less (https://github.com/Y-Less/)
- *
- * FIX: SetPlayerColor
- * PROBLEM: If used under OnPlayerConnect, the affecting player will not
- * see the color in the TAB menu.
- * SOLUTION: Defer it.
- * SEE: "FIXES_SetPlayerColor"
- * AUTHOR: Emmet_ (https://github.com/emmet-jones)
- * POST: http://forum.sa-mp.com/showthread.php?t=452407
- *
- * FIX: FileMaths
- * PROBLEM: You can write gibberish like "File:a; ++a;".
- * SOLUTION: Remove the operators.
- * SEE: "File:operator"
- * AUTHOR: Y_Less (https://github.com/Y-Less/)
- *
- * FIX: GetPlayerWeaponData
- * PROBLEM: Old weapons with no ammo left are still returned.
- * SOLUTION: Set "weapons" to 0. DEFAULTS TO FALSE!
- * SEE: "FIXES_GetPlayerWeaponData"
- * AUTHOR: Y_Less (https://github.com/Y-Less/)
- * POST: http://forum.sa-mp.com/showthread.php?t=567400
- *
- * FIX: strcmp
- * PROBLEM: Return 0 if anyone of the string is empty.
- * SOLUTION: Add a check for empty string.
- * SEE: "FIXES_strcmp".
- * AUTHOR: Y_Less (https://github.com/Y-Less)
- *
- * FIX: GetPVarString
- * PROBLEM: Wrong symbol code for symbols with code 128 and above.
- * SOLUTION: Use logical conjunction on symbol and 0xFF.
- * SEE: "FIXES_GetPVarString".
- * AUTHOR: ziggi (https://github.com/ziggi)
- * AUTHOR: Mutha_X
- * AUTHOR: Daniel_Cortez (https://github.com/Daniel-Cortez)
- * POST: http://forum.sa-mp.com/showthread.php?t=572724&page=11
- * POST: http://pro-pawn.ru/showthread.php?13007
- *
- * FIX: GetSVarString
- * PROBLEM: Wrong symbol code for symbols with code 128 and above.
- * SOLUTION: Use logical conjunction on symbol and 0xFF.
- * SEE: "FIXES_GetSVarString".
- * AUTHOR: ziggi (https://github.com/ziggi)
- * AUTHOR: Mutha_X
- * AUTHOR: Daniel_Cortez (https://github.com/Daniel-Cortez)
- * POST: http://forum.sa-mp.com/showthread.php?t=572724&page=11
- * POST: http://pro-pawn.ru/showthread.php?13007
- *
- * FIX: toupper
- * PROBLEM: Not working on Linux for symbols with code 128 and above.
- * SOLUTION: Recreate the function.
- * SEE: "FIXES_toupper".
- * AUTHOR: ziggi (https://github.com/ziggi)
- * POST: http://pro-pawn.ru/showthread.php?13466&p=72954#post72954
- *
- * FIX: tolower
- * PROBLEM: Not working on Linux for symbols with code 128 and above.
- * SOLUTION: Recreate the function.
- * SEE: "FIXES_tolower".
- * AUTHOR: ziggi (https://github.com/ziggi)
- * POST: http://pro-pawn.ru/showthread.php?13466&p=72954#post72954
- *
- * ==============
- * STYLE RULES:
- * ==============
- *
- * All globals should be "static stock" whenever possible (so they can only be
- * accessed from this one file).
- *
- * Statics must start with "FIXES_gs", and all other globals with "FIXES_g".
- *
- * All functions not overriding existing functions must start with "FIXES_".
- *
- * Macros must be upper case, use underscores, and start "FIXES_":
- * "FIXES_LIKE_THIS".
- *
- * Functions should be upper camel case (as the original functions are)
- * "FIXES_LikeThis".
- *
- * Globals (after the prefix) should be upper camel case "LikeThis", and locals
- * lower camel case "likeThis".
- *
- * ALS should be used to hook functions and callbacks. See this topic for more
- * details:
- *
- * http://forum.sa-mp.com/showthread.php?t=570910
- *
- * The ALS prefix for chaining is "FIXES_".
- *
- * When redefining a native, add a "BAD_" external name declaration with the
- * "_ALS_" definition so that others may use the original native if they so
- * desire (with the caveat that it may break all fixes). Note the "BAD_"
- * name is meant to indicate the possibility of breaking the fix, not a
- * comment on the original native function.
- *
- * The ALS hook defines used here are a little different to the normal ones as
- * this file assumes that it is always first. The pattern is:
- *
- * #if defined _ALS_NameOfFixHere
- * #error _ALS_NameOfFixHere defined
- * #endif
- * native BAD_NameOfFixHere(params) = NameOfFixHere;
- *
- * #if FIX_NameOfFixHere
- * stock FIXES_NameOfFixHere(params)
- * {
- * return 0;
- * }
- *
- * #define _ALS_NameOfFixHere
- * #define NameOfFixHere FIXES_NameOfFixHere
- * #endif
- *
- * A copyable version of this pattern is at the end of the file.
- *
- * Enums start with "E_" or "e_" depending on type, then follow rules for
- * macros.
- *
- * NO libraries should be included - not even the default SA:MP ones. Let the
- * user do it.
- *
- * Due to the above rule, you cannot assume any third party libraries AT ALL, so
- * do not use them. This can lead to some code duplication, but also means
- * that the version of the code used here can be tailored for optimisations.
- *
- * Certain terms may be shortened when dealing with long callback names to avoid
- * compile truncation warnings (max symbol length is 31). Current list:
- *
- * "Checkpoint" -> "CP"
- * "Update" -> "Upd"
- * "TextDraw" -> "TD"
- * "Object" -> "Obj"
- * "Player" -> "P"
- *
- * Document all fixes at the top of the file, and highlight code.
- *
- * 4 space TABS - do not edit this file in PAWNO unless you know how to correct
- * the indentation.
- *
- * All rules have exceptions, but they must be justifiable. For example
- * "IS_FILTERSCRIPT" is a global variable, but is not called
- * "FIXES_gIsFilterscript" to better match the "FILTERSCRIPT" macro it
- * replaces. Now a macro for "_FIXES_gIsFilterscript".
- *
- * Variables which need to be fully global (i.e. not "static"), but should not
- * actually be used by other people (e.g. appear inside a macro) should be
- * prefixed with "_FIXES" instead of "FIXES" to indicate their private use.
- *
- * No comments beyond the end of column 80 (where the line in "PAWNO" is).
- *
- * If a bug is fixed in some version of the server it can be conditionally
- * included here. This is done by checking for the existance of a native
- * function introduced in the same server version. For example
- * "TogglePlayerControllable" was fixed in 0.3eRC6, the same time as the
- * "SetObjectMaterial" native was introduced, thus the inclusion becomes:
- *
- * #if !defined FIX_TogglePlayerControllable
- * #if defined SetObjectMaterial
- * #define FIX_TogglePlayerControllable (0)
- * #else
- * #define FIX_TogglePlayerControllable (1)
- * #endif
- * #elseif _FIXES_IS_UNSET(FIX_TogglePlayerControllable)
- * #undef FIX_TogglePlayerControllable
- * #define FIX_TogglePlayerControllable (2)
- * #endif
- *
- * This only includes this fix if that native doesn't exist. A copyable
- * version of this pattern is at the end of the file.
- *
- * To reduce general memory consumption, strings in this include are stored
- * globally in constant arrays and referenced. This is EXACTLY as fast as
- * using the string constants directly, but means that strings are not
- * stored in the assembly multiple times (unless the string is only used
- * once, in which case it's more work for no gain). See this post for more
- * details:
- *
- * http://forum.sa-mp.com/showpost.php?p=1795601
- *
- * DO NOT EDIT THIS FILE IN PAWNO OR ON GITHUB. Both mess up the spacing -
- * GitHub in an almost irreversible way (except for the fact that nothing is
- * irreversible in source control. Pawno spacing is less tricky to solve,
- * and can be worked around if you know when it uses spaces and tabs - in
- * short, always write code first THEN indent and you won't have a problem
- * (in that editor at least, that is normally a bad way to write code).
- *
- * Documentation explanation:
- *
- * FIX: <Short name>
- * PROBLEM: <Description of problem>
- * SOLUTION: <Description of solution>
- * SEE: <List of relevant functions>
- * AUTHOR: <Person who wrote the fix>
- * POST: <Optional link to the original post where applicable>
- * FIXED IN: <Optional server version of official fix where applicable>
- *
- */
- #if defined _INC_SAMP_Community_fixes
- #endinput
- #endif
- #define _INC_SAMP_Community_fixes
- #if !defined _inc_fixes
- #define _inc_fixes
- #endif
- #define _FIXES_IS_UNSET(%0) ((2*%0-1+1)==-1)
- // We can add server version compiler code here to only compile fixes that apply
- // to the version of the includes for which the user is compiling.
- #if !defined FIX_GetPlayerColour
- #if defined FIX_GetPlayerColor
- #if _FIXES_IS_UNSET(FIX_GetPlayerColor)
- #define FIX_GetPlayerColour (2)
- #else
- #define FIX_GetPlayerColour (FIX_GetPlayerColor)
- #endif
- #else
- #define FIX_GetPlayerColour (1)
- #endif
- #elseif _FIXES_IS_UNSET(FIX_GetPlayerColour)
- #undef FIX_GetPlayerColour
- #define FIX_GetPlayerColour (2)
- #endif
- #if !defined FIX_FILTERSCRIPT
- #define FIX_FILTERSCRIPT (1)
- #elseif _FIXES_IS_UNSET(FIX_FILTERSCRIPT)
- #undef FIX_FILTERSCRIPT
- #define FIX_FILTERSCRIPT (2)
- #endif
- #if !defined FIX_SpawnPlayer
- #define FIX_SpawnPlayer (1)
- #elseif _FIXES_IS_UNSET(FIX_SpawnPlayer)
- #undef FIX_SpawnPlayer
- #define FIX_SpawnPlayer (2)
- #endif
- #if !defined FIX_SetPlayerName
- #define FIX_SetPlayerName (1)
- #elseif _FIXES_IS_UNSET(FIX_SetPlayerName)
- #undef FIX_SetPlayerName
- #define FIX_SetPlayerName (2)
- #endif
- #if !defined FIX_GetPlayerSkin
- #define FIX_GetPlayerSkin (1)
- #elseif _FIXES_IS_UNSET(FIX_GetPlayerSkin)
- #undef FIX_GetPlayerSkin
- #define FIX_GetPlayerSkin (2)
- #endif
- #if !defined FIX_GetWeaponName
- #if defined GetVehicleParamsSirenState
- #define FIX_GetWeaponName (0)
- #else
- #define FIX_GetWeaponName (1)
- #endif
- #elseif _FIXES_IS_UNSET(FIX_GetWeaponName)
- #undef FIX_GetWeaponName
- #define FIX_GetWeaponName (2)
- #endif
- #if !defined FIX_SetPlayerWorldBounds
- #define FIX_SetPlayerWorldBounds (1)
- #elseif _FIXES_IS_UNSET(FIX_SetPlayerWorldBounds)
- #undef FIX_SetPlayerWorldBounds
- #define FIX_SetPlayerWorldBounds (2)
- #endif
- #if !defined FIX_TogglePlayerControllable
- #if defined SetObjectMaterial
- #define FIX_TogglePlayerControllable (0)
- #else
- #define FIX_TogglePlayerControllable (1)
- #endif
- #elseif _FIXES_IS_UNSET(FIX_TogglePlayerControllable)
- #undef FIX_TogglePlayerControllable
- #define FIX_TogglePlayerControllable (2)
- #endif
- #if !defined FIX_HydraSniper
- #define FIX_HydraSniper (1)
- #elseif _FIXES_IS_UNSET(FIX_HydraSniper)
- #undef FIX_HydraSniper
- #define FIX_HydraSniper (2)
- #endif
- #if !defined FIX_IsPlayerInCheckpoint
- #define FIX_IsPlayerInCheckpoint (1)
- #elseif _FIXES_IS_UNSET(FIX_IsPlayerInCheckpoint)
- #undef FIX_IsPlayerInCheckpoint
- #define FIX_IsPlayerInCheckpoint (2)
- #endif
- #if !defined FIX_IsPlayerInRaceCheckpoint
- #define FIX_IsPlayerInRaceCheckpoint (1)
- #elseif _FIXES_IS_UNSET(FIX_IsPlayerInRaceCheckpoint)
- #undef FIX_IsPlayerInRaceCheckpoint
- #define FIX_IsPlayerInRaceCheckpoint (2)
- #endif
- #if !defined FIX_GetPlayerWeapon
- #define FIX_GetPlayerWeapon (1)
- #elseif _FIXES_IS_UNSET(FIX_GetPlayerWeapon)
- #undef FIX_GetPlayerWeapon
- #define FIX_GetPlayerWeapon (2)
- #endif
- #if !defined FIX_PutPlayerInVehicle
- #define FIX_PutPlayerInVehicle (1)
- #elseif _FIXES_IS_UNSET(FIX_PutPlayerInVehicle)
- #undef FIX_PutPlayerInVehicle
- #define FIX_PutPlayerInVehicle (2)
- #endif
- #if !defined FIX_KEY_AIM
- #if defined KEY_AIM
- #define FIX_KEY_AIM (0)
- #else
- #define FIX_KEY_AIM (1)
- #endif
- #elseif _FIXES_IS_UNSET(FIX_KEY_AIM)
- #undef FIX_KEY_AIM
- #define FIX_KEY_AIM (2)
- #endif
- #if !defined FIX_SPECIAL_ACTION_PISSING
- #if defined SPECIAL_ACTION_PISSING
- #define FIX_SPECIAL_ACTION_PISSING (0)
- #else
- #define FIX_SPECIAL_ACTION_PISSING (1)
- #endif
- #elseif _FIXES_IS_UNSET(FIX_SPECIAL_ACTION_PISSING)
- #undef FIX_SPECIAL_ACTION_PISSING
- #define FIX_SPECIAL_ACTION_PISSING (2)
- #endif
- #if !defined FIX_Natives
- #define FIX_Natives (1)
- #elseif _FIXES_IS_UNSET(FIX_Natives)
- #undef FIX_Natives
- #define FIX_Natives (2)
- #endif
- #if !defined FIX_IsValidVehicle
- #if defined IsValidVehicle
- #define FIX_IsValidVehicle (0)
- #else
- #define FIX_IsValidVehicle (FIX_Natives)
- #endif
- #elseif _FIXES_IS_UNSET(FIX_IsValidVehicle)
- #undef FIX_IsValidVehicle
- #define FIX_IsValidVehicle (2)
- #endif
- #if !defined FIX_GetGravity
- #if defined GetGravity
- #define FIX_GetGravity (0)
- #else
- #define FIX_GetGravity (FIX_Natives)
- #endif
- #elseif _FIXES_IS_UNSET(FIX_GetGravity)
- #undef FIX_GetGravity
- #define FIX_GetGravity (2)
- #endif
- #if !defined FIX_gpci
- #if defined gpci
- #define FIX_gpci (0)
- #else
- #define FIX_gpci (FIX_Natives)
- #endif
- #elseif _FIXES_IS_UNSET(FIX_gpci)
- #undef FIX_gpci
- #define FIX_gpci (2)
- #endif
- #if !defined FIX_BODYPARTS
- #if defined BODY_PART_TORSO
- #define FIX_BODYPARTS (0)
- #else
- #define FIX_BODYPARTS (1)
- #endif
- #elseif _FIXES_IS_UNSET(FIX_BODYPARTS)
- #undef FIX_BODYPARTS
- #define FIX_BODYPARTS (2)
- #endif
- #if !defined FIX_CAMERAMODES
- #if defined CAM_MODE_NONE
- #define FIX_CAMERAMODES (0)
- #else
- #define FIX_CAMERAMODES (1)
- #endif
- #elseif _FIXES_IS_UNSET(FIX_CAMERAMODES)
- #undef FIX_CAMERAMODES
- #define FIX_CAMERAMODES (2)
- #endif
- #if !defined FIX_DriveBy
- #define FIX_DriveBy (1)
- #elseif _FIXES_IS_UNSET(FIX_DriveBy)
- #undef FIX_DriveBy
- #define FIX_DriveBy (2)
- #endif
- #if !defined FIX_SetPlayerCheckpoint
- #define FIX_SetPlayerCheckpoint (1)
- #elseif _FIXES_IS_UNSET(FIX_SetPlayerCheckpoint)
- #undef FIX_SetPlayerCheckpoint
- #define FIX_SetPlayerCheckpoint (2)
- #endif
- #if !defined FIX_SetPlayerRaceCheckpoint
- #define FIX_SetPlayerRaceCheckpoint (1)
- #elseif _FIXES_IS_UNSET(FIX_SetPlayerRaceCheckpoint)
- #undef FIX_SetPlayerRaceCheckpoint
- #define FIX_SetPlayerRaceCheckpoint (2)
- #endif
- #if !defined FIX_TextDrawCreate
- #define FIX_TextDrawCreate (1)
- #elseif _FIXES_IS_UNSET(FIX_TextDrawCreate)
- #undef FIX_TextDrawCreate
- #define FIX_TextDrawCreate (2)
- #endif
- #if !defined FIX_TextDrawSetString
- #define FIX_TextDrawSetString (1)
- #elseif _FIXES_IS_UNSET(FIX_TextDrawSetString)
- #undef FIX_TextDrawSetString
- #define FIX_TextDrawSetString (2)
- #endif
- #if !defined FIX_AllowInteriorWeapons
- #define FIX_AllowInteriorWeapons (1)
- #elseif _FIXES_IS_UNSET(FIX_AllowInteriorWeapons)
- #undef FIX_AllowInteriorWeapons
- #define FIX_AllowInteriorWeapons (2)
- #endif
- #if !defined FIX_OnPlayerEnterVehicle
- #if defined OnPlayerClickMap
- #define FIX_OnPlayerEnterVehicle (0)
- #else
- #define FIX_OnPlayerEnterVehicle (1)
- #endif
- #elseif _FIXES_IS_UNSET(FIX_OnPlayerEnterVehicle)
- #undef FIX_OnPlayerEnterVehicle
- #define FIX_OnPlayerEnterVehicle (2)
- #endif
- #if !defined FIX_OnPlayerEnterVehicle_2
- #define FIX_OnPlayerEnterVehicle_2 (1)
- #elseif _FIXES_IS_UNSET(FIX_OnPlayerEnterVehicle)
- #undef FIX_OnPlayerEnterVehicle_2
- #define FIX_OnPlayerEnterVehicle_2 (2)
- #endif
- #if !defined FIX_AllowTeleport
- #if defined OnPlayerClickMap
- #define FIX_AllowTeleport (1)
- #else
- #define FIX_AllowTeleport (0)
- #endif
- #elseif _FIXES_IS_UNSET(FIX_AllowTeleport)
- #undef FIX_AllowTeleport
- #define FIX_AllowTeleport (2)
- #endif
- #if !defined FIX_SetPlayerSpecialAction
- #define FIX_SetPlayerSpecialAction (1)
- #elseif _FIXES_IS_UNSET(FIX_SetPlayerSpecialAction)
- #undef FIX_SetPlayerSpecialAction
- #define FIX_SetPlayerSpecialAction (2)
- #endif
- #if !defined FIX_ClearAnimations
- #define FIX_ClearAnimations (1)
- #elseif _FIXES_IS_UNSET(FIX_ClearAnimations)
- #undef FIX_ClearAnimations
- #define FIX_ClearAnimations (2)
- #endif
- #if !defined FIX_ClearAnimations_2
- #define FIX_ClearAnimations_2 (1)
- #elseif _FIXES_IS_UNSET(FIX_ClearAnimations_2)
- #undef FIX_ClearAnimations_2
- #define FIX_ClearAnimations_2 (2)
- #endif
- #if !defined FIX_GangZoneCreate
- #define FIX_GangZoneCreate (1)
- #elseif _FIXES_IS_UNSET(FIX_GangZoneCreate)
- #undef FIX_GangZoneCreate
- #define FIX_GangZoneCreate (2)
- #endif
- #if !defined FIX_OnDialogResponse
- #if defined GetVehicleModelInfo
- #define FIX_OnDialogResponse (0)
- #else
- #define FIX_OnDialogResponse (1)
- #endif
- #elseif _FIXES_IS_UNSET(FIX_OnDialogResponse)
- #undef FIX_OnDialogResponse
- #define FIX_OnDialogResponse (2)
- #endif
- #if !defined FIX_GetPlayerDialog
- #define FIX_GetPlayerDialog (0)
- #elseif _FIXES_IS_UNSET(FIX_GetPlayerDialog)
- #undef FIX_GetPlayerDialog
- #define FIX_GetPlayerDialog (2)
- #endif
- #if !defined FIX_PlayerDialogResponse
- #define FIX_PlayerDialogResponse (1)
- #elseif _FIXES_IS_UNSET(FIX_PlayerDialogResponse)
- #undef FIX_PlayerDialogResponse
- #define FIX_PlayerDialogResponse (2)
- #endif
- #if !defined FIX_SetSpawnInfo
- #if defined GetPlayerVersion
- #define FIX_SetSpawnInfo (0)
- #else
- #define FIX_SetSpawnInfo (1)
- #endif
- #elseif _FIXES_IS_UNSET(FIX_SetSpawnInfo)
- #undef FIX_SetSpawnInfo
- #define FIX_SetSpawnInfo (2)
- #endif
- #if !defined FIX_SetPlayerSkin
- #define FIX_SetPlayerSkin (1)
- #elseif _FIXES_IS_UNSET(FIX_SetPlayerSkin)
- #undef FIX_SetPlayerSkin
- #define FIX_SetPlayerSkin (2)
- #endif
- #if !defined FIX_HideMenuForPlayer
- #define FIX_HideMenuForPlayer (1)
- #elseif _FIXES_IS_UNSET(FIX_HideMenuForPlayer)
- #undef FIX_HideMenuForPlayer
- #define FIX_HideMenuForPlayer (2)
- #endif
- #if !defined FIX_valstr
- #define FIX_valstr (1)
- #elseif _FIXES_IS_UNSET(FIX_valstr)
- #undef FIX_valstr
- #define FIX_valstr (2)
- #endif
- #if !defined FIX_file_inc
- #define FIX_file_inc (0)
- #elseif _FIXES_IS_UNSET(FIX_file_inc)
- #undef FIX_file_inc
- #define FIX_file_inc (2)
- #endif
- #if !defined FIX_fclose
- #define FIX_fclose (FIX_file_inc)
- #elseif _FIXES_IS_UNSET(FIX_fclose)
- #undef FIX_fclose
- #define FIX_fclose (2)
- #endif
- #if !defined FIX_fwrite
- #define FIX_fwrite (FIX_file_inc)
- #elseif _FIXES_IS_UNSET(FIX_fwrite)
- #undef FIX_fwrite
- #define FIX_fwrite (2)
- #endif
- #if !defined FIX_fread
- #define FIX_fread (FIX_file_inc)
- #elseif _FIXES_IS_UNSET(FIX_fread)
- #undef FIX_fread
- #define FIX_fread (2)
- #endif
- #if !defined FIX_fputchar
- #define FIX_fputchar (FIX_file_inc)
- #elseif _FIXES_IS_UNSET(FIX_fputchar)
- #undef FIX_fputchar
- #define FIX_fputchar (2)
- #endif
- #if !defined FIX_fgetchar
- #define FIX_fgetchar (FIX_file_inc)
- #elseif _FIXES_IS_UNSET(FIX_fgetchar)
- #undef FIX_fgetchar
- #define FIX_fgetchar (2)
- #endif
- #if !defined FIX_fblockwrite
- #define FIX_fblockwrite (FIX_file_inc)
- #elseif _FIXES_IS_UNSET(FIX_fblockwrite)
- #undef FIX_fblockwrite
- #define FIX_fblockwrite (2)
- #endif
- #if !defined FIX_fblockread
- #define FIX_fblockread (FIX_file_inc)
- #elseif _FIXES_IS_UNSET(FIX_fblockread)
- #undef FIX_fblockread
- #define FIX_fblockread (2)
- #endif
- #if !defined FIX_fseek
- #define FIX_fseek (FIX_file_inc)
- #elseif _FIXES_IS_UNSET(FIX_fseek)
- #undef FIX_fseek
- #define FIX_fseek (2)
- #endif
- #if !defined FIX_flength
- #define FIX_flength (FIX_file_inc)
- #elseif _FIXES_IS_UNSET(FIX_flength)
- #undef FIX_flength
- #define FIX_flength (2)
- #endif
- #if !defined FIX_IsPlayerAttachedObjSlotUsed
- #define FIX_IsPlayerAttachedObjSlotUsed (1)
- #elseif _FIXES_IS_UNSET(FIX_IsPlayerAttachedObjSlotUsed)
- #undef FIX_IsPlayerAttachedObjSlotUsed
- #define FIX_IsPlayerAttachedObjSlotUsed (2)
- #endif
- #if !defined FIX_SetPlayerAttachedObject
- #define FIX_SetPlayerAttachedObject (1)
- #elseif _FIXES_IS_UNSET(FIX_SetPlayerAttachedObject)
- #undef FIX_SetPlayerAttachedObject
- #define FIX_SetPlayerAttachedObject (2)
- #endif
- #if !defined FIX_OnPlayerDeath
- #define FIX_OnPlayerDeath (1)
- #elseif _FIXES_IS_UNSET(FIX_OnPlayerDeath)
- #undef FIX_OnPlayerDeath
- #define FIX_OnPlayerDeath (2)
- #endif
- #if !defined FIX_strins
- #define FIX_strins (1)
- #elseif _FIXES_IS_UNSET(FIX_strins)
- #undef FIX_strins
- #define FIX_strins (2)
- #endif
- #if !defined FIX_IsPlayerConnected
- #define FIX_IsPlayerConnected (1)
- #elseif _FIXES_IS_UNSET(FIX_IsPlayerConnected)
- #undef FIX_IsPlayerConnected
- #define FIX_IsPlayerConnected (2)
- #endif
- #if !defined FIX_OnPlayerCommandText
- #define FIX_OnPlayerCommandText (1)
- #elseif _FIXES_IS_UNSET(FIX_OnPlayerCommandText)
- #undef FIX_OnPlayerCommandText
- #define FIX_OnPlayerCommandText (2)
- #endif
- #if !defined FIX_TrainExit
- #define FIX_TrainExit (1)
- #elseif _FIXES_IS_UNSET(FIX_TrainExit)
- #undef FIX_TrainExit
- #define FIX_TrainExit (2)
- #endif
- #if !defined FIX_Kick
- #if defined EnableVehicleFriendlyFire
- #define FIX_Kick (0)
- #else
- #define FIX_Kick (1)
- #endif
- #elseif _FIXES_IS_UNSET(FIX_Kick)
- #undef FIX_Kick
- #define FIX_Kick (2)
- #endif
- #if !defined FIX_OnVehicleMod
- #define FIX_OnVehicleMod (1)
- #elseif _FIXES_IS_UNSET(FIX_OnVehicleMod)
- #undef FIX_OnVehicleMod
- #define FIX_OnVehicleMod (2)
- #endif
- #if !defined FIX_random
- #define FIX_random (0)
- #elseif _FIXES_IS_UNSET(FIX_random)
- #undef FIX_random
- #define FIX_random (2)
- #endif
- #if !defined FIX_sleep
- #define FIX_sleep (1)
- #elseif _FIXES_IS_UNSET(FIX_sleep)
- #undef FIX_sleep
- #define FIX_sleep (2)
- #endif
- #if !defined FIX_Menus
- #define FIX_Menus (1)
- #elseif _FIXES_IS_UNSET(FIX_Menus)
- #undef FIX_Menus
- #define FIX_Menus (2)
- #endif
- #if !defined FIX_AddMenuItem
- #define FIX_AddMenuItem (FIX_Menus)
- #elseif _FIXES_IS_UNSET(FIX_AddMenuItem)
- #undef FIX_AddMenuItem
- #define FIX_AddMenuItem (2)
- #endif
- #if !defined FIX_SetMenuColumnHeader
- #define FIX_SetMenuColumnHeader (FIX_Menus)
- #elseif _FIXES_IS_UNSET(FIX_SetMenuColumnHeader)
- #undef FIX_SetMenuColumnHeader
- #define FIX_SetMenuColumnHeader (2)
- #endif
- #if !defined FIX_ShowMenuForPlayer
- #define FIX_ShowMenuForPlayer (FIX_Menus)
- #elseif _FIXES_IS_UNSET(FIX_ShowMenuForPlayer)
- #undef FIX_ShowMenuForPlayer
- #define FIX_ShowMenuForPlayer (2)
- #endif
- #if !defined FIX_HideMenuForPlayer
- #define FIX_HideMenuForPlayer (FIX_Menus)
- #elseif _FIXES_IS_UNSET(FIX_HideMenuForPlayer)
- #undef FIX_HideMenuForPlayer
- #define FIX_HideMenuForPlayer (2)
- #endif
- #if !defined FIX_GetPlayerMenu
- #define FIX_GetPlayerMenu (1)
- #elseif _FIXES_IS_UNSET(FIX_GetPlayerMenu)
- #undef FIX_GetPlayerMenu
- #define FIX_GetPlayerMenu (2)
- #endif
- #if !defined FIX_HideMenuForPlayer_2
- #define FIX_HideMenuForPlayer_2 (0)
- #elseif _FIXES_IS_UNSET(FIX_HideMenuForPlayer_2)
- #undef FIX_HideMenuForPlayer_2
- #define FIX_HideMenuForPlayer_2 (2)
- #elseif FIX_HideMenuForPlayer_2 && !FIX_GetPlayerMenu
- #error FIX_HideMenuForPlayer_2 requires FIX_GetPlayerMenu
- #endif
- #if !defined FIX_DisableMenu
- #define FIX_DisableMenu (FIX_Menus)
- #elseif _FIXES_IS_UNSET(FIX_DisableMenu)
- #undef FIX_DisableMenu
- #define FIX_DisableMenu (2)
- #endif
- #if !defined FIX_DisableMenuRow
- #define FIX_DisableMenuRow (FIX_Menus)
- #elseif _FIXES_IS_UNSET(FIX_DisableMenuRow)
- #undef FIX_DisableMenuRow
- #define FIX_DisableMenuRow (2)
- #endif
- #if FIX_Menus || FIX_AddMenuItem || FIX_SetMenuColumnHeader || FIX_ShowMenuForPlayer || FIX_HideMenuForPlayer || FIX_DisableMenu || FIX_DisableMenuRow
- #define _FIX_Menus (1)
- #else
- #define _FIX_Menus (2)
- #endif
- #if !defined FIX_GetPlayerInterior
- #define FIX_GetPlayerInterior (1)
- #elseif _FIXES_IS_UNSET(FIX_GetPlayerInterior)
- #undef FIX_GetPlayerInterior
- #define FIX_GetPlayerInterior (2)
- #endif
- #if !defined FIX_ApplyAnimation
- #define FIX_ApplyAnimation (1)
- #elseif _FIXES_IS_UNSET(FIX_ApplyAnimation)
- #undef FIX_ApplyAnimation
- #define FIX_ApplyAnimation (2)
- #endif
- #if !defined FIX_ApplyAnimation_2
- #define FIX_ApplyAnimation_2 (1)
- #elseif _FIXES_IS_UNSET(FIX_ApplyAnimation_2)
- #undef FIX_ApplyAnimation_2
- #define FIX_ApplyAnimation_2 (2)
- #endif
- #if !defined FIX_ApplyActorAnimation
- #define FIX_ApplyActorAnimation (1)
- #elseif _FIXES_IS_UNSET(FIX_ApplyActorAnimation)
- #undef FIX_ApplyActorAnimation
- #define FIX_ApplyActorAnimation (2)
- #endif
- #if !defined FIX_ApplyActorAnimation_2
- #define FIX_ApplyActorAnimation_2 (1)
- #elseif _FIXES_IS_UNSET(FIX_ApplyActorAnimation_2)
- #undef FIX_ApplyActorAnimation_2
- #define FIX_ApplyActorAnimation_2 (2)
- #endif
- #if !defined FIX_OnPlayerSpawn
- #define FIX_OnPlayerSpawn (1)
- #elseif _FIXES_IS_UNSET(FIX_OnPlayerSpawn)
- #undef FIX_OnPlayerSpawn
- #define FIX_OnPlayerSpawn (2)
- #endif
- #if !defined FIX_GameText
- #define FIX_GameText (1)
- #elseif _FIXES_IS_UNSET(FIX_GameText)
- #undef FIX_GameText
- #define FIX_GameText (2)
- #endif
- #if !defined FIX_HideGameText
- #define FIX_HideGameText (0)
- #elseif _FIXES_IS_UNSET(FIX_HideGameText)
- #undef FIX_HideGameText
- #define FIX_HideGameText (2)
- #endif
- #if !defined FIX_GameTextStyles
- #define FIX_GameTextStyles (0)
- #elseif _FIXES_IS_UNSET(FIX_GameTextStyles)
- #undef FIX_GameTextStyles
- #define FIX_GameTextStyles (2)
- #elseif FIX_GameTextStyles && !FIX_GameText
- #error FIX_GameTextStyles requires FIX_GameText
- #endif
- #if !defined FIX_OnPlayerConnect
- #define FIX_OnPlayerConnect (1)
- #elseif _FIXES_IS_UNSET(FIX_OnPlayerConnect)
- #undef FIX_OnPlayerConnect
- #define FIX_OnPlayerConnect (2)
- #endif
- #if !defined FIX_OnPlayerDisconnect
- #define FIX_OnPlayerDisconnect (1)
- #elseif _FIXES_IS_UNSET(FIX_OnPlayerDisconnect)
- #undef FIX_OnPlayerDisconnect
- #define FIX_OnPlayerDisconnect (2)
- #endif
- #if !defined FIX_CreatePlayerTextDraw
- #define FIX_CreatePlayerTextDraw (1)
- #elseif _FIXES_IS_UNSET(FIX_CreatePlayerTextDraw)
- #undef FIX_CreatePlayerTextDraw
- #define FIX_CreatePlayerTextDraw (2)
- #endif
- #if !defined FIX_PlayerTextDrawSetString
- #define FIX_PlayerTextDrawSetString (1)
- #elseif _FIXES_IS_UNSET(FIX_PlayerTextDrawSetString)
- #undef FIX_PlayerTextDrawSetString
- #define FIX_PlayerTextDrawSetString (2)
- #endif
- #if !defined FIX_SetPlayerCamera
- #define FIX_SetPlayerCamera (1)
- #elseif _FIXES_IS_UNSET(FIX_SetPlayerCamera)
- #undef FIX_SetPlayerCamera
- #define FIX_SetPlayerCamera (2)
- #endif
- #if !defined FIX_SetPlayerTime
- #define FIX_SetPlayerTime (1)
- #elseif _FIXES_IS_UNSET(FIX_SetPlayerTime)
- #undef FIX_SetPlayerTime
- #define FIX_SetPlayerTime (2)
- #endif
- #if !defined FIX_OnPlayerRequestClass
- #define FIX_OnPlayerRequestClass (1)
- #elseif _FIXES_IS_UNSET(FIX_OnPlayerRequestClass)
- #undef FIX_OnPlayerRequestClass
- #define FIX_OnPlayerRequestClass (2)
- #endif
- #if !defined FIX_SetPlayerColour
- #if defined FIX_SetPlayerColor
- #if _FIXES_IS_UNSET(FIX_SetPlayerColor)
- #define FIX_SetPlayerColour (2)
- #else
- #define FIX_SetPlayerColour (FIX_SetPlayerColor)
- #endif
- #else
- #define FIX_SetPlayerColour (1)
- #endif
- #elseif _FIXES_IS_UNSET(FIX_SetPlayerColour)
- #undef FIX_SetPlayerColour
- #define FIX_SetPlayerColour (2)
- #endif
- #if !defined FIX_FileMaths
- #define FIX_FileMaths (1)
- #elseif _FIXES_IS_UNSET(FIX_FileMaths)
- #undef FIX_FileMaths
- #define FIX_FileMaths (2)
- #endif
- #if !defined FIX_GetPlayerWeaponData
- #define FIX_GetPlayerWeaponData (0)
- #elseif _FIXES_IS_UNSET(FIX_GetPlayerWeaponData)
- #undef FIX_GetPlayerWeaponData
- #define FIX_GetPlayerWeaponData (2)
- #endif
- #if !defined FIX_strcmp
- #define FIX_strcmp (1)
- #elseif _FIXES_IS_UNSET(FIX_strcmp)
- #undef FIX_strcmp
- #define FIX_strcmp (2)
- #endif
- #if !defined FIX_GetPVarString
- #define FIX_GetPVarString (0)
- #elseif _FIXES_IS_UNSET(FIX_GetPVarString)
- #undef FIX_GetPVarString
- #define FIX_GetPVarString (2)
- #endif
- #if !defined FIX_GetSVarString
- #define FIX_GetSVarString (0)
- #elseif _FIXES_IS_UNSET(FIX_GetSVarString)
- #undef FIX_GetSVarString
- #define FIX_GetSVarString (2)
- #endif
- #if !defined FIX_toupper
- #define FIX_toupper (1)
- #elseif _FIXES_IS_UNSET(FIX_toupper)
- #undef FIX_toupper
- #define FIX_toupper (2)
- #endif
- #if !defined FIX_tolower
- #define FIX_tolower (1)
- #elseif _FIXES_IS_UNSET(FIX_tolower)
- #undef FIX_tolower
- #define FIX_tolower (2)
- #endif
- /*
- * CHAIN_ORDER
- *
- * Allows y_hooks to call things in the correct order when it exists.
- */
- #if !defined CHAIN_ORDER
- #define CHAIN_ORDER() 0
- #endif
- /*
- * PRE_HOOK
- *
- * A method of pre-hooking callbacks to still have them called before any ones
- * re-written by y_hooks.
- */
- #define PRE_HOOK(%0) forward @CO_%0();public @CO_%0(){return CHAIN_ORDER()+1;}
- PRE_HOOK(FIXES)
- #undef CHAIN_ORDER
- #define CHAIN_ORDER @CO_FIXES
- /*
- * _FIXES_IncludeStates
- *
- * Define the "_ALS" states used by hooks.
- */
- static stock _FIXES_IncludeStates() <_ALS : _ALS_x0, _ALS : _ALS_x1, _ALS : _ALS_x2, _ALS : _ALS_x3>
- {
- }
- static stock _FIXES_IncludeStates() <_ALS : _ALS_go>
- {
- }
- /*
- * FIXES_GT_STYLE_COUNT
- *
- * The number of GameText styles recreated using TextDraw functions. This is 4
- * by default, but can be extended to 6 if you want location and vehicle styles.
- */
- #if FIX_GameText
- #if FIX_GameTextStyles
- #define FIXES_GT_STYLE_COUNT (14)
- #else
- #define FIXES_GT_STYLE_COUNT (7)
- #endif
- #endif
- /*
- * FIXES_SilentKick
- *
- * If this define is set to 1, then players will not be given a message when
- * they are kicked for cheats, instead they will just loose connection to the
- * server.
- */
- #if !defined FIXES_SilentKick
- #define FIXES_SilentKick 0
- #elseif _FIXES_IS_UNSET(FIXES_SilentKick)
- #undef FIXES_SilentKick
- #define FIXES_SilentKick 2
- #endif
- /*
- * FIXES_Debug
- *
- * If this define is set to 1, then debug printing is turned on for any
- * functions which may use it. Otherwise, the compiler entirely removes the
- * code to print anything, leaving 0 run-time overhead.
- */
- #if defined FIXES_Debug
- #if _FIXES_IS_UNSET(FIXES_Debug)
- #undef FIXES_Debug
- #elseif FIXES_Debug == 1
- #define FIXES_PRINTF(%0); print(_FIXES_gIsFilterscript ? ("* FIXES_PRINTF (FS):") : ("* FIXES_PRINTF (GM):")),printf("*** " %0);
- #else
- #undef FIXES_Debug
- #endif
- #endif
- /*
- * FIXES_UseStateHooks
- *
- * A marker to indicate that this version of fixes.inc uses state-based hooks.
- */
- #define FIXES_UseStateHooks
- /*
- * FIXES_PRINTF
- *
- * A special "printf" function only compiled when "FIXES_Debug" is set.
- */
- #if !defined FIXES_PRINTF
- #define FIXES_Debug 0
- #define FIXES_PRINTF(%0);
- #endif
- /*
- * INVALID_DIALOG_ID
- *
- * Set when a player can't see a dialog.
- */
- #if !defined INVALID_DIALOG_ID
- #define INVALID_DIALOG_ID (-1)
- #endif
- /*
- * FIXES_Single
- *
- * If this define is set to 1, then the old style include is used, with no
- * support for multiple scripts running at the same time on the server (i.e. no
- * gamemodes and filter scripts at the same time). You can only have one or the
- * other or bugs.
- */
- #if !defined FIXES_Single
- #define FIXES_Single (1)
- #elseif _FIXES_IS_UNSET(FIXES_Single)
- #undef FIXES_Single
- #define FIXES_Single (2)
- #endif
- /*
- * _FIXES_IS_IN_CHARGE
- *
- * Test to see if this script is in command or not (master).
- */
- #if FIXES_Single
- #define _FIXES_IS_IN_CHARGE(%0)
- #else
- #define _FIXES_IS_IN_CHARGE(%0) if (%0(FIXES_gsSettings & e_FIXES_SETTINGS_IN_CHARGE))
- #endif
- /*
- * E_FIXES_WORLDBOUND_DATA
- *
- * Store data for each player on their worldbound data.
- */
- enum E_FIXES_WORLDBOUND_DATA
- {
- // "Previous".
- Float:E_FIXES_WORLDBOUND_DATA_PX,
- Float:E_FIXES_WORLDBOUND_DATA_PY,
- Float:E_FIXES_WORLDBOUND_DATA_PZ,
- // "Lower".
- Float:E_FIXES_WORLDBOUND_DATA_LX,
- Float:E_FIXES_WORLDBOUND_DATA_LY,
- // "Upper".
- Float:E_FIXES_WORLDBOUND_DATA_UX,
- Float:E_FIXES_WORLDBOUND_DATA_UY
- }
- /*
- * e_FIXES_BOOLS
- *
- * Collection of boolean values for players, designed to collect multiple checks
- * in to one variable to reduce memory consumption.
- */
- enum e_FIXES_BOOLS (<<= 1)
- {
- // Handy definition for nothing set.
- e_FIXES_BOOLS_NONE = 0,
- // Does this player have worldbounds enabled?
- e_FIXES_BOOLS_WORLDBOUNDS = 1,
- e_FIXES_BOOLS_UNCONTROLLABLE,
- e_FIXES_BOOLS_PUT_IN_VEHICLE,
- e_FIXES_BOOLS_BLOCK,
- e_FIXES_BOOLS_TELEPORT,
- e_FIXES_BOOLS_CONNECTED,
- e_FIXES_BOOLS_INTERIOR,
- e_FIXES_BOOLS_PUT_IN_TRAIN,
- e_FIXES_BOOLS_KICKED,
- e_FIXES_BOOLS_ON_PLAYER_CONNECT,
- e_FIXES_BOOLS_DRIVE_BY,
- e_FIXES_BOOLS_FIRST_SPAWN,
- e_FIXES_BOOLS_FIRST_CLASS,
- e_FIXES_BOOLS_SPECTATING,
- e_FIXES_BOOLS_CP_DELAYED,
- e_FIXES_BOOLS_RACE_CP_DELAYED
- }
- /*
- * e_FIXES_SETTINGS
- *
- * Collection of boolean values for the script as a whole. Stores a variety of
- * settings that are true/false.
- */
- enum e_FIXES_SETTINGS (<<= 1)
- {
- // Handy definition for nothing set.
- e_FIXES_SETTINGS_NONE = 0,
- e_FIXES_SETTINGS_INTERIOR = 1,
- e_FIXES_SETTINGS_ADMIN_TELEPORT,
- e_FIXES_SETTINGS_IN_CHARGE,
- e_FIXES_SETTINGS_DROP_ALL_DATA,
- e_FIXES_SETTINGS_MENU_SET,
- e_FIXES_SETTINGS_ENDING,
- e_FIXES_SETTINGS_ENDED,
- e_FIXES_SETTINGS_NO_GAME_TEXT,
- e_FIXES_SETTINGS_SECOND_USE
- }
- /*
- * _FIXES_CEILDIV
- *
- * Do a ceiling division of the first number by the second number.
- */
- #define _FIXES_CEILDIV(%0,%1) (((%0) + (%1) - 1) / (%1))
- /*
- * _FIXES_INFINITY
- *
- * IEEE 754 definition of infinity.
- */
- #define _FIXES_INFINITY (Float:0x7F800000)
- /*
- * _FIXES_N_INFINITY
- *
- * IEEE 754 definition of negative infinity.
- */
- #define _FIXES_N_INFINITY (Float:0xFF800000)
- /*
- * _FIXES_ATTACHMENTS
- *
- * The number of players whose attachment data (10-bits) can be stored in one
- * cell.
- */
- #define _FIXES_ATTACHMENTS (cellbits / MAX_PLAYER_ATTACHED_OBJECTS)
- /*
- * _FIXES_FOREACH
- *
- * A new version of "foreach", but just for this library.
- */
- #define _FIXES_FOREACH(%1,%0) for (new %0 = MAX_PLAYERS; (%0 = %1[%0]) != MAX_PLAYERS; )
- /*
- * _FIXES_IN_RANGE
- *
- * Checks if the first parameter is between the other two: %1 <= %0 < %2 (but
- * faster).
- */
- #define _FIXES_IN_RANGE(%0,%1,%2) (((%0) - ((%1) + cellmin)) < ((%2) - ((%1) + cellmin)))
- /*
- * _FIXES_NO_RANGE
- *
- * Checks if the first parameter is not between the other two: !(%1 <= %0 < %2)
- * (but faster).
- */
- #define _FIXES_NO_RANGE(%0,%1,%2) (((%0) - ((%1) + cellmin)) >= ((%2) - ((%1) + cellmin)))
- /*
- * _FIXES_FORWARD
- *
- * Forwards a hooked callbacks, and defines the default state implementations.
- */
- #define _FIXES_FORWARD%0(%1); \
- forward%0(%1); \
- public%0(%1) <_ALS : _ALS_x0, _ALS : _ALS_x1> { return 1; } \
- public%0(%1) <> { return 1; }
- /*
- * _FIXES_IS_PLAYER_CONNECTED
- *
- * Always valid "IsPlayerConnected" check.
- */
- #define _FIXES_IS_PLAYER_CONNECTED(%0) (_FIXES_IN_RANGE((%0), 0, MAX_PLAYERS) && IsPlayerConnected((%0)))
- // These varaibles are NOT pre-processor dependent as they are stock. It's just
- // simpler than trying to figure out when or if a semi-colon is needed.
- #if !FIX_FILTERSCRIPT
- static
- #endif
- stock
- /*
- * bool:_FIXES_gIsFilterscript
- *
- * Runtime equivalent of "FILTERSCRIPT" for when it is not set by the user.
- */
- bool:_FIXES_gIsFilterscript;
- stock
- /*
- * FIXES_gscSpace[]
- *
- * A single re-usable space.
- */
- FIXES_gscSpace[] = " ";
- #if FIXES_Debug
- new
- #else
- static stock
- #endif
- /*
- * FIXES_gsValidMenus[_FIXES_CEILDIV(MAX_MENUS, cellbits)]
- *
- * A record of which menus have and haven't been shown yet. We ensure that
- * this only exists when required, since it depends on add and remove
- * functions to be called at the right time.
- */
- #if _FIX_Menus || FIX_GetPlayerMenu || FIX_OnPlayerDisconnect || FIX_GameText || FIX_AllowInteriorWeapons || FIX_SetPlayerWorldBounds || FIX_TogglePlayerControllable
- FIXES_gsPlayersIterator[MAX_PLAYERS + 1] = {0, 1, ...},
- #endif
- /*
- * FIXES_gsValidMenus[_FIXES_CEILDIV(MAX_MENUS, cellbits)]
- *
- * A record of which menus have and haven't been shown yet.
- */
- FIXES_gsValidMenus[_FIXES_CEILDIV(MAX_MENUS, cellbits)],
- /*
- * FIXES_gsPlayerIP[MAX_PLAYERS]
- *
- * A player's IP as a 32-bit integer.
- */
- #if FIXES_SilentKick && (FIX_OnVehicleMod || FIX_OnPlayerEnterVehicle || FIX_OnPlayerEnterVehicle_2)
- FIXES_gsPlayerIP[MAX_PLAYERS] = {-1, ...},
- #endif
- /*
- * FIXES_gsPlayerSkin[MAX_PLAYERS]
- *
- * The skin the player is currently using.
- */
- #if FIXES_Single && FIX_GetPlayerSkin
- FIXES_gsPlayerSkin[MAX_PLAYERS],
- #endif
- /*
- * e_FIXES_BOOLEAN_DATA:FIXES_gsPlayerBools[MAX_PLAYERS]
- *
- * Collection of boolean values for players.
- */
- e_FIXES_BOOLS:FIXES_gsPlayerBools[MAX_PLAYERS],
- /*
- * FIXES_gsWorldbounds[MAX_PLAYERS][E_FIXES_WORLDBOUND_DATA]
- *
- * All data for players on where their worldbounds are and where they last
- * were before they went through the bounds by crouching.
- */
- #if FIX_SetPlayerWorldBounds
- FIXES_gsWorldbounds[MAX_PLAYERS][E_FIXES_WORLDBOUND_DATA],
- #endif
- /*
- * FIXES_gsPlayerWeapon[MAX_PLAYERS]
- *
- * Stores the weapon set by "SetPlayerArmedWeapon" when in a vehicle.
- */
- #if FIXES_Single && FIX_GetPlayerWeapon
- FIXES_gsPlayerWeapon[MAX_PLAYERS],
- #endif
- /*
- * FIXES_gsVehicleSeatData[MAX_PLAYERS]
- *
- * What vehicle the player is due to go in.
- */
- FIXES_gsVehicleSeatData[MAX_PLAYERS],
- /*
- * FIXES_gsDialogID[MAX_PLAYERS]
- *
- * Stores the true ID of the dialog the player is looking at to prevent
- * spoofing.
- */
- #if FIX_OnDialogResponse || FIX_GetPlayerDialog
- FIXES_gsDialogID[MAX_PLAYERS] = {-1, ...},
- #endif
- /*
- * FIXES_gsInterior[MAX_PLAYERS]
- *
- * The player's current interior.
- */
- #if FIXES_Single && FIX_GetPlayerInterior
- FIXES_gsInterior[MAX_PLAYERS],
- #endif
- /*
- * e_FIXES_SETTINGS:FIXES_gsSettings
- *
- * A collection of 1-bit options, compressed together to save space.
- */
- e_FIXES_SETTINGS:FIXES_gsSettings = e_FIXES_SETTINGS_SECOND_USE,
- /*
- * FIXES_gsObjectSlots[_FIXES_CEILDIV(MAX_PLAYERS, _FIXES_ATTACHMENTS)]
- *
- * A record of which attached object slots a player has used.
- */
- FIXES_gsObjectSlots[_FIXES_CEILDIV(MAX_PLAYERS, _FIXES_ATTACHMENTS)],
- /*
- * FIXES_gsLastAnimation[MAX_PLAYERS]
- *
- * The last animation a player used.
- */
- FIXES_gsLastAnimation[MAX_PLAYERS],
- /*
- * FIXES_gsLastCash[MAX_PLAYERS]
- *
- * A player's cash before dying.
- */
- #if FIX_OnPlayerSpawn
- FIXES_gsLastCash[MAX_PLAYERS],
- #endif
- /*
- * FIXES_gsDriveByWeapon[MAX_PLAYERS]
- *
- * The weapon to set after re-enter to vehicle.
- */
- FIXES_gsDriveByWeapon[MAX_PLAYERS],
- /*
- * FIXES_gsCurrentMenu[MAX_PLAYERS]
- *
- * The menu the player can currently see.
- */
- Menu:FIXES_gsCurrentMenu[MAX_PLAYERS] = {Menu:INVALID_MENU, ...},
- /*
- * Text:FIXES_gsGTStyle[FIXES_GT_STYLE_COUNT]
- *
- * The pre-defined TextDraw styles used to recreate the bugged GameText
- * styles for GameTextForAll.
- */
- #if FIX_GameText
- Text:FIXES_gsGTStyle[FIXES_GT_STYLE_COUNT],
- #endif
- /*
- * FIXES_gsPlayerPGTShown[FIXES_GT_STYLE_COUNT][MAX_PLAYERS + 1]
- *
- * A linked list of which players can see a certain GameText style.
- */
- #if FIX_GameText
- FIXES_gsPlayerPGTShown[FIXES_GT_STYLE_COUNT][MAX_PLAYERS + 1],
- #endif
- /*
- * PlayerText:FIXES_gsPGTStyle[FIXES_GT_STYLE_COUNT][MAX_PLAYERS]
- *
- * The predefined TextDraw styles used to recreate the bugged GameText
- * styles for GameTextForPlayer.
- */
- #if FIX_GameText
- PlayerText:FIXES_gsPGTStyle[MAX_PLAYERS][FIXES_GT_STYLE_COUNT],
- #endif
- /*
- * FIXES_gsPGTTimer[FIXES_GT_STYLE_COUNT][MAX_PLAYERS]
- *
- * The timers used to hide per-player GameText messages.
- */
- #if FIX_GameText
- FIXES_gsGTTimer[FIXES_GT_STYLE_COUNT][MAX_PLAYERS + 1],
- #endif
- /*
- * FIXES_gsPlayerAnimTimer[MAX_PLAYERS],
- *
- * Used for storing the timer ID for deferring class selection animation
- * application.
- */
- #if FIX_ApplyAnimation_2
- FIXES_gsPlayerAnimTimer[MAX_PLAYERS],
- #endif
- /*
- * FIXES_gsPlayerAnimName[MAX_PLAYERS][60],
- *
- * Used for storing the animation name.
- */
- #if FIX_ApplyAnimation_2
- FIXES_gsPlayerAnimName[MAX_PLAYERS][60],
- #endif
- /*
- * FIXES_gsPlayerAnimLibs[MAX_PLAYERS][_FIXES_CEILDIV(135, cellbits)],
- *
- * Which animation libraries the player has synced.
- */
- #if FIX_ApplyAnimation_2
- FIXES_gsPlayerAnimLibs[MAX_PLAYERS][_FIXES_CEILDIV(135, cellbits)],
- #endif
- /*
- * FIXES_gsActorAnimTimer[MAX_ACTORS],
- *
- * Used for storing the timer ID for deferring class selection animation
- * application.
- */
- #if FIX_ApplyActorAnimation_2
- FIXES_gsActorAnimTimer[MAX_ACTORS],
- #endif
- /*
- * FIXES_gsActorAnimName[MAX_ACTORS][60],
- *
- * Used for storing the animation name.
- */
- #if FIX_ApplyActorAnimation_2
- FIXES_gsActorAnimName[MAX_ACTORS][60],
- #endif
- /*
- * FIXES_gsActorAnimLibs[MAX_ACTORS][_FIXES_CEILDIV(135, cellbits)],
- *
- * Which animation libraries the actor has synced.
- */
- #if FIX_ApplyActorAnimation_2
- FIXES_gsActorAnimLibs[MAX_ACTORS][_FIXES_CEILDIV(135, cellbits)],
- #endif
- /*
- * FIXES_pvarNotNewPlayer[]
- *
- * This variable records wether or not this player is brand new to the
- * server, and not just having "OnPlayerConnect" called due to a script
- * load. There are certain functions that need applying only the very first
- * time they connect, then this gets set.
- */
- #if !FIXES_Single
- FIXES_pvarNotNewPlayer[] = "FIXES_pvarNotNewPlayer",
- #endif
- /*
- * FIXES_pvarPlayerWeapon[]
- *
- * Name of the pvar in which to store the player's current weapon.
- */
- #if !FIXES_Single && FIX_GetPlayerWeapon
- FIXES_pvarPlayerWeapon[] = "FIXES_pvarPlayerWeapon",
- #endif
- /*
- * FIXES_pvarPlayerSkin[]
- *
- * Name of the pvar in which to store the player's current skin.
- */
- #if !FIXES_Single && FIX_GetPlayerSkin
- FIXES_pvarPlayerSkin[] = "FIXES_pvarPlayerSkin",
- #endif
- /*
- * FIXES_pvarPlayerSpectate[]
- *
- * Name of the pvar in which to store the player's spectator mode.
- */
- #if !FIXES_Single && FIX_SetPlayerCamera
- FIXES_pvarPlayerSpectate[] = "FIXES_pvarPlayerSpectate",
- #endif
- /*
- * FIXES_gscKick[]
- *
- * Name of the kick timer function.
- */
- #if FIX_Kick
- FIXES_gscKick[] = "_FIXES_Kick",
- #endif
- /*
- * FIXES_pvarKick[]
- *
- * Name of the pvar in which to store a player's kick timer.
- */
- #if !FIXES_Single && FIX_Kick
- FIXES_pvarKick[] = "FIXES_pvarKick",
- #endif
- /*
- * FIXES_pvarPlayerDialog[]
- *
- * Name of the pvar in which to store the player's current dialogid.
- */
- #if !FIXES_Single && FIX_OnDialogResponse || FIX_GetPlayerDialog
- FIXES_pvarPlayerDialog[] = "FIXES_pvarPlayerDialog",
- #endif
- /*
- * FIXES_pvarPlayerInterior[]
- *
- * A player's current interior.
- */
- #if !FIXES_Single && FIX_GetPlayerInterior
- FIXES_pvarPlayerInterior[] = "FIXES_pvarPlayerInterior",
- #endif
- /*
- * FIXES_pvarCurrentDialog[]
- *
- * Used in OnDialogResponse to be able to get the correct ID in multiple
- * scripts while still correctly resetting the ID for future use.
- */
- #if !FIXES_Single && FIX_OnDialogResponse
- FIXES_pvarCurrentDialog[] = "FIXES_pvarCurrentDialog",
- #endif
- /*
- * FIXES_pvarPlayerLastCash[]
- *
- * Used in OnPlayerDeath to save a player's cash before death.
- */
- #if !FIXES_Single && FIX_OnPlayerSpawn
- FIXES_pvarPlayerLastCash[] = "FIXES_pvarPlayerLastCash",
- #endif
- /*
- * FIXES_gscHideGameTextTimer[]
- *
- * Name of the GameText hide timer function.
- */
- FIXES_gscHideGameTextTimer[] = "_FIXES_HideGameTextTimer",
- /*
- * FIXES_gscDriveBy[]
- *
- * Name of the Drive-By timer function.
- */
- FIXES_gscDriveBy[] = "_FIXES_DriveBy",
- /*
- * FIXES_gscSetCamera[]
- *
- * Name of the SetCamera timer function.
- */
- FIXES_gscSetCamera[] = "_FIXES_SetCamera",
- /*
- * FIXES_gscSetTime[]
- *
- * Name of the SetTime timer function.
- */
- FIXES_gscSetTime[] = "_FIXES_SetTime",
- /*
- * FIXES_gscSetColor[]
- *
- * Name of the SetColor timer function.
- */
- FIXES_gscSetColor[] = "_FIXES_SetColor",
- /*
- * FIXES_gscSetCheckpoint[]
- *
- * Name of the SetCheckpoint timer function.
- */
- FIXES_gscSetCheckpoint[] = "_FIXES_SetCheckpoint",
- /*
- * FIXES_pvarPlayerCheckpoint[]
- *
- * Name of the pvar in which to store the player's checkpoint state.
- */
- #if !FIXES_Single && FIX_SetPlayerCheckpoint
- FIXES_pvarPlayerCheckpoint[] = "FIXES_pvarPlayerCheckpoint",
- #endif
- /*
- * FIXES_gscSetRaceCheckpoint[]
- *
- * Name of the SetRaceCheckpoint timer function.
- */
- FIXES_gscSetRaceCheckpoint[] = "_FIXES_SetRaceCheckpoint",
- /*
- * FIXES_pvarPlayerRaceCheckpoint[]
- *
- * Name of the pvar in which to store the player's race checkpoint state.
- */
- #if !FIXES_Single && FIX_SetPlayerRaceCheckpoint
- FIXES_pvarPlayerRaceCheckpoint[] = "FIXES_pvarPlayerRaceCheckpoint",
- #endif
- /*
- * FIXES_gscNULL[]
- *
- * NULL. This is stored as a global string to reduce memory usage.
- */
- FIXES_gscNULL[] = "\1";
- static stock const
- /*
- * FIXES_gscPlayerColours[100]
- *
- * There are only 100 colours used by default, with SA:MP looping through
- * them repeatedly.
- */
- #if FIX_GetPlayerColour
- FIXES_gscPlayerColours[100] =
- {
- 0xFF8C13FF, 0xC715FFFF, 0x20B2AAFF, 0xDC143CFF, 0x6495EDFF,
- 0xF0E68CFF, 0x778899FF, 0xFF1493FF, 0xF4A460FF, 0xEE82EEFF,
- 0xFFD720FF, 0x8B4513FF, 0x4949A0FF, 0x148B8BFF, 0x14FF7FFF,
- 0x556B2FFF, 0x0FD9FAFF, 0x10DC29FF, 0x534081FF, 0x0495CDFF,
- 0xEF6CE8FF, 0xBD34DAFF, 0x247C1BFF, 0x0C8E5DFF, 0x635B03FF,
- 0xCB7ED3FF, 0x65ADEBFF, 0x5C1ACCFF, 0xF2F853FF, 0x11F891FF,
- 0x7B39AAFF, 0x53EB10FF, 0x54137DFF, 0x275222FF, 0xF09F5BFF,
- 0x3D0A4FFF, 0x22F767FF, 0xD63034FF, 0x9A6980FF, 0xDFB935FF,
- 0x3793FAFF, 0x90239DFF, 0xE9AB2FFF, 0xAF2FF3FF, 0x057F94FF,
- 0xB98519FF, 0x388EEAFF, 0x028151FF, 0xA55043FF, 0x0DE018FF,
- 0x93AB1CFF, 0x95BAF0FF, 0x369976FF, 0x18F71FFF, 0x4B8987FF,
- 0x491B9EFF, 0x829DC7FF, 0xBCE635FF, 0xCEA6DFFF, 0x20D4ADFF,
- 0x2D74FDFF, 0x3C1C0DFF, 0x12D6D4FF, 0x48C000FF, 0x2A51E2FF,
- 0xE3AC12FF, 0xFC42A8FF, 0x2FC827FF, 0x1A30BFFF, 0xB740C2FF,
- 0x42ACF5FF, 0x2FD9DEFF, 0xFAFB71FF, 0x05D1CDFF, 0xC471BDFF,
- 0x94436EFF, 0xC1F7ECFF, 0xCE79EEFF, 0xBD1EF2FF, 0x93B7E4FF,
- 0x3214AAFF, 0x184D3BFF, 0xAE4B99FF, 0x7E49D7FF, 0x4C436EFF,
- 0xFA24CCFF, 0xCE76BEFF, 0xA04E0AFF, 0x9F945CFF, 0xDCDE3DFF,
- 0x10C9C5FF, 0x70524DFF, 0x0BE472FF, 0x8A2CD7FF, 0x6152C2FF,
- 0xCF72A9FF, 0xE59338FF, 0xEEDC2DFF, 0xD8C762FF, 0xD8C762FF
- },
- #endif
- /*
- * FIXES_gscMaxPassengers[]
- *
- * This is a compressed (4-bit) list of the maximum number of passengers in
- * any vehicle, confirmed by a number of sources. "F" (15) means invalid
- * vehicle.
- */
- #if FIX_OnPlayerEnterVehicle
- FIXES_gscMaxPassengers[] =
- {
- 0x10331113, 0x11311131, 0x11331313, 0x80133301, 0x1381F110, 0x10311103, 0x10001F10, 0x11113311, 0x13113311,
- 0x31101100, 0x30001301, 0x11031311, 0x11111331, 0x10013111, 0x01131100, 0x11111110, 0x11100031, 0x11130221,
- 0x33113311, 0x11111101, 0x33101133, 0x101001F0, 0x03133111, 0xFF11113F, 0x13330111, 0xFF131111, 0x0000FF3F
- },
- #endif
- /*
- * FIXES_gscVehicleMods[]
- *
- * This is a bit array of all the valid mods (-1000) for all vehicles (-400)
- * EXCEPT for vehicle 576 (Tornado), which has just TWO extra mods on it,
- * that should spill over in to an extra cell of data (requiring an extra
- * 848 bytes of data total to make the array work). Instead this (hopefully
- * rare) case is handled explicitly in "OnVehicleMod". It seems that most
- * vehicles are:
- *
- * 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- *
- * I don't know yet if this can be used to our advantage to improve the code
- * somehow - it seems like that would require more explicit model handling.
- */
- #if FIX_OnVehicleMod
- FIXES_gscVehicleMods[] =
- {
- 0x033C2700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x021A27FA, 0x00000000, 0x00FFFE00, 0x00000007, 0x0003C000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x023B2785, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02BC4703, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x03BA278A, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x028E078A, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02310744, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x0228073A, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02BD4701, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x023A2780, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x0228077A, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x027A27CA, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x0282278A, 0x00000000, 0x00FFFE00, 0x00000007, 0x0003C000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x023E07C0, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x03703730, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x031D2775, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02BE4788, 0x00000000, 0x00FFFE00, 0x00000007, 0x0003C000, 0x00000000,
- 0x02010771, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x029A0FCE, 0x00000000, 0x00FFFE00, 0x00000007, 0x0000C000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x03382700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x023F8795, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x029F078C, 0x00000000, 0x00FFFE00, 0x00000007, 0x0003C000, 0x00000000,
- 0x029627EA, 0x00000000, 0x00FFFE00, 0x00000007, 0x0003C000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x0236C782, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x029E1FCA, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0xFC000437, 0x00000000, 0x021C0000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x03FE6007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00001B87, 0x00000001, 0x01E00000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x039E07D2, 0x00000000, 0x00FFFE00, 0x00000007, 0x0003C000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x023CC700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00030000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x038E07D6, 0x00000000, 0x00FFFE00, 0x00000007, 0x0003C000, 0x00000000,
- 0x023D0709, 0x00000000, 0x00FFFE00, 0x00000007, 0x0000C000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x029E1F8A, 0x00000000, 0x00FFFE00, 0x00000007, 0x0003C000, 0x00000000,
- 0x029C077A, 0x00000000, 0x00FFFE00, 0x00000007, 0x0003C000, 0x00000000,
- 0x02BD076C, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0xFFFFFE00, 0x00000007, 0x00000000, 0x000001F8,
- 0x02000700, 0x00000000, 0x00FFFFFE, 0x00000007, 0xC0000000, 0x00002007,
- 0xFE000700, 0x00000003, 0x00FFFE00, 0x00000007, 0x00003C00, 0x00000600,
- 0xCE000700, 0xFF800000, 0x00FFFE01, 0x00000007, 0x3C000000, 0x00000000,
- 0x02000700, 0x000003FC, 0x00FFFE00, 0x00000007, 0x003C0000, 0x00001800,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x007FE000, 0x00FFFE00, 0x00000007, 0x03C00000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000047, 0x0000003E, 0x3C000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00001C00, 0x00FFFE00, 0x0000000F, 0x00000000, 0x0003C000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x000003C0, 0xC0000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x029607C2, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x03FFE7CD, 0x00000000, 0x00FFFE00, 0x00000007, 0x0003C000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x031727F1, 0x00000000, 0x00FFFE00, 0x00000007, 0x00030000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x025627F0, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x039E07C2, 0x00000000, 0x00FFFE00, 0x00000007, 0x0003C000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000,
- 0x02000700, 0x00000000, 0x00FFFE00, 0x00000007, 0x00000000, 0x00000000
- },
- #endif
- /*
- * FIXES_gscAnimIndexes[]
- *
- * Which index each letter starts at. Sometimes crashes the compiler...
- */
- #if FIX_ApplyAnimation || FIX_ApplyAnimation_2 || FIX_ApplyActorAnimation || FIX_ApplyActorAnimation_2
- FIXES_gscAnimIndexes[24] =
- {
- 0, 2, 21, 35, 42, 42, 53, 62, 64, 67, 68, 71, 75, 81, 82, 84, 94, 96, 104, 122, 127, 128, 131, 135
- },
- #endif
- /*
- * FIXES_gscAnimLib[]
- *
- * List of valid animation libraries.
- */
- #if FIX_ApplyAnimation || FIX_ApplyAnimation_2 || FIX_ApplyActorAnimation || FIX_ApplyActorAnimation_2
- FIXES_gscAnimLib[135][] =
- {
- "AIRPORT", "ATTRACTORS", "BAR", "BASEBALL", "BD_FIRE",
- "BEACH", "BENCHPRESS", "BF_INJECTION", "BIKE_DBZ", "BIKED",
- "BIKEH", "BIKELEAP", "BIKES", "BIKEV", "BLOWJOBZ",
- "BMX", "BOMBER", "BOX", "BSKTBALL", "BUDDY",
- "BUS", "CAMERA", "CAR", "CAR_CHAT", "CARRY",
- "CASINO", "CHAINSAW", "CHOPPA", "CLOTHES", "COACH",
- "COLT45", "COP_AMBIENT", "COP_DVBYZ", "CRACK", "CRIB",
- "DAM_JUMP", "DANCING", "DEALER", "DILDO", "DODGE",
- "DOZER", "DRIVEBYS", "FAT", "FIGHT_B", "FIGHT_C",
- "FIGHT_D", "FIGHT_E", "FINALE", "FINALE2", "FLAME",
- "FLOWERS", "FOOD", "FREEWEIGHTS", "GANGS", "GFUNK",
- "GHANDS", "GHETTO_DB", "GOGGLES", "GRAFFITI", "GRAVEYARD",
- "GRENADE", "GYMNASIUM", "HAIRCUTS", "HEIST9", "INT_HOUSE",
- "INT_OFFICE", "INT_SHOP", "JST_BUISNESS", "KART", "KISSING",
- "KNIFE", "LAPDAN1", "LAPDAN2", "LAPDAN3", "LOWRIDER",
- "MD_CHASE", "MD_END", "MEDIC", "MISC", "MTB",
- "MUSCULAR", "NEVADA", "ON_LOOKERS", "OTB", "PARACHUTE",
- "PARK", "PAULNMAC", "PED", "PLAYER_DVBYS", "PLAYIDLES",
- "POLICE", "POOL", "POOR", "PYTHON", "QUAD",
- "QUAD_DBZ", "RAPPING", "RIFLE", "RIOT", "ROB_BANK",
- "ROCKET", "RUNNINGMAN", "RUSTLER", "RYDER", "SAMP",
- "SCRATCHING", "SEX", "SHAMAL", "SHOP", "SHOTGUN",
- "SILENCED", "SKATE", "SMOKING", "SNIPER", "SNM",
- "SPRAYCAN", "STRIP", "SUNBATHE", "SWAT", "SWEET",
- "SWIM", "SWORD", "TANK", "TATTOOS", "TEC",
- "TRAIN", "TRUCK", "UZI", "VAN", "VENDING",
- "VORTEX", "WAYFARER", "WEAPONS", "WOP", "WUZI"
- },
- #endif
- /*
- * FIXES_gscDot[]
- *
- * ".".
- */
- FIXES_gscDot[] = ".",
- /*
- * FIXES_gscSpec@[]
- *
- * Specifier "".
- */
- FIXES_gscSpec@[] = "",
- /*
- * FIXES_gscSpec@i[]
- *
- * Specifier "i".
- */
- FIXES_gscSpec@i[] = "i",
- /*
- * FIXES_gscSpec@ii[]
- *
- * Specifier "ii".
- */
- FIXES_gscSpec@ii[] = "ii",
- /*
- * FIXES_gscSpec@ai[]
- *
- * Specifier "ai".
- */
- FIXES_gscSpec@ai[] = "ai",
- /*
- * FIXES_gscSpec@is[]
- *
- * Specifier "is".
- */
- FIXES_gscSpec@is[] = "is",
- /*
- * FIXES_gscSpec@iii[]
- *
- * Specifier "iii".
- */
- FIXES_gscSpec@iii[] = "iii",
- /*
- * FIXES_gscSpec@isii[]
- *
- * Specifier "isii".
- */
- FIXES_gscSpec@isii[] = "isii",
- /*
- * FIXES_gscSpec@ifff[]
- *
- * Specifier "ifff".
- */
- FIXES_gscSpec@ifff[] = "ifff",
- /*
- * FIXES_gscSpec@iifff[]
- *
- * Specifier "iifff".
- */
- FIXES_gscSpec@iifff[] = "iifff",
- /*
- * FIXES_gscSpec@iifffi[]
- *
- * Specifier "iifffi".
- */
- FIXES_gscSpec@iifffi[] = "iifffi",
- /*
- * FIXES_gscSpec@iifffffff[]
- *
- * Specifier "iifffffff".
- */
- FIXES_gscSpec@iifffffff[] = "iifffffff",
- /*
- * FIXES_gscSpec@iffff[]
- *
- * Specifier "iffff".
- */
- FIXES_gscSpec@iffff[] = "iffff",
- /*
- * FIXES_gscSpec@iiiis[]
- *
- * Specifier "iiiis".
- */
- FIXES_gscSpec@iiiis[] = "iiiis",
- /*
- * FIXES_gscSpec@iiiii[]
- *
- * Specifier "iiiii".
- */
- FIXES_gscSpec@iiiii[] = "iiiii",
- /*
- * FIXES_gscSpec@iiiiii[]
- *
- * Specifier "iiiiii".
- */
- FIXES_gscSpec@iiiiii[] = "iiiiii",
- /*
- * FIXES_gscTempName[]
- *
- * The temporary name to give when renaming people.
- */
- FIXES_gscTempName[] = "FIXES_TEMP_NAME",
- /*
- * FIXES_gscOrderProperty[]
- *
- * The property to check for script ordering.
- */
- FIXES_gscOrderProperty[] = "FIXES_gscOrderProperty",
- /*
- * FIXES_gscNoGMProperty[]
- *
- * Call "_FIXES_DetermineOrder" in the GM or not?
- */
- FIXES_gscNoGMProperty[] = "FIXES_gscNoGMProperty",
- /*
- * FIXES_gscDetermineOrder[]
- *
- * Name of the ordering callback.
- */
- FIXES_gscDetermineOrder[] = "_FIXES_DetermineOrder",
- /*
- * FIXES_gscSetPlayerMenu[]
- *
- * Name of the remote set player menu function.
- */
- FIXES_gscSetPlayerMenu[] = "_FIXES_SetPlayerMenu",
- /*
- * FIXES_gscClearPlayerMenu[]
- *
- * Name of the remote function to clear a player's menu set.
- */
- FIXES_gscClearPlayerMenu[] = "_FIXES_ClearPlayerMenu",
- /*
- * FIXES_gscAllowTeleport[]
- *
- * Name of the remote allow teleport function.
- */
- FIXES_gscAllowTeleport[] = "_FIXES_AllowTeleport",
- /*
- * FIXES_gscPutPlayerInVehicle[]
- *
- * Name of the remote vehicle entry function.
- */
- FIXES_gscPutPlayerInVehicle[] = "_FIXES_PutPlayerInVehicle",
- /*
- * FIXES_gscAllowInteriorWeapons[]
- *
- * Name of the remote interior weapons function.
- */
- FIXES_gscAllowInteriorWeapons[] = "_FIXES_AllowInteriorWeapons",
- /*
- * FIXES_gscSetPlayerAttachedObj[]
- *
- * Name of the remote attache object function.
- */
- FIXES_gscSetPlayerAttachedObj[] = "_FIXES_SetPlayerAttachedObject",
- /*
- * FIXES_gscTogglePlayerControl[]
- *
- * Name of the remote player toggle function.
- */
- FIXES_gscTogglePlayerControl[] = "_FIXES_TogglePlayerControllable",
- /*
- * FIXES_gscSetPlayerWorldBounds[]
- *
- * Name of the remote world bounds function.
- */
- FIXES_gscSetPlayerWorldBounds[] = "_FIXES_SetPlayerWorldBounds",
- /*
- * FIXES_gscGameTextShow[]
- *
- * Name of the remote GameText show function.
- */
- FIXES_gscGameTextShow[] = "_FIXES_GameTextShow",
- /*
- * FIXES_gscReturnProperty[]
- *
- * The property for accurate returns.
- */
- FIXES_gscReturnProperty[] = "FIXES_gscReturnProperty",
- /*
- * FIXES_gscSingleProperty[]
- *
- * The property for checking this is the only running script with fixes in.
- */
- FIXES_gscSingleProperty[] = "FIXES_gscSingleProperty",
- /*
- * FIXES_gscMenuProperty[]
- *
- * The property for a player's current menu.
- */
- FIXES_gscMenuProperty[] = "FIXES_gscMenuProperty",
- /*
- * FIXES_gscFixesError[]
- *
- * Error shown when multiple scripts are detected.
- */
- FIXES_gscFixesError[] = "\7\7\7\7\7" "\n" \
- "*** fixes.inc error: Running multiple scripts compiled with \"fixes.inc\"..." "\n" \
- "*** Please compile your modes with \"#define FIXES_Single 0\" at the top, as" "\n" \
- "*** this setting is no longer the default (to improve the more common case)." ;
- /*
- * _FIXES_KEY_AIM
- * KEY_AIM
- *
- * Because the default SA:MP includes missed this one.
- */
- #define _FIXES_KEY_AIM (128)
- #if FIX_KEY_AIM
- #define KEY_AIM _FIXES_KEY_AIM
- #endif
- /*
- * _FIXES_SPECIAL_ACTION_PISSING
- * SPECIAL_ACTION_PISSING
- *
- * Because the default SA:MP includes missed this one.
- */
- #define _FIXES_SPECIAL_ACTION_PISSING (68)
- #if FIX_SPECIAL_ACTION_PISSING
- #define SPECIAL_ACTION_PISSING _FIXES_SPECIAL_ACTION_PISSING
- #endif
- /*
- * IsValidVehicle
- *
- * Because the default SA:MP includes missed this one.
- */
- #if FIX_IsValidVehicle
- native IsValidVehicle(vehicleid);
- #endif
- /*
- * GetGravity
- *
- * Because the default SA:MP includes missed this one.
- */
- #if FIX_GetGravity
- native Float:GetGravity();
- #endif
- /*
- * gpci
- *
- * Because the default SA:MP includes missed this one.
- */
- #if FIX_gpci
- native gpci(playerid, serial[], maxlen);
- #endif
- /*
- * BODYPARTS
- *
- * Because the default SA:MP includes missed these.
- */
- #if FIX_BODYPARTS
- #define BODY_PART_TORSO (3)
- #define BODY_PART_GROIN (4)
- #define BODY_PART_LEFT_ARM (5)
- #define BODY_PART_RIGHT_ARM (6)
- #define BODY_PART_LEFT_LEG (7)
- #define BODY_PART_RIGHT_LEG (8)
- #define BODY_PART_HEAD (9)
- #endif
- /*
- * CAMERAMODES
- *
- * Because the default SA:MP includes missed these.
- */
- #if FIX_CAMERAMODES
- #define CAM_MODE_DISCONNECTED (-1)
- #define CAM_MODE_NONE (0)
- #define CAM_MODE_BEHINDCAR (3)
- #define CAM_MODE_FOLLOWPED (4)
- #define CAM_MODE_SNIPER (7)
- #define CAM_MODE_ROCKETLAUNCHER (8)
- #define CAM_MODE_FIXED (15)
- #define CAM_MODE_1STPERSON (16)
- #define CAM_MODE_CAM_ON_A_STRING (18)
- #define CAM_MODE_BEHINDBOAT (22)
- #define CAM_MODE_CAMERA (46)
- #define CAM_MODE_ROCKETLAUNCHER_HS (51)
- #define CAM_MODE_AIMWEAPON (53)
- #define CAM_MODE_AIMWEAPON_FROMCAR (55)
- #define CAM_MODE_DW_HELI_CHASE (56)
- #endif
- /*
- * IS_FILTERSCRIPT
- *
- * "FILTERSCRIPT" can't always be relied on to be set. This is not a pre-
- * processor macro, but may be better than nothing (also used internally).
- */
- #if FIX_FILTERSCRIPT
- #define IS_FILTERSCRIPT _FIXES_gIsFilterscript
- #endif
- /*
- * File operators
- *
- * Forwards for operators that shouldn't exist, so they won't exist.
- */
- #if FIX_FileMaths
- forward File:operator++(File:a);
- forward File:operator--(File:a);
- forward File:operator-(File:a);
- forward File:operator+(File:a, File:b);
- forward File:operator+(File:a, _:b);
- forward File:operator-(File:a, File:b);
- forward File:operator-(_:a, File:b);
- forward File:operator-(File:a, _:b);
- forward File:operator*(File:a, File:b);
- forward File:operator*(File:a, _:b);
- forward File:operator/(File:a, File:b);
- forward File:operator/(_:a, File:b);
- forward File:operator/(File:a, _:b);
- forward File:operator%(File:a, File:b);
- forward File:operator%(_:a, File:b);
- forward File:operator%(File:a, _:b);
- forward bool:operator<(File:a, File:b);
- forward bool:operator<(_:a, File:b);
- forward bool:operator<(File:a, _:b);
- forward bool:operator<=(File:a, File:b);
- forward bool:operator<=(_:a, File:b);
- forward bool:operator<=(File:a, _:b);
- forward bool:operator>(File:a, File:b);
- forward bool:operator>(_:a, File:b);
- forward bool:operator>(File:a, _:b);
- forward bool:operator>=(File:a, File:b);
- forward bool:operator>=(_:a, File:b);
- forward bool:operator>=(File:a, _:b);
- #endif
- /*
- * FIXES_DetermineOrder()
- *
- * Figure out which script is called first by callbacks.
- */
- #if !FIXES_Single
- forward _FIXES_DetermineOrder();
- static FIXES_DetermineOrder()
- {
- deleteproperty(5, FIXES_gscOrderProperty),
- // Called in the Game Mode first (thus needs correcting).
- setproperty(5, FIXES_gscNoGMProperty, 1),
- CallRemoteFunction(FIXES_gscDetermineOrder, FIXES_gscSpec@),
- deleteproperty(5, FIXES_gscNoGMProperty),
- CallRemoteFunction(FIXES_gscDetermineOrder, FIXES_gscSpec@);
- }
- #endif
- /*
- * FIXES_IsPlayerConnected(playerid)
- *
- * FIXES:
- * IsPlayerConnected
- */
- #if defined _ALS_IsPlayerConnected
- #error _ALS_IsPlayerConnected defined
- #endif
- native BAD_IsPlayerConnected(playerid) = IsPlayerConnected;
- #if FIX_IsPlayerConnected
- stock FIXES_IsPlayerConnected(playerid)
- {
- return _FIXES_IS_PLAYER_CONNECTED(playerid);
- }
- #define _ALS_IsPlayerConnected
- #define IsPlayerConnected FIXES_IsPlayerConnected
- #endif
- /*
- * _FIXES_CreateGameTextDraws(playerid, test)
- *
- * Create the text draws used to replicate game texts.
- *
- * FIXES:
- * GameText
- */
- #if FIX_GameText
- static _FIXES_CreateGameTextDraws(const playerid)
- {
- if (playerid == INVALID_PLAYER_ID)
- {
- new
- Text:t;
- #if FIX_GameTextStyles
- // Global style 7 (vehicle name).
- t = FIXES_gsGTStyle[7] = TextDrawCreate(608.000000, 344.000000, FIXES_gscSpace),
- TextDrawLetterSize(t, 1.000000, 3.000000),
- TextDrawAlignment(t, 3),
- TextDrawColor(t, 0x36682CFF),
- TextDrawSetShadow(t, 0),
- TextDrawSetOutline(t, 2),
- TextDrawBackgroundColor(t, 0x000000AA),
- TextDrawFont(t, 2),
- TextDrawSetProportional(t, 1),
- TextDrawUseBox(t, true),
- TextDrawBoxColor(t, 0x00000000),
- TextDrawTextSize(t, 10.0, 200.0);
- // Global style 8 (location name).
- t = FIXES_gsGTStyle[8] = TextDrawCreate(608.000000, 386.500000, FIXES_gscSpace),
- TextDrawLetterSize(t, 1.200000, 3.799998),
- TextDrawAlignment(t, 3),
- TextDrawColor(t, 0xACCBF1FF),
- TextDrawSetShadow(t, 0),
- TextDrawSetOutline(t, 2),
- TextDrawBackgroundColor(t, 0x000000AA),
- TextDrawFont(t, 0),
- TextDrawSetProportional(t, 1),
- TextDrawUseBox(t, true),
- TextDrawBoxColor(t, 0x00000000),
- TextDrawTextSize(t, 10.0, 200.0);
- // Global style 9 (radio name).
- t = FIXES_gsGTStyle[9] = TextDrawCreate(320.000000, 22.000000, FIXES_gscSpace),
- TextDrawLetterSize(t, 0.600000, 1.899999),
- TextDrawAlignment(t, 2),
- TextDrawColor(t, 0x906210FF),
- TextDrawSetShadow(t, 0),
- TextDrawSetOutline(t, 1),
- TextDrawBackgroundColor(t, 0x000000AA),
- TextDrawFont(t, 2),
- TextDrawSetProportional(t, 1),
- TextDrawUseBox(t, true),
- TextDrawBoxColor(t, 0x00000000),
- TextDrawTextSize(t, 200.0, 620.0);
- // Global style 10 (radio switch).
- t = FIXES_gsGTStyle[10] = TextDrawCreate(320.000000, 22.000000, FIXES_gscSpace),
- TextDrawLetterSize(t, 0.600000, 1.899999),
- TextDrawAlignment(t, 2),
- TextDrawColor(t, 0x969696FF),
- TextDrawSetShadow(t, 0),
- TextDrawSetOutline(t, 1),
- TextDrawBackgroundColor(t, 0x000000AA),
- TextDrawFont(t, 2),
- TextDrawSetProportional(t, 1),
- TextDrawUseBox(t, true),
- TextDrawBoxColor(t, 0x00000000),
- TextDrawTextSize(t, 200.0, 620.0);
- // Global style 11 (positive money).
- t = FIXES_gsGTStyle[11] = TextDrawCreate(607.000000, 78.000000, FIXES_gscSpace),
- TextDrawLetterSize(t, 0.550000, 2.150000),
- TextDrawAlignment(t, 3),
- TextDrawColor(t, 0x36682CFF),
- TextDrawSetShadow(t, 0),
- TextDrawSetOutline(t, 2),
- TextDrawBackgroundColor(t, 0x000000FF),
- TextDrawFont(t, 3),
- TextDrawSetProportional(t, 1),
- TextDrawUseBox(t, true),
- TextDrawBoxColor(t, 0x00000000),
- TextDrawTextSize(t, 10.0, 200.0);
- // Global style 12 (negative money).
- t = FIXES_gsGTStyle[12] = TextDrawCreate(607.000000, 78.000000, FIXES_gscSpace),
- TextDrawLetterSize(t, 0.550000, 2.150000),
- TextDrawAlignment(t, 3),
- TextDrawColor(t, 0xB4191DFF),
- TextDrawSetShadow(t, 0),
- TextDrawSetOutline(t, 2),
- TextDrawBackgroundColor(t, 0x000000FF),
- TextDrawFont(t, 3),
- TextDrawSetProportional(t, 1),
- TextDrawUseBox(t, true),
- TextDrawBoxColor(t, 0x00000000),
- TextDrawTextSize(t, 10.0, 200.0);
- // Global style 13 (stunt).
- t = FIXES_gsGTStyle[13] = TextDrawCreate(380.000000, 341.000000, FIXES_gscSpace),
- TextDrawLetterSize(t, 0.579999, 2.400000),
- TextDrawTextSize(t, 40.000000, 460.000000),
- TextDrawAlignment(t, 2),
- TextDrawColor(t, 0xD7D3CCFF),
- TextDrawUseBox(t, true),
- TextDrawBoxColor(t, 0),
- TextDrawSetShadow(t, 2),
- TextDrawSetOutline(t, 0),
- TextDrawBackgroundColor(t, 0x000000AA),
- TextDrawFont(t, 1),
- TextDrawSetProportional(t, 1),
- #endif
- // Global style 0.
- t = FIXES_gsGTStyle[0] = TextDrawCreate(320.0, 214.0, FIXES_gscSpace),
- TextDrawLetterSize(t, 1.3, 3.6),
- TextDrawAlignment(t, 2),
- TextDrawColor(t, 0x906210FF),
- TextDrawSetShadow(t, 0),
- TextDrawSetOutline(t, 2),
- TextDrawBackgroundColor(t, 0x000000AA),
- TextDrawFont(t, 3),
- TextDrawSetProportional(t, 1),
- TextDrawUseBox(t, true),
- TextDrawBoxColor(t, 0x00000000),
- TextDrawTextSize(t, 200.0, 620.0);
- // Global style 1.
- t = FIXES_gsGTStyle[1] = TextDrawCreate(620.0, 310.0, FIXES_gscSpace),
- TextDrawLetterSize(t, 1.0, 2.6),
- TextDrawAlignment(t, 3),
- TextDrawColor(t, 0x906210FF),
- TextDrawSetShadow(t, 0),
- TextDrawSetOutline(t, 2),
- TextDrawBackgroundColor(t, 0x000000AA),
- TextDrawFont(t, 3),
- TextDrawSetProportional(t, 1),
- TextDrawUseBox(t, true),
- TextDrawBoxColor(t, 0x00000000),
- TextDrawTextSize(t, 10.0, 200.0);
- // Global style 2.
- t = FIXES_gsGTStyle[2] = TextDrawCreate(320.0, 156.0, FIXES_gscSpace),
- TextDrawLetterSize(t, 2.1, 4.2),
- TextDrawAlignment(t, 2),
- TextDrawColor(t, 0xE1E1E1FF),
- TextDrawSetShadow(t, 0),
- TextDrawSetOutline(t, 3),
- TextDrawBackgroundColor(t, 0x000000AA),
- TextDrawFont(t, 0),
- TextDrawSetProportional(t, 1),
- TextDrawUseBox(t, true),
- TextDrawBoxColor(t, 0x00000000),
- TextDrawTextSize(t, 200.0, 620.0);
- // Global style 3.
- t = FIXES_gsGTStyle[3] = TextDrawCreate(320.000000, 154.500000, FIXES_gscSpace),
- TextDrawLetterSize(t, 0.600000, 2.750000),
- TextDrawAlignment(t, 2),
- TextDrawColor(t, 0x906210FF),
- TextDrawSetShadow(t, 0),
- TextDrawSetOutline(t, 2),
- TextDrawBackgroundColor(t, 0x000000AA),
- TextDrawFont(t, 2),
- TextDrawSetProportional(t, 1),
- TextDrawUseBox(t, true),
- TextDrawBoxColor(t, 0x00000000),
- TextDrawTextSize(t, 200.0, 620.0);
- // Global style 4.
- t = FIXES_gsGTStyle[4] = TextDrawCreate(320.000000, 115.500000, FIXES_gscSpace),
- TextDrawLetterSize(t, 0.600000, 2.750000),
- TextDrawAlignment(t, 2),
- TextDrawColor(t, 0x906210FF),
- TextDrawSetShadow(t, 0),
- TextDrawSetOutline(t, 2),
- TextDrawBackgroundColor(t, 0x000000AA),
- TextDrawFont(t, 2),
- TextDrawSetProportional(t, 1),
- TextDrawUseBox(t, true),
- TextDrawBoxColor(t, 0x00000000),
- TextDrawTextSize(t, 200.0, 620.0);
- // Global style 5.
- t = FIXES_gsGTStyle[5] = TextDrawCreate(320.0, 217.0, FIXES_gscSpace),
- TextDrawLetterSize(t, 0.6, 2.75),
- TextDrawAlignment(t, 2),
- TextDrawColor(t, 0xE1E1E1FF),
- TextDrawSetShadow(t, 0),
- TextDrawSetOutline(t, 2),
- TextDrawBackgroundColor(t, 0x000000AA),
- TextDrawFont(t, 2),
- TextDrawSetProportional(t, 1),
- TextDrawUseBox(t, true),
- TextDrawBoxColor(t, 0x00000000),
- TextDrawTextSize(t, 200.0, 620.0);
- // Global style 6.
- t = FIXES_gsGTStyle[6] = TextDrawCreate(320.000000, 60.000000, FIXES_gscSpace),
- TextDrawLetterSize(t, 1.000000, 3.599998),
- TextDrawAlignment(t, 2),
- TextDrawColor(t, 0xACCBF1FF),
- TextDrawSetShadow(t, 0),
- TextDrawSetOutline(t, 2),
- TextDrawBackgroundColor(t, 0x000000AA),
- TextDrawFont(t, 3),
- TextDrawSetProportional(t, 1),
- TextDrawUseBox(t, true),
- TextDrawBoxColor(t, 0x00000000),
- TextDrawTextSize(t, 200.0, 620.0);
- }
- else
- {
- new
- PlayerText:t;
- #if FIX_GameTextStyles
- // Global style 7 (playerid, vehicle name).
- t = FIXES_gsPGTStyle[playerid][7] = CreatePlayerTextDraw(playerid, 608.000000, 344.000000, FIXES_gscSpace),
- PlayerTextDrawLetterSize(playerid, t, 1.000000, 3.000000),
- PlayerTextDrawAlignment(playerid, t, 3),
- PlayerTextDrawColor(playerid, t, 0x36682CFF),
- PlayerTextDrawSetShadow(playerid, t, 0),
- PlayerTextDrawSetOutline(playerid, t, 2),
- PlayerTextDrawBackgroundColor(playerid, t, 0x000000AA),
- PlayerTextDrawFont(playerid, t, 2),
- PlayerTextDrawSetProportional(playerid, t, 1),
- PlayerTextDrawUseBox(playerid, t, true),
- PlayerTextDrawBoxColor(playerid, t, 0x00000000),
- PlayerTextDrawTextSize(playerid, t, 10.0, 200.0);
- // Global style 8 (playerid, location name).
- t = FIXES_gsPGTStyle[playerid][8] = CreatePlayerTextDraw(playerid, 608.000000, 386.500000, FIXES_gscSpace),
- PlayerTextDrawLetterSize(playerid, t, 1.200000, 3.799998),
- PlayerTextDrawAlignment(playerid, t, 3),
- PlayerTextDrawColor(playerid, t, 0xACCBF1FF),
- PlayerTextDrawSetShadow(playerid, t, 0),
- PlayerTextDrawSetOutline(playerid, t, 2),
- PlayerTextDrawBackgroundColor(playerid, t, 0x000000AA),
- PlayerTextDrawFont(playerid, t, 0),
- PlayerTextDrawSetProportional(playerid, t, 1),
- PlayerTextDrawUseBox(playerid, t, true),
- PlayerTextDrawBoxColor(playerid, t, 0x00000000),
- PlayerTextDrawTextSize(playerid, t, 10.0, 200.0);
- // Global style 9 (playerid, radio name).
- t = FIXES_gsPGTStyle[playerid][9] = CreatePlayerTextDraw(playerid, 320.000000, 22.000000, FIXES_gscSpace),
- PlayerTextDrawLetterSize(playerid, t, 0.600000, 1.899999),
- PlayerTextDrawAlignment(playerid, t, 2),
- PlayerTextDrawColor(playerid, t, 0x906210FF),
- PlayerTextDrawSetShadow(playerid, t, 0),
- PlayerTextDrawSetOutline(playerid, t, 1),
- PlayerTextDrawBackgroundColor(playerid, t, 170),
- PlayerTextDrawFont(playerid, t, 2),
- PlayerTextDrawSetProportional(playerid, t, 1),
- PlayerTextDrawUseBox(playerid, t, true),
- PlayerTextDrawBoxColor(playerid, t, 0x00000000),
- PlayerTextDrawTextSize(playerid, t, 200.0, 620.0);
- // Global style 10 (playerid, radio switch).
- t = FIXES_gsPGTStyle[playerid][10] = CreatePlayerTextDraw(playerid, 320.000000, 22.000000, FIXES_gscSpace),
- PlayerTextDrawLetterSize(playerid, t, 0.600000, 1.899999),
- PlayerTextDrawAlignment(playerid, t, 2),
- PlayerTextDrawColor(playerid, t, 0x969696FF),
- PlayerTextDrawSetShadow(playerid, t, 0),
- PlayerTextDrawSetOutline(playerid, t, 1),
- PlayerTextDrawBackgroundColor(playerid, t, 170),
- PlayerTextDrawFont(playerid, t, 2),
- PlayerTextDrawSetProportional(playerid, t, 1),
- PlayerTextDrawUseBox(playerid, t, true),
- PlayerTextDrawBoxColor(playerid, t, 0x00000000),
- PlayerTextDrawTextSize(playerid, t, 200.0, 620.0);
- // Global style 11 (playerid, positive money).
- t = FIXES_gsPGTStyle[playerid][11] = CreatePlayerTextDraw(playerid, 607.000000, 78.000000, FIXES_gscSpace),
- PlayerTextDrawLetterSize(playerid, t, 0.550000, 2.150000),
- PlayerTextDrawAlignment(playerid, t, 3),
- PlayerTextDrawColor(playerid, t, 0x36682CFF),
- PlayerTextDrawSetShadow(playerid, t, 0),
- PlayerTextDrawSetOutline(playerid, t, 2),
- PlayerTextDrawBackgroundColor(playerid, t, 0x000000FF),
- PlayerTextDrawFont(playerid, t, 3),
- PlayerTextDrawSetProportional(playerid, t, 1),
- PlayerTextDrawUseBox(playerid, t, true),
- PlayerTextDrawBoxColor(playerid, t, 0x00000000),
- PlayerTextDrawTextSize(playerid, t, 10.0, 200.0);
- // Global style 12 (playerid, negative money).
- t = FIXES_gsPGTStyle[playerid][12] = CreatePlayerTextDraw(playerid, 607.000000, 78.000000, FIXES_gscSpace),
- PlayerTextDrawLetterSize(playerid, t, 0.550000, 2.150000),
- PlayerTextDrawAlignment(playerid, t, 3),
- PlayerTextDrawColor(playerid, t, 0xB4191DFF),
- PlayerTextDrawSetShadow(playerid, t, 0),
- PlayerTextDrawSetOutline(playerid, t, 2),
- PlayerTextDrawBackgroundColor(playerid, t, 0x000000FF),
- PlayerTextDrawFont(playerid, t, 3),
- PlayerTextDrawSetProportional(playerid, t, 1),
- PlayerTextDrawUseBox(playerid, t, true),
- PlayerTextDrawBoxColor(playerid, t, 0x00000000),
- PlayerTextDrawTextSize(playerid, t, 10.0, 200.0);
- // Global style 13 (playerid, stunt).
- t = FIXES_gsPGTStyle[playerid][13] = CreatePlayerTextDraw(playerid, 380.000000, 341.000000, FIXES_gscSpace),
- PlayerTextDrawLetterSize(playerid, t, 0.579999, 2.400000),
- PlayerTextDrawTextSize(playerid, t, 40.000000, 460.000000),
- PlayerTextDrawAlignment(playerid, t, 2),
- PlayerTextDrawColor(playerid, t, 0xD7D3CCFF),
- PlayerTextDrawUseBox(playerid, t, true),
- PlayerTextDrawBoxColor(playerid, t, 0),
- PlayerTextDrawSetShadow(playerid, t, 2),
- PlayerTextDrawSetOutline(playerid, t, 0),
- PlayerTextDrawBackgroundColor(playerid, t, 170),
- PlayerTextDrawFont(playerid, t, 1),
- PlayerTextDrawSetProportional(playerid, t, 1);
- #endif
- // Global style 0.
- t = FIXES_gsPGTStyle[playerid][0] = CreatePlayerTextDraw(playerid, 320.0, 214.0, FIXES_gscSpace),
- PlayerTextDrawLetterSize(playerid, t, 1.3, 3.6),
- PlayerTextDrawAlignment(playerid, t, 2),
- PlayerTextDrawColor(playerid, t, 0x906210FF),
- PlayerTextDrawSetShadow(playerid, t, 0),
- PlayerTextDrawSetOutline(playerid, t, 2),
- PlayerTextDrawBackgroundColor(playerid, t, 0x000000AA),
- PlayerTextDrawFont(playerid, t, 3),
- PlayerTextDrawSetProportional(playerid, t, 1),
- PlayerTextDrawUseBox(playerid, t, true),
- PlayerTextDrawBoxColor(playerid, t, 0x00000000),
- PlayerTextDrawTextSize(playerid, t, 200.0, 620.0);
- // Global style 1.
- t = FIXES_gsPGTStyle[playerid][1] = CreatePlayerTextDraw(playerid, 620.0, 310.0, FIXES_gscSpace),
- PlayerTextDrawLetterSize(playerid, t, 1.0, 2.6),
- PlayerTextDrawAlignment(playerid, t, 3),
- PlayerTextDrawColor(playerid, t, 0x906210FF),
- PlayerTextDrawSetShadow(playerid, t, 0),
- PlayerTextDrawSetOutline(playerid, t, 2),
- PlayerTextDrawBackgroundColor(playerid, t, 0x000000AA),
- PlayerTextDrawFont(playerid, t, 3),
- PlayerTextDrawSetProportional(playerid, t, 1),
- PlayerTextDrawUseBox(playerid, t, true),
- PlayerTextDrawBoxColor(playerid, t, 0x00000000),
- PlayerTextDrawTextSize(playerid, t, 10.0, 200.0);
- // Global style 2.
- t = FIXES_gsPGTStyle[playerid][2] = CreatePlayerTextDraw(playerid, 320.0, 156.0, FIXES_gscSpace),
- PlayerTextDrawLetterSize(playerid, t, 2.1, 4.2),
- PlayerTextDrawAlignment(playerid, t, 2),
- PlayerTextDrawColor(playerid, t, 0xE1E1E1FF),
- PlayerTextDrawSetShadow(playerid, t, 0),
- PlayerTextDrawSetOutline(playerid, t, 3),
- PlayerTextDrawBackgroundColor(playerid, t, 0x000000AA),
- PlayerTextDrawFont(playerid, t, 0),
- PlayerTextDrawSetProportional(playerid, t, 1),
- PlayerTextDrawUseBox(playerid, t, true),
- PlayerTextDrawBoxColor(playerid, t, 0x00000000),
- PlayerTextDrawTextSize(playerid, t, 200.0, 620.0);
- // Global style 3.
- t = FIXES_gsPGTStyle[playerid][3] = CreatePlayerTextDraw(playerid, 320.000000, 154.500000, FIXES_gscSpace),
- PlayerTextDrawLetterSize(playerid, t, 0.600000, 2.750000),
- PlayerTextDrawAlignment(playerid, t, 2),
- PlayerTextDrawColor(playerid, t, 0x906210FF),
- PlayerTextDrawSetShadow(playerid, t, 0),
- PlayerTextDrawSetOutline(playerid, t, 2),
- PlayerTextDrawBackgroundColor(playerid, t, 0x000000AA),
- PlayerTextDrawFont(playerid, t, 2),
- PlayerTextDrawSetProportional(playerid, t, 1),
- PlayerTextDrawUseBox(playerid, t, true),
- PlayerTextDrawBoxColor(playerid, t, 0x00000000),
- PlayerTextDrawTextSize(playerid, t, 200.0, 620.0);
- // Global style 4.
- t = FIXES_gsPGTStyle[playerid][4] = CreatePlayerTextDraw(playerid, 320.000000, 115.500000, FIXES_gscSpace),
- PlayerTextDrawLetterSize(playerid, t, 0.600000, 2.750000),
- PlayerTextDrawAlignment(playerid, t, 2),
- PlayerTextDrawColor(playerid, t, 0x906210FF),
- PlayerTextDrawSetShadow(playerid, t, 0),
- PlayerTextDrawSetOutline(playerid, t, 2),
- PlayerTextDrawBackgroundColor(playerid, t, 0x000000AA),
- PlayerTextDrawFont(playerid, t, 2),
- PlayerTextDrawSetProportional(playerid, t, 1),
- PlayerTextDrawUseBox(playerid, t, true),
- PlayerTextDrawBoxColor(playerid, t, 0x00000000),
- PlayerTextDrawTextSize(playerid, t, 200.0, 620.0);
- // Global style 5.
- t = FIXES_gsPGTStyle[playerid][5] = CreatePlayerTextDraw(playerid, 320.0, 217.0, FIXES_gscSpace),
- PlayerTextDrawLetterSize(playerid, t, 0.6, 2.75),
- PlayerTextDrawAlignment(playerid, t, 2),
- PlayerTextDrawColor(playerid, t, 0xE1E1E1FF),
- PlayerTextDrawSetShadow(playerid, t, 0),
- PlayerTextDrawSetOutline(playerid, t, 2),
- PlayerTextDrawBackgroundColor(playerid, t, 0x000000AA),
- PlayerTextDrawFont(playerid, t, 2),
- PlayerTextDrawSetProportional(playerid, t, 1),
- PlayerTextDrawUseBox(playerid, t, true),
- PlayerTextDrawBoxColor(playerid, t, 0x00000000),
- PlayerTextDrawTextSize(playerid, t, 200.0, 620.0);
- // Global style 6.
- t = FIXES_gsPGTStyle[playerid][6] = CreatePlayerTextDraw(playerid, 320.000000, 60.000000, FIXES_gscSpace),
- PlayerTextDrawLetterSize(playerid, t, 1.000000, 3.599998),
- PlayerTextDrawAlignment(playerid, t, 2),
- PlayerTextDrawColor(playerid, t, 0xACCBF1FF),
- PlayerTextDrawSetShadow(playerid, t, 0),
- PlayerTextDrawSetOutline(playerid, t, 2),
- PlayerTextDrawBackgroundColor(playerid, t, 0x000000AA),
- PlayerTextDrawFont(playerid, t, 3),
- PlayerTextDrawSetProportional(playerid, t, 1),
- PlayerTextDrawUseBox(playerid, t, true),
- PlayerTextDrawBoxColor(playerid, t, 0x00000000),
- PlayerTextDrawTextSize(playerid, t, 200.0, 620.0);
- }
- }
- #endif
- /*
- * OnFilterScriptInit()
- *
- * Set "IS_FILTERSCRIPT" to true as this callback is ONLY called if this script
- * is actually a FilterScript. Then call "FIXES_OnScriptInit".
- *
- * FIXES:
- * IS_FILTERSCRIPT
- * OnPlayerConnect
- * GameText
- */
- public OnFilterScriptInit()
- {
- // It is possible for this to be the only thing done in this function!
- _FIXES_gIsFilterscript = true;
- state _ALS : _ALS_go;
- #if FIXES_Single
- // Check this really IS the only script running.
- if (existproperty(5, FIXES_gscSingleProperty))
- {
- print(FIXES_gscFixesError);
- }
- else
- {
- FIXES_gsSettings &= ~e_FIXES_SETTINGS_SECOND_USE,
- setproperty(5, FIXES_gscSingleProperty, 1);
- }
- #endif
- // =================
- // BEGIN: GameText
- // =================
- #if FIX_GameText
- for (new i = 0; i != sizeof (FIXES_gsPlayerPGTShown); ++i)
- {
- FIXES_gsPlayerPGTShown[i][MAX_PLAYERS] = MAX_PLAYERS;
- }
- #endif
- #if FIXES_Single
- #if FIX_GameText
- _FIXES_CreateGameTextDraws(INVALID_PLAYER_ID);
- #endif
- // =================
- // END: GameText
- // =================
- #else
- FIXES_DetermineOrder(),
- FIXES_gsSettings &= ~e_FIXES_SETTINGS_DROP_ALL_DATA;
- #endif
- #if !FIXES_Single && FIX_GameText && FIX_OnPlayerConnect
- FIXES_gsSettings |= e_FIXES_SETTINGS_NO_GAME_TEXT;
- #endif
- // These are all the fixes that use "_FIXES_FOREACH".
- #if FIX_OnPlayerConnect || _FIX_Menus || FIX_GetPlayerMenu || FIX_OnPlayerDisconnect || FIX_GameText || FIX_AllowInteriorWeapons || FIX_SetPlayerWorldBounds || FIX_TogglePlayerControllable
- for (new playerid = 0; playerid != MAX_PLAYERS; ++playerid)
- {
- if (BAD_IsPlayerConnected(playerid))
- {
- // No "defined" checks - if you don't want this fix because
- // you don't have an "OnPlayerConnect", just don't use it!
- // Of course, it helps that the copy of "OnPlayerConnect"
- // in this include is almost always called!
- #if FIX_OnPlayerConnect
- // ========================
- // BEGIN: OnPlayerConnect
- // ========================
- OnPlayerConnect(playerid);
- // ========================
- // END: OnPlayerConnect
- // ========================
- #else
- _FIXES_AddInternal(FIXES_gsPlayersIterator, playerid, MAX_PLAYERS);
- #if FIX_GameText
- // =================
- // BEGIN: GameText
- // =================
- _FIXES_IS_IN_CHARGE()
- {
- _FIXES_CreateGameTextDraws(playerid);
- }
- // =================
- // END: GameText
- // =================
- #endif
- #endif
- }
- }
- #endif
- #if !FIXES_Single && FIX_GameText && FIX_OnPlayerConnect
- FIXES_gsSettings &= ~e_FIXES_SETTINGS_NO_GAME_TEXT;
- #endif
- return FIXES_OnFilterScriptInit();
- }
- #if defined _ALS_OnFilterScriptInit
- #error _ALS_OnFilterScriptInit defined
- #endif
- #define _ALS_OnFilterScriptInit
- #define OnFilterScriptInit(%0) FIXES_OnFilterScriptInit(%0) <_ALS : _ALS_go>
- _FIXES_FORWARD FIXES_OnFilterScriptInit();
- /*
- * OnGameModeInit()
- *
- * Call "FIXES_OnScriptInit" if this is not a FilterScript.
- *
- * FIXES:
- * IS_FILTERSCRIPT
- * AllowInteriorWeapons
- * AllowTeleport
- */
- public OnGameModeInit()
- {
- state _ALS : _ALS_go;
- #if FIXES_Single
- // Check this really IS the only script running. Properties reset when
- // a gamemode restarts, so we don't have to worry about filterscipts
- // detecting themselves.
- if (FIXES_gsSettings & e_FIXES_SETTINGS_SECOND_USE)
- {
- if (existproperty(5, FIXES_gscSingleProperty))
- {
- print(FIXES_gscFixesError);
- }
- else
- {
- setproperty(5, FIXES_gscSingleProperty, 1);
- }
- }
- else
- {
- // When the server starts, we need to allow an FS to load with a GM
- // that doesn't use fixes.inc. This is the only case where a
- // property can be set while a ganemode isn't running. This will
- // mean that the FS won't complain if they are both using fixes, but
- // the GM still will, so all is good.
- FIXES_gsSettings |= e_FIXES_SETTINGS_SECOND_USE;
- }
- #endif
- // =============================
- // BEGIN: AllowInteriorWeapons
- // =============================
- // ======================
- // BEGIN: AllowTeleport
- // ======================
- #if FIX_AllowInteriorWeapons && FIX_AllowTeleport && !defined FILTERSCRIPT
- FIXES_gsSettings &= ~(e_FIXES_SETTINGS_INTERIOR | e_FIXES_SETTINGS_ADMIN_TELEPORT);
- #elseif FIX_AllowInteriorWeapons
- FIXES_gsSettings &= ~e_FIXES_SETTINGS_INTERIOR;
- #elseif FIX_AllowTeleport && !defined FILTERSCRIPT
- FIXES_gsSettings &= ~e_FIXES_SETTINGS_ADMIN_TELEPORT;
- #endif
- // ======================
- // END: AllowTeleport
- // ======================
- // ===========================
- // END: AllowInteriorWeapons
- // ===========================
- #if FIX_GameText || !FIXES_Single
- if (!_FIXES_gIsFilterscript)
- {
- // =================
- // BEGIN: GameText
- // =================
- #if FIX_GameText
- for (new i = 0; i != sizeof (FIXES_gsPlayerPGTShown); ++i)
- {
- FIXES_gsPlayerPGTShown[i][MAX_PLAYERS] = MAX_PLAYERS;
- }
- #if FIXES_Single
- _FIXES_CreateGameTextDraws(INVALID_PLAYER_ID);
- #endif
- #endif
- // =================
- // END: GameText
- // =================
- #if !FIXES_Single
- FIXES_DetermineOrder();
- #endif
- }
- #endif
- #if !FIXES_Single
- FIXES_gsSettings &= ~e_FIXES_SETTINGS_DROP_ALL_DATA;
- #endif
- return FIXES_OnGameModeInit();
- }
- #if defined _ALS_OnGameModeInit
- #error _ALS_OnGameModeInit defined
- #endif
- #define _ALS_OnGameModeInit
- #define OnGameModeInit(%0) FIXES_OnGameModeInit(%0) <_ALS : _ALS_go>
- _FIXES_FORWARD FIXES_OnGameModeInit();
- /*
- * OnGameModeExit()
- *
- * Fast way of detecting not to retain any data.
- */
- #if !FIXES_Single || FIX_PlayerDialogResponse
- public OnGameModeExit()
- {
- #if !FIXES_Single
- FIXES_gsSettings |= e_FIXES_SETTINGS_DROP_ALL_DATA;
- if (!_FIXES_gIsFilterscript && FIXES_gsSettings & e_FIXES_SETTINGS_IN_CHARGE)
- {
- FIXES_gsSettings |= e_FIXES_SETTINGS_ENDING,
- FIXES_DetermineOrder();
- }
- #endif
- // =============================
- // BEGIN: PlayerDialogResponse
- // =============================
- #if FIX_PlayerDialogResponse
- for (new playerid = 0; playerid != MAX_PLAYERS; ++playerid)
- {
- ShowPlayerDialog(playerid, -1, 0, FIXES_gscSpace, FIXES_gscSpace, FIXES_gscSpace, FIXES_gscSpace);
- }
- #endif
- // =============================
- // END: PlayerDialogResponse
- // =============================
- return FIXES_OnGameModeExit();
- }
- #if defined _ALS_OnGameModeExit
- #error _ALS_OnGameModeExit defined
- #endif
- #define _ALS_OnGameModeExit
- #define OnGameModeExit(%0) FIXES_OnGameModeExit(%0) <_ALS : _ALS_go>
- _FIXES_FORWARD FIXES_OnGameModeExit();
- #endif
- /*
- * OnFilterScriptExit()
- *
- * Fast way of detecting not to retain any data.
- */
- #if !FIXES_Single || FIX_GameText || FIX_OnPlayerDisconnect
- public OnFilterScriptExit()
- {
- #if FIX_OnPlayerDisconnect
- // Removal safe loop.
- for (new next, playerid = FIXES_gsPlayersIterator[MAX_PLAYERS]; playerid != MAX_PLAYERS; playerid = next)
- {
- next = FIXES_gsPlayersIterator[playerid],
- OnPlayerDisconnect(playerid, 4);
- #if FIXES_Single
- // =================
- // BEGIN: GameText
- // =================
- #if FIX_GameText
- #if FIX_GameTextStyles
- PlayerTextDrawDestroy(playerid, FIXES_gsPGTStyle[playerid][13]),
- PlayerTextDrawDestroy(playerid, FIXES_gsPGTStyle[playerid][12]),
- PlayerTextDrawDestroy(playerid, FIXES_gsPGTStyle[playerid][11]),
- PlayerTextDrawDestroy(playerid, FIXES_gsPGTStyle[playerid][10]),
- PlayerTextDrawDestroy(playerid, FIXES_gsPGTStyle[playerid][9]),
- PlayerTextDrawDestroy(playerid, FIXES_gsPGTStyle[playerid][8]),
- PlayerTextDrawDestroy(playerid, FIXES_gsPGTStyle[playerid][7]),
- #endif
- PlayerTextDrawDestroy(playerid, FIXES_gsPGTStyle[playerid][6]),
- PlayerTextDrawDestroy(playerid, FIXES_gsPGTStyle[playerid][5]),
- PlayerTextDrawDestroy(playerid, FIXES_gsPGTStyle[playerid][4]),
- PlayerTextDrawDestroy(playerid, FIXES_gsPGTStyle[playerid][3]),
- PlayerTextDrawDestroy(playerid, FIXES_gsPGTStyle[playerid][2]),
- PlayerTextDrawDestroy(playerid, FIXES_gsPGTStyle[playerid][1]),
- PlayerTextDrawDestroy(playerid, FIXES_gsPGTStyle[playerid][0]);
- #endif
- #endif
- }
- #endif
- #if FIXES_Single
- // =================
- // BEGIN: GameText
- // =================
- #if FIX_GameText
- #if defined FIXES_OnFilterScriptExit
- FIXES_OnFilterScriptExit();
- #endif
- #if !FIX_OnPlayerDisconnect
- _FIXES_FOREACH(FIXES_gsPlayersIterator, playerid)
- {
- #if FIX_GameTextStyles
- PlayerTextDrawDestroy(playerid, FIXES_gsPGTStyle[playerid][13]),
- PlayerTextDrawDestroy(playerid, FIXES_gsPGTStyle[playerid][12]),
- PlayerTextDrawDestroy(playerid, FIXES_gsPGTStyle[playerid][11]),
- PlayerTextDrawDestroy(playerid, FIXES_gsPGTStyle[playerid][10]),
- PlayerTextDrawDestroy(playerid, FIXES_gsPGTStyle[playerid][9]),
- PlayerTextDrawDestroy(playerid, FIXES_gsPGTStyle[playerid][8]),
- PlayerTextDrawDestroy(playerid, FIXES_gsPGTStyle[playerid][7]),
- #endif
- PlayerTextDrawDestroy(playerid, FIXES_gsPGTStyle[playerid][6]),
- PlayerTextDrawDestroy(playerid, FIXES_gsPGTStyle[playerid][5]),
- PlayerTextDrawDestroy(playerid, FIXES_gsPGTStyle[playerid][4]),
- PlayerTextDrawDestroy(playerid, FIXES_gsPGTStyle[playerid][3]),
- PlayerTextDrawDestroy(playerid, FIXES_gsPGTStyle[playerid][2]),
- PlayerTextDrawDestroy(playerid, FIXES_gsPGTStyle[playerid][1]),
- PlayerTextDrawDestroy(playerid, FIXES_gsPGTStyle[playerid][0]);
- }
- #endif
- return
- #if FIX_GameTextStyles
- TextDrawDestroy(FIXES_gsGTStyle[13]),
- TextDrawDestroy(FIXES_gsGTStyle[12]),
- TextDrawDestroy(FIXES_gsGTStyle[11]),
- TextDrawDestroy(FIXES_gsGTStyle[10]),
- TextDrawDestroy(FIXES_gsGTStyle[9]),
- TextDrawDestroy(FIXES_gsGTStyle[8]),
- TextDrawDestroy(FIXES_gsGTStyle[7]),
- #endif
- TextDrawDestroy(FIXES_gsGTStyle[6]),
- TextDrawDestroy(FIXES_gsGTStyle[5]),
- TextDrawDestroy(FIXES_gsGTStyle[4]),
- TextDrawDestroy(FIXES_gsGTStyle[3]),
- TextDrawDestroy(FIXES_gsGTStyle[2]),
- TextDrawDestroy(FIXES_gsGTStyle[1]),
- TextDrawDestroy(FIXES_gsGTStyle[0]);
- #else
- return FIXES_OnFilterScriptExit();
- #endif
- // =================
- // END: GameText
- // =================
- #else
- if (FIXES_gsSettings & e_FIXES_SETTINGS_IN_CHARGE)
- {
- FIXES_gsSettings |= e_FIXES_SETTINGS_ENDING,
- FIXES_DetermineOrder();
- }
- return FIXES_OnFilterScriptExit();
- #endif
- }
- #if defined _ALS_OnFilterScriptExit
- #error _ALS_OnFilterScriptExit defined
- #endif
- #define _ALS_OnFilterScriptExit
- #define OnFilterScriptExit(%0) FIXES_OnFilterScriptExit(%0) <_ALS : _ALS_go>
- _FIXES_FORWARD FIXES_OnFilterScriptExit();
- #endif
- /*
- * OnPlayerCommandText(playerid, cmdtext[])
- *
- * FIXES:
- * OnPlayerCommandText
- */
- #if FIX_OnPlayerCommandText
- public OnPlayerCommandText(playerid, cmdtext[])
- {
- // ============================
- // BEGIN: OnPlayerCommandText
- // ============================
- #if FIX_OnPlayerCommandText
- // If this "#if" is around the whole function, it doesn't always
- // compile properly.
- return FIXES_OnPlayerCommandText(playerid, (cmdtext[0] <= '\1') ? FIXES_gscNULL : cmdtext);
- #endif
- // ============================
- // END: OnPlayerCommandText
- // ============================
- }
- #if defined _ALS_OnPlayerCommandText
- #error _ALS_OnPlayerCommandText defined
- #endif
- #define _ALS_OnPlayerCommandText
- #define OnPlayerCommandText(%0) FIXES_OnPlayerCommandText(%0) <_ALS : _ALS_go>
- forward FIXES_OnPlayerCommandText(playerid, cmdtext[]);
- public FIXES_OnPlayerCommandText(playerid, cmdtext[]) <_ALS : _ALS_x0, _ALS : _ALS_x1> { return 0; }
- public FIXES_OnPlayerCommandText(playerid, cmdtext[]) <> { return 0; }
- #endif
- /*
- * OnPlayerConnect(playerid)
- *
- * Almost every fix uses this callback for initialisation. It is only
- * explicitly referenced for those fixes where this is all the code. The
- * inclusion code was approaching the 512 line length limit, so I shrank it.
- *
- * FIXES:
- * TogglePlayerControllable
- * SetPlayerWorldBounds
- * GetPlayerColor
- * SetPlayerName
- * GetPlayerSkin
- * IsPlayerInCheckpoint
- * IsPlayerInRaceCheckpoint
- * GetPlayerWeapon
- * PutPlayerInVehicle
- * OnPlayerEnterVehicle
- * AllowTeleport
- * OnDialogResponse
- * SetSpawnInfo
- * AllowInteriorWeapons
- * TrainExit
- * Kick
- * OnPlayerEnterVehicle_2
- * PlayerDialogResponse
- * OnPlayerSpawn
- * ApplyAnimation_2
- */
- #if FIX_SetPlayerWorldBounds || FIX_TogglePlayerControllable || FIX_SetPlayerName || FIX_GetPlayerColour
- #define _FIXES_ON_PLAYER_CONNECT
- #elseif FIX_GetPlayerSkin || FIX_IsPlayerInCheckpoint || FIX_IsPlayerInRaceCheckpoint || FIX_GetPlayerWeapon
- #define _FIXES_ON_PLAYER_CONNECT
- #elseif FIX_PutPlayerInVehicle || FIX_OnPlayerEnterVehicle || FIX_AllowTeleport || FIX_OnDialogResponse
- #define _FIXES_ON_PLAYER_CONNECT
- #elseif FIX_GetPlayerDialog || FIX_SetSpawnInfo || FIX_AllowInteriorWeapons || FIX_TrainExit
- #define _FIXES_ON_PLAYER_CONNECT
- #elseif FIX_Kick || FIX_OnPlayerEnterVehicle_2 || FIX_PlayerDialogResponse || FIX_GetPlayerInterior
- #define _FIXES_ON_PLAYER_CONNECT
- #elseif FIX_OnPlayerSpawn || FIX_ApplyAnimation_2 || FIX_GameText || _FIX_Menus
- #define _FIXES_ON_PLAYER_CONNECT
- #elseif FIX_GetPlayerMenu || FIX_OnPlayerDisconnect || FIX_OnPlayerConnect || FIX_SetPlayerTime
- #define _FIXES_ON_PLAYER_CONNECT
- #elseif FIX_SetPlayerColour
- #define _FIXES_ON_PLAYER_CONNECT
- #endif
- #if defined _FIXES_ON_PLAYER_CONNECT
- public OnPlayerConnect(playerid)
- {
- // ==================================
- // BEGIN: ApplyAnimation_2
- // ==================================
- #if FIX_ApplyAnimation_2
- FIXES_gsPlayerAnimLibs[playerid][0] =
- FIXES_gsPlayerAnimLibs[playerid][1] =
- FIXES_gsPlayerAnimLibs[playerid][2] =
- FIXES_gsPlayerAnimLibs[playerid][3] =
- FIXES_gsPlayerAnimLibs[playerid][4] = -1;
- #endif
- // ================================
- // END: ApplyAnimation_2
- // ================================
- #if _FIX_Menus || FIX_GetPlayerMenu || FIX_OnPlayerDisconnect || FIX_GameText || FIX_AllowInteriorWeapons || FIX_SetPlayerWorldBounds || FIX_TogglePlayerControllable
- _FIXES_AddInternal(FIXES_gsPlayersIterator, playerid, MAX_PLAYERS);
- #endif
- FIXES_PRINTF("FIXES_OnPlayerConnect: %d", playerid);
- // This is only reset when the Game Mode changes or when a new
- #if FIX_Kick || FIX_SetPlayerWorldBounds || FIX_TogglePlayerControllable || FIX_PutPlayerInVehicle || FIX_OnPlayerEnterVehicle || FIX_AllowTeleport || FIX_AllowInteriorWeapons || FIX_TrainExit || FIX_OnPlayerEnterVehicle_2 || FIX_SetPlayerColour
- // player connects, which is what we want. The other items are the
- // same, but must be done only once. This variable will tend to
- // hold data relevant only in the master script (the first
- // filterscript).
- #if FIX_Kick || FIX_SetPlayerTime || FIX_SetPlayerColour
- FIXES_gsPlayerBools[playerid] = e_FIXES_BOOLS_ON_PLAYER_CONNECT;
- #else
- FIXES_gsPlayerBools[playerid] = e_FIXES_BOOLS_NONE;
- #endif
- #endif
- // =================
- // BEGIN: GameText
- // =================
- #if FIX_GameText
- #if !FIXES_Single
- if (FIXES_gsSettings & (e_FIXES_SETTINGS_NO_GAME_TEXT | e_FIXES_SETTINGS_IN_CHARGE) == e_FIXES_SETTINGS_IN_CHARGE)
- #endif
- {
- _FIXES_CreateGameTextDraws(playerid);
- }
- #endif
- // =================
- // END: GameText
- // =================
- #if !FIXES_Single
- if (!GetPVarInt(playerid, FIXES_pvarNotNewPlayer))
- #endif
- {
- FIXES_PRINTF("FIXES_OnPlayerConnect: First (%d)", FIXES_gsSettings & e_FIXES_SETTINGS_IN_CHARGE);
- // ======================
- // BEGIN: SetPlayerName
- // ======================
- #if FIX_SetPlayerName
- new
- name[MAX_PLAYER_NAME];
- GetPlayerName(playerid, name, MAX_PLAYER_NAME);
- if (strcmp(name, FIXES_gscTempName) == 0)
- {
- Kick(playerid);
- }
- #endif
- // ======================
- // END: SetPlayerName
- // ======================
- // =============================
- // BEGIN: SetPlayerWorldBounds
- // =============================
- #if FIX_SetPlayerWorldBounds && !FIXES_Single
- FIXES_gsWorldbounds[playerid][E_FIXES_WORLDBOUND_DATA_LX] =
- FIXES_gsWorldbounds[playerid][E_FIXES_WORLDBOUND_DATA_UX] =
- FIXES_gsWorldbounds[playerid][E_FIXES_WORLDBOUND_DATA_LY] =
- FIXES_gsWorldbounds[playerid][E_FIXES_WORLDBOUND_DATA_UY] =
- 0.0;
- #endif
- // =============================
- // END: SetPlayerWorldBounds
- // =============================
- // =======================
- // BEGIN: GetPlayerColor
- // =======================
- /*#if FIX_GetPlayerColour
- SetPlayerColor(playerid, FIXES_gscPlayerColours[playerid % 100]);
- #endif*/
- // =======================
- // END: GetPlayerColor
- // =======================
- // ======================
- // BEGIN: GetPlayerSkin
- // ======================
- #if FIX_GetPlayerSkin
- #if FIXES_Single
- FIXES_gsPlayerSkin[playerid] = 0;
- #else
- SetPVarInt(playerid, FIXES_pvarPlayerSkin, 0);
- #endif
- #endif
- // ======================
- // END: GetPlayerSkin
- // ======================
- // =============================
- // BEGIN: IsPlayerInCheckpoint
- // =============================
- #if FIX_IsPlayerInCheckpoint
- DisablePlayerCheckpoint(playerid);
- #endif
- // =============================
- // END: IsPlayerInCheckpoint
- // =============================
- // =================================
- // BEGIN: IsPlayerInRaceCheckpoint
- // =================================
- #if FIX_IsPlayerInRaceCheckpoint
- DisablePlayerRaceCheckpoint(playerid);
- #endif
- // =================================
- // END: IsPlayerInRaceCheckpoint
- // =================================
- // ========================
- // BEGIN: GetPlayerWeapon
- // ========================
- #if FIX_GetPlayerWeapon
- #if FIXES_Single
- FIXES_gsPlayerWeapon[playerid] = -1;
- #else
- SetPVarInt(playerid, FIXES_pvarPlayerWeapon, -1);
- #endif
- #endif
- // ========================
- // END: GetPlayerWeapon
- // ========================
- // ==========================
- // BEGIN: GetPlayerInterior
- // ==========================
- #if FIX_GetPlayerInterior
- #if FIXES_Single
- FIXES_gsInterior[playerid] = 0;
- #else
- SetPVarInt(playerid, FIXES_pvarPlayerInterior, 0);
- #endif
- #endif
- // ==========================
- // END: GetPlayerInterior
- // ==========================
- // =========================
- // BEGIN: OnDialogResponse
- // =========================
- #if FIX_OnDialogResponse || FIX_GetPlayerDialog
- #if FIXES_Single
- FIXES_gsDialogID[playerid] = INVALID_DIALOG_ID;
- #else
- SetPVarInt(playerid, FIXES_pvarPlayerDialog, INVALID_DIALOG_ID);
- #endif
- #endif
- // =========================
- // END: OnDialogResponse
- // =========================
- // =============================
- // BEGIN: PlayerDialogResponse
- // =============================
- #if FIX_PlayerDialogResponse
- ShowPlayerDialog(playerid, -1, 0, FIXES_gscSpace, FIXES_gscSpace, FIXES_gscSpace, FIXES_gscSpace);
- #endif
- // =============================
- // END: PlayerDialogResponse
- // =============================
- // =====================
- // BEGIN: SetSpawnInfo
- // =====================
- #if FIX_SetSpawnInfo
- SetSpawnInfo(playerid, NO_TEAM, 0, 0.0, 0.0, 0.0, 0.0, 0, 0, 0, 0, 0, 0);
- #endif
- // =====================
- // END: SetSpawnInfo
- // =====================
- // ======================
- // BEGIN: OnPlayerSpawn
- // ======================
- #if FIX_OnPlayerSpawn
- #if FIXES_Single
- FIXES_gsLastCash[playerid] = 0;
- #else
- SetPVarInt(playerid, FIXES_pvarPlayerLastCash, 0);
- #endif
- #endif
- // ======================
- // END: OnPlayerSpawn
- // ======================
- #if !FIXES_Single
- // No longer their first time.
- SetPVarInt(playerid, FIXES_pvarNotNewPlayer, 1);
- #endif
- }
- // =============
- // BEGIN: Kick
- // =============
- #if FIX_Kick || FIX_SetPlayerTime || FIX_SetPlayerColour
- new
- ret = FIXES_OnPlayerConnect(playerid);
- FIXES_gsPlayerBools[playerid] &= ~e_FIXES_BOOLS_ON_PLAYER_CONNECT;
- return ret;
- #else
- return FIXES_OnPlayerConnect(playerid);
- #endif
- // =============
- // END: Kick
- // =============
- }
- #if defined _ALS_OnPlayerConnect
- #error _ALS_OnPlayerConnect defined
- #endif
- #define _ALS_OnPlayerConnect
- #define OnPlayerConnect(%0) FIXES_OnPlayerConnect(%0) <_ALS : _ALS_go>
- _FIXES_FORWARD FIXES_OnPlayerConnect(playerid);
- #endif
- /*
- * OnPlayerDisconnect(playerid, reason)
- *
- * FIXES:
- * SetPlayerAttachedObject
- * IsPlayerAttachedObjectSlotUsed
- * Kick
- * GetPlayerMenu
- */
- #if FIX_SetPlayerAttachedObject || FIX_IsPlayerAttachedObjSlotUsed || FIX_Kick || (FIXES_SilentKick && (FIX_OnVehicleMod || FIX_OnPlayerEnterVehicle || FIX_OnPlayerEnterVehicle_2)) || FIX_GetPlayerMenu || _FIX_Menus || FIX_OnPlayerDisconnect || FIX_GameText || FIX_AllowInteriorWeapons || FIX_SetPlayerWorldBounds || FIX_TogglePlayerControllable || FIX_ApplyAnimation_2
- public OnPlayerDisconnect(playerid, reason)
- {
- new
- ret = FIXES_OnPlayerDisconnect(playerid, reason);
- // =========================
- // BEGIN: ApplyAnimation_2
- // =========================
- #if FIX_ApplyAnimation_2
- if (FIXES_gsPlayerAnimTimer[playerid])
- {
- KillTimer(FIXES_gsPlayerAnimTimer[playerid]),
- FIXES_gsPlayerAnimTimer[playerid] = 0;
- }
- #endif
- // =======================
- // END: ApplyAnimation_2
- // =======================
- // ======================
- // BEGIN: GetPlayerMenu
- // ======================
- #if FIX_GetPlayerMenu
- FIXES_gsCurrentMenu[playerid] = Menu:INVALID_MENU;
- #endif
- // ======================
- // END: GetPlayerMenu
- // ======================
- // ==========================
- // BEGIN: FIXES_SilentKick
- // ==========================
- #if FIXES_SilentKick && (FIX_OnVehicleMod || FIX_OnPlayerEnterVehicle || FIX_OnPlayerEnterVehicle_2)
- new
- shift = FIXES_gsPlayerIP[playerid];
- if (shift != -1)
- {
- // Unban the IP (timed out).
- new
- ip[16];
- format(ip, sizeof (ip), "unbanip %d.%d.%d.%d", shift >>> 24, (shift >>> 16) & 0xFF, (shift >>> 8) & 0xFF, shift & 0xFF),
- FIXES_gsPlayerIP[playerid] = -1;
- }
- #endif
- // ==========================
- // END: FIXES_SilentKick
- // ==========================
- // ================================
- // BEGIN: SetPlayerAttachedObject
- // ================================
- #if FIX_SetPlayerAttachedObject
- #if !(FIXES_SilentKick && (FIX_OnVehicleMod || FIX_OnPlayerEnterVehicle || FIX_OnPlayerEnterVehicle_2))
- new
- #endif
- shift = playerid % _FIXES_ATTACHMENTS * MAX_PLAYER_ATTACHED_OBJECTS;
- #pragma tabsize 4
- new
- slot = playerid / _FIXES_ATTACHMENTS;
- #if !FIXES_Single
- if (!_FIXES_gIsFilterscript)
- #endif
- {
- for (new i = 0; i != MAX_PLAYER_ATTACHED_OBJECTS; ++i)
- {
- if (FIXES_gsObjectSlots[slot] & 1 << shift + i)
- {
- RemovePlayerAttachedObject(playerid, i);
- }
- }
- }
- #pragma tabsize 4
- FIXES_gsObjectSlots[slot] &= ~((1 << MAX_PLAYER_ATTACHED_OBJECTS) - 1 << shift);
- #endif
- // ================================
- // END: SetPlayerAttachedObject
- // ================================
- // =======================================
- // BEGIN: IsPlayerAttachedObjectSlotUsed
- // =======================================
- #if FIX_IsPlayerAttachedObjSlotUsed && !FIX_SetPlayerAttachedObject
- FIXES_gsObjectSlots[playerid / _FIXES_ATTACHMENTS] &= ~((1 << MAX_PLAYER_ATTACHED_OBJECTS) - 1 << playerid % _FIXES_ATTACHMENTS * MAX_PLAYER_ATTACHED_OBJECTS);
- #endif
- // =======================================
- // END: IsPlayerAttachedObjectSlotUsed
- // =======================================
- // =============
- // BEGIN: Kick
- // =============
- #if FIX_Kick
- if (FIXES_gsPlayerBools[playerid] & e_FIXES_BOOLS_KICKED)
- {
- // Stop the timer if it is still running.
- KillTimer(GetPVarInt(playerid, FIXES_pvarKick));
- }
- #endif
- // =============
- // END: Kick
- // =============
- #if _FIX_Menus || FIX_GetPlayerMenu || FIX_OnPlayerDisconnect || FIX_GameText || FIX_AllowInteriorWeapons || FIX_SetPlayerWorldBounds || FIX_TogglePlayerControllable
- _FIXES_RemoveInternal(FIXES_gsPlayersIterator, playerid, MAX_PLAYERS);
- #endif
- return ret;
- }
- #if defined _ALS_OnPlayerDisconnect
- #error _ALS_OnPlayerDisconnect defined
- #endif
- #define _ALS_OnPlayerDisconnect
- #define OnPlayerDisconnect(%0) FIXES_OnPlayerDisconnect(%0) <_ALS : _ALS_go>
- _FIXES_FORWARD FIXES_OnPlayerDisconnect(playerid, reason);
- #endif
- /*
- * OnPlayerDeath(playerid, killerid, reason)
- *
- * FIXES:
- * OnPlayerDeath
- * OnPlayerSpawn
- */
- #if FIX_OnPlayerDeath || FIX_OnPlayerSpawn
- public OnPlayerDeath(playerid, killerid, reason)
- {
- _FIXES_IS_IN_CHARGE()
- {
- // ======================
- // BEGIN: OnPlayerDeath
- // ======================
- #if FIX_OnPlayerDeath
- static
- sAnimlib[32],
- sAnimname[32];
- GetAnimationName(FIXES_gsLastAnimation[playerid], sAnimlib, sizeof (sAnimlib), sAnimname, sizeof (sAnimname));
- if (strcmp(sAnimlib, "PED", true))
- {
- ClearAnimations(playerid);
- }
- #endif
- // ======================
- // END: OnPlayerDeath
- // ======================
- }
- // ======================
- // BEGIN: OnPlayerSpawn
- // ======================
- #if FIX_OnPlayerSpawn
- new
- ret = FIXES_OnPlayerDeath(playerid, killerid, reason);
- #if FIXES_Single
- FIXES_gsLastCash[playerid] = GetPlayerMoney(playerid);
- #else
- SetPVarInt(playerid, FIXES_pvarPlayerLastCash, GetPlayerMoney(playerid));
- #endif
- return ret;
- #else
- return FIXES_OnPlayerDeath(playerid, killerid, reason);
- #endif
- // ======================
- // END: OnPlayerSpawn
- // ======================
- }
- #if defined _ALS_OnPlayerDeath
- #error _ALS_OnPlayerDeath defined
- #endif
- #define _ALS_OnPlayerDeath
- #define OnPlayerDeath(%0) FIXES_OnPlayerDeath(%0) <_ALS : _ALS_go>
- _FIXES_FORWARD FIXES_OnPlayerDeath(playerid, killerid, reason);
- #endif
- /*
- * FIXES_SpawnPlayer(playerid)
- *
- * FIXES:
- * SpawnPlayer
- */
- #if defined _ALS_SpawnPlayer
- #error _ALS_SpawnPlayer defined
- #endif
- native BAD_SpawnPlayer(playerid) = SpawnPlayer;
- #if FIX_SpawnPlayer
- stock FIXES_SpawnPlayer(playerid)
- {
- // Valid "playerid" check inside "GetPlayerVehicleID".
- new
- vid = GetPlayerVehicleID(playerid);
- if (vid)
- {
- new
- Float:x,
- Float:y,
- Float:z;
- // Remove them without the animation.
- GetVehiclePos(vid, x, y, z),
- SetPlayerPos(playerid, x, y, z);
- }
- return SpawnPlayer(playerid);
- }
- #define _ALS_SpawnPlayer
- #define SpawnPlayer FIXES_SpawnPlayer
- #endif
- /*
- * FIXES_SetPlayerName(playerid, name[])
- *
- * FIXES:
- * SetPlayerName
- */
- #if defined _ALS_SetPlayerName
- #error _ALS_SetPlayerName defined
- #endif
- native BAD_SetPlayerName(playerid, const name[]) = SetPlayerName;
- #if FIX_SetPlayerName
- stock FIXES_SetPlayerName(playerid, name[])
- {
- static
- sOldName[MAX_PLAYER_NAME];
- GetPlayerName(playerid, sOldName, sizeof (sOldName));
- if (!strcmp(name, sOldName, true))
- {
- if(strcmp(name, sOldName, false))
- {
- SetPlayerName(playerid, FIXES_gscTempName);
- if(SetPlayerName(playerid, name) == -1)
- {
- SetPlayerName(playerid, sOldName);
- return -1;
- }
- return 1;
- }
- else
- {
- return 0;
- }
- }
- return SetPlayerName(playerid, name);
- }
- #define _ALS_SetPlayerName
- #define SetPlayerName FIXES_SetPlayerName
- #endif
- /*
- * OnPlayerRequestClass(playerid, classid)
- *
- * FIXES:
- * OnPlayerRequestClass
- */
- #if FIX_OnPlayerRequestClass
- public OnPlayerRequestClass(playerid, classid)
- {
- // =============================
- // BEGIN: OnPlayerRequestClass
- // =============================
- #if FIX_OnPlayerRequestClass
- new
- Float:x,
- Float:y,
- Float:z;
- GetPlayerPos(playerid, x, y, z),
- RemoveBuildingForPlayer(playerid, 1484, x, y, z, 10.0),
- RemoveBuildingForPlayer(playerid, 1485, x, y, z, 10.0),
- RemoveBuildingForPlayer(playerid, 1486, x, y, z, 10.0);
- #endif
- // ===========================
- // END: OnPlayerRequestClass
- // ===========================
- return FIXES_OnPlayerRequestClass(playerid, classid);
- }
- #if defined _ALS_OnPlayerRequestClass
- #error _ALS_OnPlayerRequestClass defined
- #endif
- #define _ALS_OnPlayerRequestClass
- #define OnPlayerRequestClass(%0) FIXES_OnPlayerRequestClass(%0) <_ALS : _ALS_go>
- _FIXES_FORWARD FIXES_OnPlayerRequestClass(playerid, classid);
- #endif
- /*
- * OnPlayerSpawn(playerid)
- *
- * FIXES:
- * GetPlayerSkin
- * TogglePlayerControllable
- * GetPlayerInterior
- * OnPlayerSpawn
- * GameText
- */
- #if FIX_GetPlayerSkin || FIX_TogglePlayerControllable || FIX_GetPlayerInterior || FIX_OnPlayerSpawn || FIX_GameText
- public OnPlayerSpawn(playerid)
- {
- _FIXES_IS_IN_CHARGE()
- {
- // ======================
- // BEGIN: OnPlayerSpawn
- // ======================
- #if FIX_OnPlayerSpawn
- ResetPlayerMoney(playerid);
- #if FIXES_Single
- GivePlayerMoney(playerid, FIXES_gsLastCash[playerid]);
- FIXES_gsLastCash[playerid] = 0;
- #else
- GivePlayerMoney(playerid, GetPVarInt(playerid, FIXES_pvarPlayerLastCash));
- SetPVarInt(playerid, FIXES_pvarPlayerLastCash, 0);
- #endif
- #endif
- // ======================
- // END: OnPlayerSpawn
- // ======================
- // ==========================
- // BEGIN: GetPlayerInterior
- // ==========================
- #if FIX_GetPlayerInterior
- #if FIXES_Single
- FIXES_gsInterior[playerid] = 0;
- #else
- SetPVarInt(playerid, FIXES_pvarPlayerInterior, 0);
- #endif
- #endif
- // ==========================
- // END: GetPlayerInterior
- // ==========================
- // =================
- // BEGIN: GameText
- // =================
- #if FIX_GameText
- // Per-player GTs.
- #define _FIXES_PER_PLAYER_GT(%0) if (FIXES_gsPlayerPGTShown[%0][playerid] > playerid) PlayerTextDrawHide(playerid, FIXES_gsPGTStyle[playerid][%0]), _FIXES_RemoveInternal(FIXES_gsPlayerPGTShown[%0], playerid, MAX_PLAYERS)
- #if FIX_GameTextStyles
- _FIXES_PER_PLAYER_GT(13);
- _FIXES_PER_PLAYER_GT(12);
- _FIXES_PER_PLAYER_GT(11);
- _FIXES_PER_PLAYER_GT(10);
- _FIXES_PER_PLAYER_GT(9);
- _FIXES_PER_PLAYER_GT(8);
- _FIXES_PER_PLAYER_GT(7);
- #endif
- _FIXES_PER_PLAYER_GT(6);
- _FIXES_PER_PLAYER_GT(5);
- _FIXES_PER_PLAYER_GT(4);
- _FIXES_PER_PLAYER_GT(3);
- _FIXES_PER_PLAYER_GT(2);
- _FIXES_PER_PLAYER_GT(1);
- _FIXES_PER_PLAYER_GT(0);
- #undef _FIXES_PER_PLAYER_GT
- // Global GTs.
- #if FIX_GameTextStyles
- TextDrawHideForPlayer(playerid, FIXES_gsGTStyle[13]),
- TextDrawHideForPlayer(playerid, FIXES_gsGTStyle[12]),
- TextDrawHideForPlayer(playerid, FIXES_gsGTStyle[11]),
- TextDrawHideForPlayer(playerid, FIXES_gsGTStyle[10]),
- TextDrawHideForPlayer(playerid, FIXES_gsGTStyle[9]),
- TextDrawHideForPlayer(playerid, FIXES_gsGTStyle[8]),
- TextDrawHideForPlayer(playerid, FIXES_gsGTStyle[7]);
- #endif
- TextDrawHideForPlayer(playerid, FIXES_gsGTStyle[6]),
- TextDrawHideForPlayer(playerid, FIXES_gsGTStyle[5]),
- TextDrawHideForPlayer(playerid, FIXES_gsGTStyle[4]),
- TextDrawHideForPlayer(playerid, FIXES_gsGTStyle[3]),
- TextDrawHideForPlayer(playerid, FIXES_gsGTStyle[2]),
- TextDrawHideForPlayer(playerid, FIXES_gsGTStyle[1]),
- TextDrawHideForPlayer(playerid, FIXES_gsGTStyle[0]);
- #endif
- // =================
- // END: GameText
- // =================
- }
- // ======================
- // BEGIN: GetPlayerSkin
- // ======================
- #if FIX_GetPlayerSkin
- #if FIXES_Single
- FIXES_gsPlayerSkin[playerid] = GetPlayerSkin(playerid);
- #else
- SetPVarInt(playerid, FIXES_pvarPlayerSkin, GetPlayerSkin(playerid));
- #endif
- #endif
- // ======================
- // END: GetPlayerSkin
- // ======================
- // =================================
- // BEGIN: TogglePlayerControllable
- // =================================
- #if FIX_TogglePlayerControllable
- FIXES_gsPlayerBools[playerid] &= ~e_FIXES_BOOLS_UNCONTROLLABLE;
- #endif
- // =================================
- // END: TogglePlayerControllable
- // =================================
- return FIXES_OnPlayerSpawn(playerid);
- }
- #if defined _ALS_OnPlayerSpawn
- #error _ALS_OnPlayerSpawn defined
- #endif
- #define _ALS_OnPlayerSpawn
- #define OnPlayerSpawn(%0) FIXES_OnPlayerSpawn(%0) <_ALS : _ALS_go>
- _FIXES_FORWARD FIXES_OnPlayerSpawn(playerid);
- #endif
- /*
- * OnVehicleMod(playerid, vehicleid, componentid)
- *
- * FIXES:
- * OnVehicleMod
- */
- #if FIX_OnVehicleMod
- public OnVehicleMod(playerid, vehicleid, componentid)
- {
- #if !FIXES_Single
- if (!(FIXES_gsSettings & e_FIXES_SETTINGS_IN_CHARGE))
- {
- return FIXES_OnVehicleMod(playerid, vehicleid, componentid);
- }
- #endif
- // =====================
- // BEGIN: OnVehicleMod
- // =====================
- new
- modelid = GetVehicleModel(vehicleid);
- if (_FIXES_IN_RANGE(modelid, 400, 611 + 1))
- {
- switch (componentid)
- {
- case 1000 .. 1191:
- {
- if (FIXES_gscVehicleMods[(modelid - 400) * 6 + (componentid - 1000 >>> 5)] & 1 << (componentid - 1000 & 0b00011111))
- {
- return FIXES_OnVehicleMod(playerid, vehicleid, componentid);
- }
- }
- case 1192, 1193:
- {
- if (modelid == 576)
- {
- // This save a whole cell off EVERY other vehicle! This
- // is the ONLY vehicle with any mods over "6 * 32 + 999"
- // (1191), the highest value you can fit in 6 cells of a
- // bit array (minus 1000).
- return FIXES_OnVehicleMod(playerid, vehicleid, componentid);
- }
- }
- }
- }
- // Desync the player entirely.
- FIXES_BlockUpdate(playerid, true);
- return 0;
- // =====================
- // END: OnVehicleMod
- // =====================
- }
- #if defined _ALS_OnVehicleMod
- #error _ALS_OnVehicleMod defined
- #endif
- #define _ALS_OnVehicleMod
- #define OnVehicleMod(%0) FIXES_OnVehicleMod(%0) <_ALS : _ALS_go>
- _FIXES_FORWARD FIXES_OnVehicleMod(playerid, vehicleid, componentid);
- #endif
- /*
- * FIXES_SetPlayerSkin(playerid, skinid)
- *
- * FIXES:
- * GetPlayerSkin
- * SetPlayerSkin
- */
- #if defined _ALS_SetPlayerSkin
- #error _ALS_SetPlayerSkin defined
- #endif
- native BAD_SetPlayerSkin(playerid, skinid) = SetPlayerSkin;
- #if FIX_GetPlayerSkin || FIX_SetPlayerSkin
- stock FIXES_SetPlayerSkin(playerid, skinid)
- {
- // ======================
- // BEGIN: SetPlayerSkin
- // ======================
- #if FIX_SetPlayerSkin
- new
- vehicleid = GetPlayerVehicleID(playerid);
- if (vehicleid)
- {
- new
- seat = GetPlayerVehicleSeat(playerid);
- ClearAnimations(playerid);
- new
- ret = SetPlayerSkin(playerid, skinid);
- PutPlayerInVehicle(playerid, vehicleid, seat);
- // ===============================
- // BEGIN: DriveBy
- // ===============================
- #if FIX_DriveBy
- OnPlayerKeyStateChange(playerid, KEY_CROUCH, 0);
- #endif
- // ======================
- // END: DriveBy
- // ======================
- // ======================
- // BEGIN: GetPlayerSkin
- // ======================
- #if FIX_GetPlayerSkin
- #if FIXES_Single
- FIXES_gsPlayerSkin[playerid] = skinid;
- #else
- SetPVarInt(playerid, FIXES_pvarPlayerSkin, skinid);
- #endif
- #endif
- // ======================
- // END: GetPlayerSkin
- // ======================
- return ret;
- }
- // ======================
- // BEGIN: GetPlayerSkin
- // ======================
- #if FIX_GetPlayerSkin
- else
- #endif
- // ======================
- // END: GetPlayerSkin
- // ======================
- #endif
- // ======================
- // END: SetPlayerSkin
- // ======================
- // ======================
- // BEGIN: GetPlayerSkin
- // ======================
- #if FIX_GetPlayerSkin
- // Watch fot the "else" above if this code ever changes.
- #if FIXES_Single
- FIXES_gsPlayerSkin[playerid] = skinid;
- #else
- SetPVarInt(playerid, FIXES_pvarPlayerSkin, skinid);
- #endif
- #endif
- // ======================
- // END: GetPlayerSkin
- // ======================
- return SetPlayerSkin(playerid, skinid);
- }
- #define _ALS_SetPlayerSkin
- #define SetPlayerSkin FIXES_SetPlayerSkin
- #endif
- /*
- * FIXES_GetPlayerSkin(playerid, skinid)
- *
- * FIXES:
- * GetPlayerSkin
- */
- #if defined _ALS_GetPlayerSkin
- #error _ALS_GetPlayerSkin defined
- #endif
- native BAD_GetPlayerSkin(playerid) = GetPlayerSkin;
- #if FIX_GetPlayerSkin
- stock FIXES_GetPlayerSkin(playerid)
- {
- #if FIXES_Single
- return FIXES_gsPlayerSkin[playerid];
- #else
- return GetPVarInt(playerid, FIXES_pvarPlayerSkin);
- #endif
- }
- #define _ALS_GetPlayerSkin
- #define GetPlayerSkin FIXES_GetPlayerSkin
- #endif
- /*
- * FIXES_GetWeaponName(weaponid, weapon[], len)
- *
- * FIXES:
- * GetWeaponName
- */
- #if defined _ALS_GetWeaponName
- #error _ALS_GetWeaponName defined
- #endif
- native BAD_GetWeaponName(weaponid, weapon[], len) = GetWeaponName;
- #if FIX_GetWeaponName
- stock FIXES_GetWeaponName(weaponid, weapon[], len)
- {
- switch (weaponid)
- {
- case 18:
- {
- return
- weapon[0] = 0,
- strcat(weapon, "Molotov Cocktail", len),
- 1;
- }
- case 44:
- {
- return
- weapon[0] = 0,
- strcat(weapon, "Night Vision Goggles", len),
- 1;
- }
- case 45:
- {
- return
- weapon[0] = 0,
- strcat(weapon, "Thermal Goggles", len),
- 1;
- }
- default:
- {
- return GetWeaponName(weaponid, weapon, len);
- }
- }
- return 0;
- }
- #define _ALS_GetWeaponName
- #define GetWeaponName FIXES_GetWeaponName
- #endif
- /*
- * OnPlayerUpdate(playerid)
- *
- * FIXES:
- * SetPlayerWorldBounds
- * TogglePlayerControllable
- * AllowInteriorWeapons
- * OnPlayerDeath
- * Kick
- * OnVehicleMod
- * OnPlayerEnterVehicle
- * OnPlayerEnterVehicle_2
- */
- #if FIX_SetPlayerWorldBounds || FIX_TogglePlayerControllable || FIX_AllowInteriorWeapons || FIX_OnPlayerEnterVehicle || FIX_OnPlayerEnterVehicle_2 || FIX_OnPlayerDeath || FIX_Kick || FIX_OnVehicleMod
- public OnPlayerUpdate(playerid)
- {
- // =============================
- // BEGIN: OnPlayerEnterVehicle
- // =============================
- #if FIX_OnPlayerEnterVehicle || FIX_Kick || FIX_OnVehicleMod || FIX_OnPlayerEnterVehicle_2
- if (FIXES_gsPlayerBools[playerid] & e_FIXES_BOOLS_BLOCK)
- {
- return 0;
- }
- #endif
- // =============================
- // END: OnPlayerEnterVehicle
- // =============================
- #if !FIXES_Single
- if (!(FIXES_gsSettings & e_FIXES_SETTINGS_IN_CHARGE))
- {
- return FIXES_OnPlayerUpdate(playerid);
- }
- #endif
- #if FIX_OnPlayerEnterVehicle || FIX_AllowInteriorWeapons || FIX_SetPlayerWorldBounds || FIX_TogglePlayerControllable
- new
- e_FIXES_BOOLS:pbools = FIXES_gsPlayerBools[playerid];
- #endif
- // =============================
- // BEGIN: AllowInteriorWeapons
- // =============================
- #if FIX_AllowInteriorWeapons
- if (pbools & e_FIXES_BOOLS_INTERIOR)
- {
- // DONE: May need integration with "FIX_GetPlayerWeapon".
- SetPlayerArmedWeapon(playerid, 0);
- }
- #endif
- // ============================
- // END: AllowInteriorWeapons
- // ============================
- #if FIX_SetPlayerWorldBounds || FIX_TogglePlayerControllable
- new
- ud,
- lr,
- keys;
- GetPlayerKeys(playerid, keys, ud, lr);
- #endif
- #if FIX_SetPlayerWorldBounds && !FIX_TogglePlayerControllable
- #pragma unused ud, lr
- #endif
- // =============================
- // BEGIN: SetPlayerWorldBounds
- // =============================
- #if FIX_SetPlayerWorldBounds
- if (pbools & e_FIXES_BOOLS_WORLDBOUNDS && keys & _FIXES_KEY_AIM)
- {
- new
- Float:x,
- Float:y,
- Float:z;
- GetPlayerPos(playerid, x, y, z);
- if (FIXES_gsWorldbounds[playerid][E_FIXES_WORLDBOUND_DATA_LX] < x < FIXES_gsWorldbounds[playerid][E_FIXES_WORLDBOUND_DATA_UX] && FIXES_gsWorldbounds[playerid][E_FIXES_WORLDBOUND_DATA_LY] < y < FIXES_gsWorldbounds[playerid][E_FIXES_WORLDBOUND_DATA_UY])
- {
- FIXES_gsWorldbounds[playerid][E_FIXES_WORLDBOUND_DATA_PX] = x,
- FIXES_gsWorldbounds[playerid][E_FIXES_WORLDBOUND_DATA_PY] = y,
- FIXES_gsWorldbounds[playerid][E_FIXES_WORLDBOUND_DATA_PZ] = z;
- }
- else
- {
- SetPlayerPos(playerid, FIXES_gsWorldbounds[playerid][E_FIXES_WORLDBOUND_DATA_PX], FIXES_gsWorldbounds[playerid][E_FIXES_WORLDBOUND_DATA_PY], FIXES_gsWorldbounds[playerid][E_FIXES_WORLDBOUND_DATA_PZ]);
- }
- }
- #endif
- // =============================
- // END: SetPlayerWorldBounds
- // =============================
- // ======================
- // BEGIN: OnPlayerDeath
- // ======================
- #if FIX_OnPlayerDeath
- FIXES_gsLastAnimation[playerid] = GetPlayerAnimationIndex(playerid);
- #endif
- // ======================
- // END: OnPlayerDeath
- // ======================
- // =================================
- // BEGIN: TogglePlayerControllable
- // =================================
- #if FIX_TogglePlayerControllable
- // MUST come last.
- if (pbools & e_FIXES_BOOLS_UNCONTROLLABLE)
- {
- // Keys based sync blocking, modified based on a post by Slice:
- // http://forum.sa-mp.com/showpost.php?p=876854 Use "playerid"
- // here as it's a variable that already exists, but note that
- // after this point, you CANNOT use "playerid" as it has been
- // "clobbered" (and yes, that's the technical term). This is
- // just to avoid "statement has no effect" warnings. ALWAYS
- // return 0 in this case, regardless of what other callbacks
- // return.
- playerid = FIXES_OnPlayerUpdate(playerid);
- if (keys || ud || lr)
- {
- return 0;
- }
- else
- {
- return playerid;
- }
- }
- #endif
- // =================================
- // END: TogglePlayerControllable
- // =================================
- return FIXES_OnPlayerUpdate(playerid);
- }
- #if defined _ALS_OnPlayerUpdate
- #error _ALS_OnPlayerUpdate defined
- #endif
- #define _ALS_OnPlayerUpdate
- #define OnPlayerUpdate(%0) FIXES_OnPlayerUpdate(%0) <_ALS : _ALS_go>
- _FIXES_FORWARD FIXES_OnPlayerUpdate(playerid);
- #endif
- /*
- * FIXES_SetPlayerWorldBounds(playerid, Float:x_max, Float:x_min, Float:y_max, Float:y_min)
- *
- * TODO: Modify this to remove aim animations when they get to the boundaries.
- *
- * FIXES:
- * SetPlayerWorldBounds
- */
- #if defined _ALS_SetPlayerWorldBounds
- #error _ALS_SetPlayerWorldBounds defined
- #endif
- native BAD_SetPlayerWorldBounds(playerid, Float:x_max, Float:x_min, Float:y_max, Float:y_min) = SetPlayerWorldBounds;
- #if FIX_SetPlayerWorldBounds
- #if FIXES_Single
- stock FIXES_SetPlayerWorldBounds(playerid, Float:x_max, Float:x_min, Float:y_max, Float:y_min)
- {
- if (_FIXES_IN_RANGE(playerid, 0, MAX_PLAYERS))
- {
- FIXES_PRINTF("Call SetPlayerWorldBounds");
- if (x_max == x_min || y_max == y_min)
- {
- // Impossibly small area, disable checks entirely.
- return
- FIXES_gsPlayerBools[playerid] &= ~e_FIXES_BOOLS_WORLDBOUNDS,
- SetPlayerWorldBounds(playerid, _FIXES_INFINITY, _FIXES_N_INFINITY, _FIXES_INFINITY, _FIXES_N_INFINITY);
- }
- // This code could do with a way to mostly remove the checks. Maybe
- // when setting everything to FIXES_INFINITY (with default
- // parameters).
- FIXES_gsPlayerBools[playerid] |= e_FIXES_BOOLS_WORLDBOUNDS;
- new
- Float:tmp;
- if (x_max < x_min)
- {
- tmp = x_min,
- x_min = x_max,
- x_max = tmp;
- }
- if (y_max < y_min)
- {
- tmp = y_min,
- y_min = y_max,
- y_max = tmp;
- }
- // Give a little leway so this fix isn't noticed if you're not
- // trying to break through the world bounds. Leway removed in
- // favour of keys.
- return
- FIXES_gsWorldbounds[playerid][E_FIXES_WORLDBOUND_DATA_LX] = x_min,
- FIXES_gsWorldbounds[playerid][E_FIXES_WORLDBOUND_DATA_UX] = x_max,
- FIXES_gsWorldbounds[playerid][E_FIXES_WORLDBOUND_DATA_LY] = y_min,
- FIXES_gsWorldbounds[playerid][E_FIXES_WORLDBOUND_DATA_UY] = y_max,
- GetPlayerPos(playerid, tmp, tmp, tmp),
- FIXES_gsWorldbounds[playerid][E_FIXES_WORLDBOUND_DATA_PX] = (x_max - x_min) / 2 + x_min,
- FIXES_gsWorldbounds[playerid][E_FIXES_WORLDBOUND_DATA_PY] = (y_max - y_min) / 2 + y_min,
- FIXES_gsWorldbounds[playerid][E_FIXES_WORLDBOUND_DATA_PZ] = tmp,
- SetPlayerWorldBounds(playerid, x_max, x_min, y_max, y_min);
- }
- return 0;
- }
- #else
- forward _FIXES_SetPlayerWorldBounds(playerid, Float:x_max, Float:x_min, Float:y_max, Float:y_min);
- stock FIXES_SetPlayerWorldBounds(playerid, Float:x_max, Float:x_min, Float:y_max, Float:y_min)
- {
- if (_FIXES_IN_RANGE(playerid, 0, MAX_PLAYERS))
- {
- FIXES_PRINTF("Call SetPlayerWorldBounds");
- return
- CallRemoteFunction(FIXES_gscSetPlayerWorldBounds, FIXES_gscSpec@iffff, playerid, x_max, x_min, y_max, y_min),
- getproperty(5, FIXES_gscReturnProperty);
- }
- return 0;
- }
- public _FIXES_SetPlayerWorldBounds(playerid, Float:x_max, Float:x_min, Float:y_max, Float:y_min)
- {
- FIXES_PRINTF("_FIXES_SetPlayerWorldBounds: %d %.2f %.2f %.2f %.2f", playerid, x_max, x_min, y_max, y_min);
- _FIXES_IS_IN_CHARGE()
- {
- FIXES_PRINTF("SetPlayerWorldBounds");
- //if (x_max == _FIXES_INFINITY && x_min == _FIXES_INFINITY && y_max == _FIXES_INFINITY && y_min == _FIXES_INFINITY)
- if (x_max == x_min || y_max == y_min)
- {
- // Impossibly small area, disable checks entirely.
- return
- FIXES_gsPlayerBools[playerid] &= ~e_FIXES_BOOLS_WORLDBOUNDS,
- FIXES_gsWorldbounds[playerid][E_FIXES_WORLDBOUND_DATA_LX] =
- FIXES_gsWorldbounds[playerid][E_FIXES_WORLDBOUND_DATA_UX] =
- FIXES_gsWorldbounds[playerid][E_FIXES_WORLDBOUND_DATA_LY] =
- FIXES_gsWorldbounds[playerid][E_FIXES_WORLDBOUND_DATA_UY] =
- 0.0,
- setproperty(5, FIXES_gscReturnProperty, SetPlayerWorldBounds(playerid, _FIXES_INFINITY, _FIXES_N_INFINITY, _FIXES_INFINITY, _FIXES_N_INFINITY)),
- -1;
- }
- // This code could do with a way to mostly remove the checks. Maybe
- // when setting everything to FIXES_INFINITY (with default
- // parameters).
- FIXES_gsPlayerBools[playerid] |= e_FIXES_BOOLS_WORLDBOUNDS;
- new
- Float:tmp;
- if (x_max < x_min)
- {
- tmp = x_min,
- x_min = x_max,
- x_max = tmp;
- }
- if (y_max < y_min)
- {
- tmp = y_min,
- y_min = y_max,
- y_max = tmp;
- }
- // Give a little leway so this fix isn't noticed if you're not
- // trying to break through the world bounds. Leway removed in
- // favour of keys.
- FIXES_gsWorldbounds[playerid][E_FIXES_WORLDBOUND_DATA_LX] = x_min,
- FIXES_gsWorldbounds[playerid][E_FIXES_WORLDBOUND_DATA_UX] = x_max,
- FIXES_gsWorldbounds[playerid][E_FIXES_WORLDBOUND_DATA_LY] = y_min,
- FIXES_gsWorldbounds[playerid][E_FIXES_WORLDBOUND_DATA_UY] = y_max,
- GetPlayerPos(playerid, tmp, tmp, tmp),
- FIXES_gsWorldbounds[playerid][E_FIXES_WORLDBOUND_DATA_PX] = (x_max - x_min) / 2 + x_min,
- FIXES_gsWorldbounds[playerid][E_FIXES_WORLDBOUND_DATA_PY] = (y_max - y_min) / 2 + y_min,
- FIXES_gsWorldbounds[playerid][E_FIXES_WORLDBOUND_DATA_PZ] = tmp,
- setproperty(5, FIXES_gscReturnProperty, SetPlayerWorldBounds(playerid, x_max, x_min, y_max, y_min));
- }
- return 0;
- }
- #endif
- #define _ALS_SetPlayerWorldBounds
- #define SetPlayerWorldBounds FIXES_SetPlayerWorldBounds
- #endif
- /*
- * FIXES_TogglePlayerControllable(playerid, toggle)
- *
- * FIXES:
- * TogglePlayerControllable
- */
- #if defined _ALS_TogglePlayerControllable
- #error _ALS_TogglePlayerControllable defined
- #endif
- native BAD_TogglePlayerControllable(playerid, toggle) = TogglePlayerControllable;
- #if FIX_TogglePlayerControllable
- #if FIXES_Single
- stock FIXES_TogglePlayerControllable(playerid, toggle)
- {
- if (TogglePlayerControllable(playerid, toggle))
- {
- if (toggle)
- {
- FIXES_gsPlayerBools[playerid] &= ~e_FIXES_BOOLS_UNCONTROLLABLE;
- }
- else
- {
- FIXES_gsPlayerBools[playerid] |= e_FIXES_BOOLS_UNCONTROLLABLE;
- }
- return 1;
- }
- return 0;
- }
- #else
- forward _FIXES_TogglePlayerControllable(playerid, toggle);
- stock FIXES_TogglePlayerControllable(playerid, toggle)
- {
- if (_FIXES_IN_RANGE(playerid, 0, MAX_PLAYERS))
- {
- return
- CallRemoteFunction(FIXES_gscTogglePlayerControl, FIXES_gscSpec@ii, playerid, toggle),
- getproperty(5, FIXES_gscReturnProperty);
- }
- return 0;
- }
- public _FIXES_TogglePlayerControllable(playerid, toggle)
- {
- _FIXES_IS_IN_CHARGE()
- {
- if (toggle)
- {
- FIXES_gsPlayerBools[playerid] &= ~e_FIXES_BOOLS_UNCONTROLLABLE;
- }
- else
- {
- FIXES_gsPlayerBools[playerid] |= e_FIXES_BOOLS_UNCONTROLLABLE;
- }
- setproperty(5, FIXES_gscReturnProperty, TogglePlayerControllable(playerid, toggle));
- }
- }
- #endif
- #define _ALS_TogglePlayerControllable
- #define TogglePlayerControllable FIXES_TogglePlayerControllable
- #endif
- /*
- * OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid)
- *
- * FIXES:
- * AllowInteriorWeapons
- * GetPlayerInterior
- */
- #if FIX_AllowInteriorWeapons || FIX_GetPlayerInterior
- public OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid)
- {
- // ==========================
- // BEGIN: GetPlayerInterior
- // ==========================
- #if FIX_GetPlayerInterior
- #if FIXES_Single
- FIXES_gsInterior[playerid] = newinteriorid;
- #else
- _FIXES_IS_IN_CHARGE()
- {
- SetPVarInt(playerid, FIXES_pvarPlayerInterior, newinteriorid);
- }
- #endif
- #endif
- // ==========================
- // END: GetPlayerInterior
- // ==========================
- // =============================
- // BEGIN: AllowInteriorWeapons
- // =============================
- #if FIX_AllowInteriorWeapons
- if (newinteriorid)
- {
- if (FIXES_gsSettings & e_FIXES_SETTINGS_INTERIOR)
- {
- // This only needs doing here if "GetPlayerWeapon" is set.
- // If it isn't, even though "AllowInteriorWeapons" can use
- // this code on its own, it doesn't as "OnPlayerUpdate"
- // takes care of it all.
- // TODO: Rewrite this code to use a single bit to indicate
- // if a player can have a weapon or not, and just use the in
- // the "OnPlayerUpdate" callback, instead of several checks.
- // DONE!
- FIXES_gsPlayerBools[playerid] |= e_FIXES_BOOLS_INTERIOR;
- _FIXES_IS_IN_CHARGE()
- {
- SetPlayerArmedWeapon(playerid, 0);
- #if FIX_GetPlayerWeapon
- if (IsPlayerInAnyVehicle(playerid))
- {
- #if FIXES_Single
- FIXES_gsPlayerWeapon[playerid] = 0;
- #else
- SetPVarInt(playerid, FIXES_pvarPlayerWeapon, 0);
- #endif
- }
- #endif
- }
- }
- }
- else
- {
- FIXES_gsPlayerBools[playerid] &= ~e_FIXES_BOOLS_INTERIOR;
- }
- #endif
- // ===========================
- // END: AllowInteriorWeapons
- // ===========================
- return FIXES_OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid);
- }
- #if defined _ALS_OnPlayerInteriorChange
- #error _ALS_OnPlayerInteriorChange defined
- #endif
- #define _ALS_OnPlayerInteriorChange
- #define OnPlayerInteriorChange(%0) FIXES_OnPlayerInteriorChange(%0) <_ALS : _ALS_go>
- _FIXES_FORWARD FIXES_OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid);
- #endif
- /*
- * _FIXES_DriveBy(playerid)
- *
- * FIXES:
- * DriveBy
- */
- #if FIX_DriveBy
- forward _FIXES_DriveBy(playerid);
- public _FIXES_DriveBy(playerid)
- {
- if (GetPlayerState(playerid) == PLAYER_STATE_PASSENGER)
- {
- SetPlayerArmedWeapon(playerid, FIXES_gsDriveByWeapon[playerid]);
- }
- return FIXES_gsPlayerBools[playerid] &= ~e_FIXES_BOOLS_DRIVE_BY;
- }
- #endif
- /*
- * OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
- *
- * FIXES:
- * DriveBy
- */
- #if FIX_DriveBy
- public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
- {
- // ===============================
- // BEGIN: DriveBy
- // ===============================
- #if FIX_DriveBy
- #if !FIXES_Single
- if (FIXES_gsSettings & e_FIXES_SETTINGS_IN_CHARGE)
- #endif
- {
- if ((newkeys & KEY_CROUCH) && !(oldkeys & KEY_CROUCH) && GetPlayerState(playerid) == PLAYER_STATE_PASSENGER && GetPlayerCameraMode(playerid) == 55 && !(FIXES_gsPlayerBools[playerid] & e_FIXES_BOOLS_DRIVE_BY))
- {
- FIXES_gsDriveByWeapon[playerid] = GetPlayerWeapon(playerid),
- FIXES_gsPlayerBools[playerid] |= e_FIXES_BOOLS_DRIVE_BY,
- SetPlayerArmedWeapon(playerid, 0),
- ApplyAnimation(playerid, "PED", "CAR_GETIN_RHS", 4.1, 0, 0, 0, 0, 1, 1),
- SetTimerEx(FIXES_gscDriveBy, 500, 0, FIXES_gscSpec@i, playerid);
- }
- }
- #endif
- // =============================
- // END: DriveBy
- // =============================
- return FIXES_OnPlayerKeyStateChange(playerid, newkeys, oldkeys);
- }
- #if defined _ALS_OnPlayerKeyStateChange
- #error _ALS_OnPlayerKeyStateChange defined
- #endif
- #define _ALS_OnPlayerKeyStateChange
- #define OnPlayerKeyStateChange(%0) FIXES_OnPlayerKeyStateChange(%0) <_ALS : _ALS_go>
- _FIXES_FORWARD FIXES_OnPlayerKeyStateChange(playerid, newkeys, oldkeys);
- #endif
- /*
- * OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
- *
- * FIXES:
- * OnPlayerEnterVehicle_2
- */
- #if FIX_OnPlayerEnterVehicle_2
- public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
- {
- // ===============================
- // BEGIN: OnPlayerEnterVehicle_2
- // ===============================
- #if FIX_OnPlayerEnterVehicle_2
- if (0 < vehicleid < MAX_VEHICLES)
- {
- return FIXES_OnPlayerEnterVehicle(playerid, vehicleid, ispassenger);
- }
- FIXES_BlockUpdate(playerid, true);
- return 0;
- #endif
- // =============================
- // END: OnPlayerEnterVehicle_2
- // =============================
- }
- #if defined _ALS_OnPlayerEnterVehicle
- #error _ALS_OnPlayerEnterVehicle defined
- #endif
- #define _ALS_OnPlayerEnterVehicle
- #define OnPlayerEnterVehicle(%0) FIXES_OnPlayerEnterVehicle(%0) <_ALS : _ALS_go>
- _FIXES_FORWARD FIXES_OnPlayerEnterVehicle(playerid, vehicleid, ispassenger);
- #endif
- /*
- * OnPlayerExitVehicle(playerid, vehicleid)
- *
- * FIXES:
- * OnPlayerEnterVehicle_2
- */
- #if FIX_OnPlayerEnterVehicle_2
- public OnPlayerExitVehicle(playerid, vehicleid)
- {
- // ===============================
- // BEGIN: OnPlayerEnterVehicle_2
- // ===============================
- #if FIX_OnPlayerEnterVehicle_2
- if (0 < vehicleid < MAX_VEHICLES)
- {
- return FIXES_OnPlayerExitVehicle(playerid, vehicleid);
- }
- FIXES_BlockUpdate(playerid, true);
- return 0;
- #endif
- // =============================
- // END: OnPlayerEnterVehicle_2
- // =============================
- }
- #if defined _ALS_OnPlayerExitVehicle
- #error _ALS_OnPlayerExitVehicle defined
- #endif
- #define _ALS_OnPlayerExitVehicle
- #define OnPlayerExitVehicle(%0) FIXES_OnPlayerExitVehicle(%0) <_ALS : _ALS_go>
- _FIXES_FORWARD FIXES_OnPlayerExitVehicle(playerid, vehicleid);
- #endif
- /*
- * FIXES_BlockUpdate(playerid, bool:block)
- *
- * Block a player from using OnPlayerUpdate at all.
- */
- #if FIX_OnPlayerEnterVehicle || FIX_OnPlayerEnterVehicle_2 || FIX_Kick || FIX_OnVehicleMod
- static stock FIXES_BlockUpdate(playerid, bool:block, kick = 6)
- {
- if (kick)
- {
- #if FIXES_SilentKick
- new
- ip[22];
- GetPlayerIp(playerid, ip, sizeof (ip)),
- format(ip, sizeof (ip), "banip %s", ip),
- SendRconCommand(ip),
- FIXES_gsPlayerIP[playerid] = strval(ip[kick]) << 24,
- kick = strfind(ip, FIXES_gscDot, false, kick) + 1,
- FIXES_gsPlayerIP[playerid] |= strval(ip[kick]) << 16,
- kick = strfind(ip, FIXES_gscDot, false, kick) + 1,
- FIXES_gsPlayerIP[playerid] |= strval(ip[kick]) << 8,
- kick = strfind(ip, FIXES_gscDot, false, kick) + 1,
- FIXES_gsPlayerIP[playerid] |= strval(ip[kick]);
- #else
- Kick(playerid);
- #endif
- }
- if (block)
- {
- FIXES_gsPlayerBools[playerid] |= e_FIXES_BOOLS_BLOCK;
- return 0;
- }
- else
- {
- FIXES_gsPlayerBools[playerid] &= ~e_FIXES_BOOLS_BLOCK;
- return 1;
- }
- }
- #endif
- /*
- * OnPlayerSelectedMenuRow(playerid, row)
- *
- * FIXES:
- * GetPlayerMenu
- */
- #if FIX_GetPlayerMenu
- public OnPlayerSelectedMenuRow(playerid, row)
- {
- // ======================
- // BEGIN: GetPlayerMenu
- // ======================
- #if FIXES_Single
- FIXES_gsSettings &= ~e_FIXES_SETTINGS_MENU_SET;
- new
- ret = FIXES_OnPlayerSelectedMenuRow(playerid, row);
- if (!(FIXES_gsSettings & e_FIXES_SETTINGS_MENU_SET))
- {
- FIXES_gsCurrentMenu[playerid] = Menu:INVALID_MENU;
- }
- return ret;
- #else
- new
- Menu:cur = FIXES_gsCurrentMenu[playerid];
- _FIXES_IS_IN_CHARGE()
- {
- setproperty(5, FIXES_gscMenuProperty, _:cur);
- CallRemoteFunction(FIXES_gscClearPlayerMenu, FIXES_gscSpec@i, playerid);
- FIXES_gsCurrentMenu[playerid] = cur;
- new
- ret = FIXES_OnPlayerSelectedMenuRow(playerid, row);
- if (!(FIXES_gsSettings & e_FIXES_SETTINGS_MENU_SET))
- {
- FIXES_gsCurrentMenu[playerid] = Menu:INVALID_MENU;
- }
- return ret;
- }
- else
- {
- FIXES_gsCurrentMenu[playerid] = Menu:getproperty(5, FIXES_gscMenuProperty);
- FIXES_gsSettings &= ~e_FIXES_SETTINGS_MENU_SET;
- new
- ret = FIXES_OnPlayerSelectedMenuRow(playerid, row);
- if (!(FIXES_gsSettings & e_FIXES_SETTINGS_MENU_SET))
- {
- FIXES_gsCurrentMenu[playerid] = cur;
- }
- return ret;
- }
- #endif
- // ======================
- // END: GetPlayerMenu
- // ======================
- }
- #if defined _ALS_OnPlayerSelectedMenuRow
- #error _ALS_OnPlayerSelectedMenuRow defined
- #endif
- #define _ALS_OnPlayerSelectedMenuRow
- #define OnPlayerSelectedMenuRow(%0) FIXES_OnPlayerSelectedMenuRow(%0) <_ALS : _ALS_go>
- _FIXES_FORWARD FIXES_OnPlayerSelectedMenuRow(playerid, row);
- #endif
- /*
- * OnPlayerExitedMenu(playerid)
- *
- * FIXES:
- * GetPlayerMenu
- */
- #if FIX_GetPlayerMenu
- public OnPlayerExitedMenu(playerid)
- {
- // ======================
- // BEGIN: GetPlayerMenu
- // ======================
- #if FIXES_Single
- FIXES_gsSettings &= ~e_FIXES_SETTINGS_MENU_SET;
- new
- ret = FIXES_OnPlayerExitedMenu(playerid);
- if (!(FIXES_gsSettings & e_FIXES_SETTINGS_MENU_SET))
- {
- FIXES_gsCurrentMenu[playerid] = Menu:INVALID_MENU;
- }
- return ret;
- #else
- new
- Menu:cur = FIXES_gsCurrentMenu[playerid];
- _FIXES_IS_IN_CHARGE()
- {
- setproperty(5, FIXES_gscMenuProperty, _:cur);
- CallRemoteFunction(FIXES_gscClearPlayerMenu, FIXES_gscSpec@i, playerid);
- FIXES_gsCurrentMenu[playerid] = cur;
- new
- ret = FIXES_OnPlayerExitedMenu(playerid);
- if (!(FIXES_gsSettings & e_FIXES_SETTINGS_MENU_SET))
- {
- FIXES_gsCurrentMenu[playerid] = Menu:INVALID_MENU;
- }
- return ret;
- }
- else
- {
- FIXES_gsCurrentMenu[playerid] = Menu:getproperty(5, FIXES_gscMenuProperty);
- FIXES_gsSettings &= ~e_FIXES_SETTINGS_MENU_SET;
- new
- ret = FIXES_OnPlayerExitedMenu(playerid);
- if (!(FIXES_gsSettings & e_FIXES_SETTINGS_MENU_SET))
- {
- FIXES_gsCurrentMenu[playerid] = cur;
- }
- return ret;
- }
- #endif
- // ======================
- // END: GetPlayerMenu
- // ======================
- }
- #if defined _ALS_OnPlayerExitedMenu
- #error _ALS_OnPlayerExitedMenu defined
- #endif
- #define _ALS_OnPlayerExitedMenu
- #define OnPlayerExitedMenu(%0) FIXES_OnPlayerExitedMenu(%0) <_ALS : _ALS_go>
- _FIXES_FORWARD FIXES_OnPlayerExitedMenu(playerid);
- #endif
- /*
- * FIXES_IS_VALID_MENU(Menu:menuid)
- *
- * FIXES:
- * Menus
- */
- #if _FIX_Menus
- #define FIXES_IS_VALID_MENU(%0) (_FIXES_IN_RANGE(_:(%0), 0, MAX_MENUS) && (FIXES_gsValidMenus[_:(%0) >>> 5] & (1 << (_:(%0) & 0x1F))))
- #endif
- /*
- * Menu:FIXES_CreateMenu(const title[], columns, Float:x, Float:y, Float:col1width, Float:col2width = 0.0)
- *
- * FIXES:
- * Menus
- */
- #if defined _ALS_CreateMenu
- #error _ALS_CreateMenu defined
- #endif
- native Menu:BAD_CreateMenu(const title[], columns, Float:x, Float:y, Float:col1width, Float:col2width = 0.0) = CreateMenu;
- #if _FIX_Menus
- #if !FIXES_Single
- forward _FIXES_CreateMenu(ret);
- public _FIXES_CreateMenu(ret)
- {
- FIXES_gsValidMenus[ret >>> 5] |= 1 << (ret & 0x1F);
- }
- #endif
- stock Menu:FIXES_CreateMenu(const title[], columns, Float:x, Float:y, Float:col1width, Float:col2width = 0.0)
- {
- new
- Menu:ret = CreateMenu(title, columns, x, y, col1width, col2width);
- if (_FIXES_IN_RANGE(_:ret, 0, MAX_MENUS))
- {
- #if FIXES_Single
- FIXES_gsValidMenus[_:ret >>> 5] |= 1 << (_:ret & 0x1F);
- #else
- CallRemoteFunction("_FIXES_CreateMenu", FIXES_gscSpec@i, _:ret);
- #endif
- }
- return ret;
- }
- #define _ALS_CreateMenu
- #define CreateMenu FIXES_CreateMenu
- #endif
- /*
- * _FIXES_SetPlayerMenu(playerid, Menu:menuid)
- *
- * FIXES:
- * GetPlayerMenu
- */
- #if FIX_GetPlayerMenu && !FIXES_Single
- forward _FIXES_SetPlayerMenu(playerid, Menu:menuid);
- public _FIXES_SetPlayerMenu(playerid, Menu:menuid)
- {
- FIXES_gsSettings |= e_FIXES_SETTINGS_MENU_SET;
- FIXES_gsCurrentMenu[playerid] = menuid;
- }
- #endif
- /*
- * _FIXES_ClearPlayerMenu(playerid)
- *
- * FIXES:
- * GetPlayerMenu
- */
- #if FIX_GetPlayerMenu && !FIXES_Single
- forward _FIXES_ClearPlayerMenu(playerid);
- public _FIXES_ClearPlayerMenu(playerid)
- {
- FIXES_gsSettings &= ~e_FIXES_SETTINGS_MENU_SET;
- FIXES_gsCurrentMenu[playerid] = Menu:INVALID_MENU;
- }
- #endif
- /*
- * Menu:FIXES_DestroyMenu(Menu:menuid)
- *
- * FIXES:
- * GetPlayerMenu
- */
- #if defined _ALS_DestroyMenu
- #error _ALS_DestroyMenu defined
- #endif
- native BAD_DestroyMenu(Menu:menuid) = DestroyMenu;
- #if _FIX_Menus || FIX_GetPlayerMenu
- #if _FIX_Menus && !FIXES_Single
- forward _FIXES_DestroyMenu(ret);
- public _FIXES_DestroyMenu(ret)
- {
- FIXES_gsValidMenus[ret >>> 5] &= ~(1 << (ret & 0x1F));
- }
- #endif
- stock FIXES_DestroyMenu(Menu:menuid)
- {
- #if _FIX_Menus
- if (FIXES_IS_VALID_MENU(menuid))
- #endif
- {
- if (DestroyMenu(Menu:menuid))
- {
- #if _FIX_Menus
- #if FIXES_Single
- FIXES_gsValidMenus[_:menuid >>> 5] &= ~(1 << (_:menuid & 0x1F));
- #else
- CallRemoteFunction("_FIXES_DestroyMenu", FIXES_gscSpec@i, _:menuid);
- #endif
- #endif
- _FIXES_FOREACH(FIXES_gsPlayersIterator, playerid)
- {
- if (FIXES_gsCurrentMenu[playerid] == menuid)
- {
- if (HideMenuForPlayer(menuid, playerid))
- {
- #if FIXES_Single
- FIXES_gsSettings &= ~e_FIXES_SETTINGS_MENU_SET;
- FIXES_gsCurrentMenu[playerid] = Menu:INVALID_MENU;
- #else
- CallRemoteFunction(FIXES_gscSetPlayerMenu, FIXES_gscSpec@ii, playerid, INVALID_MENU);
- #endif
- }
- }
- }
- return 1;
- }
- }
- return 0;
- }
- #define _ALS_DestroyMenu
- #define DestroyMenu FIXES_DestroyMenu
- #endif
- /*
- * FIXES_AddMenuItem(Menu:menuid, column, const menutext[])
- *
- * FIXES:
- * AddMenuItem
- */
- #if defined _ALS_AddMenuItem
- #error _ALS_AddMenuItem defined
- #endif
- native BAD_AddMenuItem(Menu:menuid, column, const menutext[]) = AddMenuItem;
- #if FIX_AddMenuItem
- stock FIXES_AddMenuItem(Menu:menuid, column, const menutext[])
- {
- if (FIXES_IS_VALID_MENU(menuid))
- {
- return AddMenuItem(menuid, column, menutext);
- }
- return 0;
- }
- #define _ALS_AddMenuItem
- #define AddMenuItem FIXES_AddMenuItem
- #endif
- /*
- * FIXES_SetMenuColumnHeader(Menu:menuid, column, const columnheader[])
- *
- * FIXES:
- * SetMenuColumnHeader
- */
- #if defined _ALS_SetMenuColumnHeader
- #error _ALS_SetMenuColumnHeader defined
- #endif
- native BAD_SetMenuColumnHeader(Menu:menuid, column, const columnheader[]) = SetMenuColumnHeader;
- #if FIX_SetMenuColumnHeader
- stock FIXES_SetMenuColumnHeader(Menu:menuid, column, const columnheader[])
- {
- if (FIXES_IS_VALID_MENU(menuid))
- {
- return SetMenuColumnHeader(menuid, column, columnheader);
- }
- return 0;
- }
- #define _ALS_SetMenuColumnHeader
- #define SetMenuColumnHeader FIXES_SetMenuColumnHeader
- #endif
- /*
- * FIXES_ShowMenuForPlayer(Menu:menuid, playerid)
- *
- * FIXES:
- * ShowMenuForPlayer
- * GetPlayerMenu
- */
- #if defined _ALS_ShowMenuForPlayer
- #error _ALS_ShowMenuForPlayer defined
- #endif
- native BAD_ShowMenuForPlayer(Menu:menuid, playerid) = ShowMenuForPlayer;
- #if FIX_ShowMenuForPlayer || FIX_GetPlayerMenu
- stock FIXES_ShowMenuForPlayer(Menu:menuid, playerid)
- {
- #if FIX_ShowMenuForPlayer
- if (FIXES_IS_VALID_MENU(menuid))
- #endif
- {
- #if FIX_GetPlayerMenu
- if (ShowMenuForPlayer(menuid, playerid))
- {
- #if FIXES_Single
- FIXES_gsSettings |= e_FIXES_SETTINGS_MENU_SET;
- FIXES_gsCurrentMenu[playerid] = menuid;
- #else
- CallRemoteFunction(FIXES_gscSetPlayerMenu, FIXES_gscSpec@ii, playerid, _:menuid);
- #endif
- return 1;
- }
- #else
- return ShowMenuForPlayer(menuid, playerid);
- #endif
- }
- return 0;
- }
- #define _ALS_ShowMenuForPlayer
- #define ShowMenuForPlayer FIXES_ShowMenuForPlayer
- #endif
- /*
- * FIXES_HideMenuForPlayer(Menu:menuid, playerid)
- *
- * FIXES:
- * HideMenuForPlayer
- * HideMenuForPlayer_2
- * GetPlayerMenu
- */
- #if defined _ALS_HideMenuForPlayer
- #error _ALS_HideMenuForPlayer defined
- #endif
- native BAD_HideMenuForPlayer(Menu:menuid, playerid) = HideMenuForPlayer;
- #if FIX_HideMenuForPlayer || FIX_GetPlayerMenu
- stock FIXES_HideMenuForPlayer(Menu:menuid, playerid)
- {
- #if FIX_HideMenuForPlayer
- if (FIXES_IS_VALID_MENU(menuid))
- #endif
- {
- #if FIX_GetPlayerMenu
- #if FIX_HideMenuForPlayer_2
- if (_FIXES_IN_RANGE(playerid, 0, MAX_PLAYERS) && FIXES_gsCurrentMenu[playerid] == menuid)
- #else
- if (FIXES_gsCurrentMenu[playerid] == menuid && HideMenuForPlayer(menuid, playerid))
- #endif
- {
- #if FIXES_Single
- FIXES_gsSettings &= ~e_FIXES_SETTINGS_MENU_SET;
- FIXES_gsCurrentMenu[playerid] = Menu:INVALID_MENU;
- #else
- CallRemoteFunction(FIXES_gscSetPlayerMenu, FIXES_gscSpec@ii, playerid, INVALID_MENU);
- #endif
- #if FIX_HideMenuForPlayer_2
- return HideMenuForPlayer(menuid, playerid);
- #else
- return 1;
- #endif
- }
- #else
- return HideMenuForPlayer(menuid, playerid);
- #endif
- }
- return 0;
- }
- #define _ALS_HideMenuForPlayer
- #define HideMenuForPlayer FIXES_HideMenuForPlayer
- #endif
- /*
- * FIXES_DisableMenu(Menu:menuid)
- *
- * FIXES:
- * DisableMenu
- */
- #if defined _ALS_DisableMenu
- #error _ALS_DisableMenu defined
- #endif
- native BAD_DisableMenu(Menu:menuid) = DisableMenu;
- #if FIX_DisableMenu
- stock FIXES_DisableMenu(Menu:menuid)
- {
- if (FIXES_IS_VALID_MENU(menuid))
- {
- return DisableMenu(menuid);
- }
- return 0;
- }
- #define _ALS_DisableMenu
- #define DisableMenu FIXES_DisableMenu
- #endif
- /*
- * FIXES_DisableMenuRow(Menu:menuid, row)
- *
- * FIXES:
- * DisableMenuRow
- */
- #if defined _ALS_DisableMenuRow
- #error _ALS_DisableMenuRow defined
- #endif
- native BAD_DisableMenuRow(Menu:menuid, row) = DisableMenuRow;
- #if FIX_DisableMenuRow
- stock FIXES_DisableMenuRow(Menu:menuid, row)
- {
- if (FIXES_IS_VALID_MENU(menuid))
- {
- return DisableMenuRow(menuid, row);
- }
- return 0;
- }
- #define _ALS_DisableMenuRow
- #define DisableMenuRow FIXES_DisableMenuRow
- #endif
- /*
- * Menu:FIXES_GetPlayerMenu(playerid)
- *
- * FIXES:
- * GetPlayerMenu
- */
- #if defined _ALS_GetPlayerMenu
- #error _ALS_GetPlayerMenu defined
- #endif
- native BAD_GetPlayerMenu(playerid) = GetPlayerMenu;
- #if FIX_GetPlayerMenu
- stock Menu:FIXES_GetPlayerMenu(playerid)
- {
- if (_FIXES_IN_RANGE(playerid, 0, MAX_PLAYERS))
- {
- return FIXES_gsCurrentMenu[playerid];
- }
- return Menu:INVALID_MENU;
- }
- #define _ALS_GetPlayerMenu
- #define GetPlayerMenu FIXES_GetPlayerMenu
- #endif
- /*
- * OnPlayerStateChange(playerid, newstate, oldstate)
- *
- * FIXES:
- * HydraSniper
- * GetPlayerWeapon
- * PutPlayerInVehicle
- * TrainExit
- */
- #if FIX_HydraSniper || FIX_GetPlayerWeapon || FIX_PutPlayerInVehicle || FIX_OnPlayerEnterVehicle || FIX_TrainExit
- public OnPlayerStateChange(playerid, newstate, oldstate)
- {
- #if !FIXES_Single
- if (!(FIXES_gsSettings & e_FIXES_SETTINGS_IN_CHARGE))
- {
- return FIXES_OnPlayerStateChange(playerid, newstate, oldstate);
- }
- #endif
- // =============================
- // BEGIN: OnPlayerEnterVehicle
- // =============================
- #if FIX_OnPlayerEnterVehicle
- if (newstate == PLAYER_STATE_PASSENGER)
- {
- new
- model = GetVehicleModel(GetPlayerVehicleID(playerid)) - 400;
- if (_FIXES_IN_RANGE(model, 0, 211 + 1))
- {
- new
- seat = GetPlayerVehicleSeat(playerid);
- if (seat != 128)
- {
- model = (FIXES_gscMaxPassengers[model >>> 3] >>> ((model & 7) << 2)) & 0xF;
- if (model == 0 || model == 15)
- {
- // Shouldn't be in this vehicle at all.
- FIXES_BlockUpdate(playerid, true);
- }
- else if (!(0 < seat <= model)) // Slower with "_FIXES_NO_RANGE".
- {
- // In an out of range seat.
- FIXES_BlockUpdate(playerid, true);
- }
- }
- }
- else
- {
- FIXES_BlockUpdate(playerid, true);
- }
- }
- else if (newstate == PLAYER_STATE_DRIVER)
- {
- new
- model = GetPlayerVehicleSeat(playerid);
- if (model != 128)
- {
- if (model == 0)
- {
- model = GetVehicleModel(GetPlayerVehicleID(playerid)) - 400;
- if (_FIXES_NO_RANGE(model, 0, 211 + 1) || FIXES_gscMaxPassengers[model >>> 3] >>> ((model & 7) << 2) & 0xF == 15)
- {
- // In an invalid vehicle (one you can't drive).
- FIXES_BlockUpdate(playerid, true);
- }
- }
- else
- {
- // They are a driver, but not in the driver's seat.
- FIXES_BlockUpdate(playerid, true);
- }
- }
- #if FIX_HydraSniper
- else
- {
- model = GetVehicleModel(GetPlayerVehicleID(playerid));
- }
- #endif
- #if !FIX_HydraSniper
- }
- #endif
- #endif
- // =============================
- // END: OnPlayerEnterVehicle
- // =============================
- // ====================
- // BEGIN: HydraSniper
- // ====================
- #if FIX_HydraSniper
- #if !FIX_OnPlayerEnterVehicle
- // Only called if the same check above isn't called.
- if (newstate == PLAYER_STATE_DRIVER)
- {
- new
- model = GetVehicleModel(GetPlayerVehicleID(playerid));
- #endif
- if (GetPlayerWeapon(playerid) == 34 && (model == 520 || model == 425))
- {
- SetPlayerArmedWeapon(playerid, 0);
- #if FIX_GetPlayerWeapon
- // This is the first cross-dependednt fix.
- #if FIXES_Single
- FIXES_gsPlayerWeapon[playerid] = 0;
- #else
- SetPVarInt(playerid, FIXES_pvarPlayerWeapon, 0);
- #endif
- #endif
- }
- }
- #endif
- // ====================
- // END: HydraSniper
- // ====================
- #if FIX_GetPlayerWeapon || FIX_PutPlayerInVehicle || FIX_TrainExit
- #if PLAYER_STATE_PASSENGER != PLAYER_STATE_DRIVER + 1
- #error FIX_GetPlayerWeapon/FIX_PutPlayerInVehicle state assertation failed.
- #endif
- if (_FIXES_IN_RANGE(oldstate, PLAYER_STATE_DRIVER, PLAYER_STATE_PASSENGER + 1))
- {
- #if FIX_PutPlayerInVehicle || FIX_TrainExit
- new
- e_FIXES_BOOLS:bools = FIXES_gsPlayerBools[playerid];
- #endif
- // ========================
- // BEGIN: GetPlayerWeapon
- // ========================
- #if FIX_GetPlayerWeapon
- #if FIXES_Single
- FIXES_gsPlayerWeapon[playerid] = -1;
- #else
- SetPVarInt(playerid, FIXES_pvarPlayerWeapon, -1);
- #endif
- #endif
- // ========================
- // END: GetPlayerWeapon
- // ========================
- // ==================
- // BEGIN: TrainExit
- // ==================
- #if FIX_TrainExit
- FIXES_PRINTF("train exit");
- if (bools & e_FIXES_BOOLS_PUT_IN_TRAIN)
- {
- FIXES_PRINTF("OK");
- SetCameraBehindPlayer(playerid),
- bools &= ~e_FIXES_BOOLS_PUT_IN_TRAIN;
- }
- #endif
- // ==================
- // END: TrainExit
- // ==================
- // ===========================
- // BEGIN: PutPlayerInVehicle
- // ===========================
- #if FIX_PutPlayerInVehicle
- // Update their vehicle once we KNOW the client has done the
- // removal from the vehicle.
- if (bools & e_FIXES_BOOLS_PUT_IN_VEHICLE)
- {
- new
- vid = FIXES_gsVehicleSeatData[playerid] & 0x00FFFFFF;
- // Limited to "only" 16777216 vehicles and 256 seats.
- PutPlayerInVehicle(playerid, vid, FIXES_gsVehicleSeatData[playerid] >>> 24),
- bools &= ~e_FIXES_BOOLS_PUT_IN_VEHICLE;
- #if FIX_TrainExit
- switch (GetVehicleModel(vid))
- {
- case 449, 537, 538:
- {
- bools |= e_FIXES_BOOLS_PUT_IN_TRAIN;
- }
- }
- #endif
- }
- #endif
- // ===========================
- // END: PutPlayerInVehicle
- // ===========================
- #if FIX_PutPlayerInVehicle || FIX_TrainExit
- FIXES_gsPlayerBools[playerid] = bools;
- #endif
- }
- #endif
- return FIXES_OnPlayerStateChange(playerid, newstate, oldstate);
- }
- #if defined _ALS_OnPlayerStateChange
- #error _ALS_OnPlayerStateChange defined
- #endif
- #define _ALS_OnPlayerStateChange
- #define OnPlayerStateChange(%0) FIXES_OnPlayerStateChange(%0) <_ALS : _ALS_go>
- _FIXES_FORWARD FIXES_OnPlayerStateChange(playerid, newstate, oldstate);
- #endif
- /*
- * FIXES_GivePlayerWeapon(playerid, weaponid, ammo)
- *
- * FIXES:
- * HydraSniper
- */
- #if defined _ALS_GivePlayerWeapon
- #error _ALS_GivePlayerWeapon defined
- #endif
- native BAD_GivePlayerWeapon(playerid, weaponid, ammo) = GivePlayerWeapon;
- #if FIX_HydraSniper
- stock FIXES_GivePlayerWeapon(playerid, weaponid, ammo)
- {
- new
- vid = GetPlayerVehicleID(playerid);
- if (vid)
- {
- vid = GetVehicleModel(vid);
- if (weaponid == 34 && (vid == 520 || vid == 425))
- {
- vid = GivePlayerWeapon(playerid, weaponid, ammo),
- SetPlayerArmedWeapon(playerid, 0);
- #if FIX_GetPlayerWeapon
- #if FIXES_Single
- FIXES_gsPlayerWeapon[playerid] = 0;
- #else
- SetPVarInt(playerid, FIXES_pvarPlayerWeapon, 0);
- #endif
- #endif
- return vid;
- }
- }
- return GivePlayerWeapon(playerid, weaponid, ammo);
- }
- #define _ALS_GivePlayerWeapon
- #define GivePlayerWeapon FIXES_GivePlayerWeapon
- #endif
- /*
- * FIXES_SetPlayerArmedWeapon(playerid, weaponid)
- *
- * FIXES:
- * GetPlayerWeapon
- */
- #if defined _ALS_SetPlayerArmedWeapon
- #error _ALS_SetPlayerArmedWeapon defined
- #endif
- native BAD_SetPlayerArmedWeapon(playerid, weaponid) = SetPlayerArmedWeapon;
- #if FIX_GetPlayerWeapon
- stock FIXES_SetPlayerArmedWeapon(playerid, weaponid)
- {
- #if FIX_AllowInteriorWeapons
- if (FIXES_gsSettings & e_FIXES_SETTINGS_INTERIOR && GetPlayerInterior(playerid))
- {
- // Not allowed weapons.
- return 0;
- }
- #endif
- new
- vid = GetPlayerVehicleID(playerid);
- if (vid)
- {
- #if FIX_HydraSniper
- vid = GetVehicleModel(vid);
- if (weaponid == 34 && (vid == 520 || vid == 425))
- {
- return 0;
- }
- #endif
- #if FIXES_Single
- FIXES_gsPlayerWeapon[playerid] = weaponid;
- #else
- SetPVarInt(playerid, FIXES_pvarPlayerWeapon, weaponid);
- #endif
- }
- return SetPlayerArmedWeapon(playerid, weaponid);
- }
- #define _ALS_SetPlayerArmedWeapon
- #define SetPlayerArmedWeapon FIXES_SetPlayerArmedWeapon
- #endif
- /*
- * FIXES_GetPlayerWeapon(playerid)
- *
- * FIXES:
- * GetPlayerWeapon
- */
- #if defined _ALS_GetPlayerWeapon
- #error _ALS_GetPlayerWeapon defined
- #endif
- native BAD_GetPlayerWeapon(playerid) = GetPlayerWeapon;
- #if FIX_GetPlayerWeapon
- stock FIXES_GetPlayerWeapon(playerid)
- {
- #if FIXES_Single
- new
- ret = FIXES_gsPlayerWeapon[playerid];
- #else
- new
- ret = GetPVarInt(playerid, FIXES_pvarPlayerWeapon);
- #endif
- if (ret == -1)
- {
- return GetPlayerWeapon(playerid);
- }
- return ret;
- }
- #define _ALS_GetPlayerWeapon
- #define GetPlayerWeapon FIXES_GetPlayerWeapon
- #endif
- /*
- * FIXES_PutPlayerInVehicle(playerid, vehicleid, seatid)
- *
- * FIXES:
- * PutPlayerInVehicle
- */
- #if defined _ALS_PutPlayerInVehicle
- #error _ALS_PutPlayerInVehicle defined
- #endif
- native BAD_PutPlayerInVehicle(playerid, vehicleid, seatid) = PutPlayerInVehicle;
- #if FIX_PutPlayerInVehicle || FIX_TrainExit
- #if FIXES_Single
- stock FIXES_PutPlayerInVehicle(playerid, vehicleid, seatid)
- {
- // ==================
- // BEGIN: TrainExit
- // ==================
- #if FIX_TrainExit
- FIXES_PRINTF("TrainExit %d", GetVehicleModel(vehicleid));
- switch (GetVehicleModel(vehicleid))
- {
- case 449, 537, 538:
- {
- FIXES_gsPlayerBools[playerid] |= e_FIXES_BOOLS_PUT_IN_TRAIN;
- }
- }
- #endif
- // ==================
- // END: TrainExit
- // ==================
- // ===========================
- // BEGIN: PutPlayerInVehicle
- // ===========================
- #if FIX_PutPlayerInVehicle
- new
- vid = GetPlayerVehicleID(playerid);
- if (vid)
- {
- new
- Float:x,
- Float:y,
- Float:z;
- // Remove them without the animation.
- return
- GetVehiclePos(vid, x, y, z),
- SetPlayerPos(playerid, x, y, z),
- FIXES_gsVehicleSeatData[playerid] = seatid << 24 | vehicleid,
- FIXES_gsPlayerBools[playerid] |= e_FIXES_BOOLS_PUT_IN_VEHICLE,
- 1;
- }
- #endif
- // ===========================
- // END: PutPlayerInVehicle
- // ===========================
- return PutPlayerInVehicle(playerid, vehicleid, seatid);
- }
- #else
- forward _FIXES_PutPlayerInVehicle(playerid, vehicleid, seatid, from, data);
- stock FIXES_PutPlayerInVehicle(playerid, vehicleid, seatid)
- {
- FIXES_PRINTF("NOT SINGLE");
- // ===========================
- // BEGIN: PutPlayerInVehicle
- // ===========================
- #if FIX_PutPlayerInVehicle
- new
- vid = GetPlayerVehicleID(playerid);
- if (vid)
- {
- new
- Float:x,
- Float:y,
- Float:z;
- // Remove them without the animation.
- return
- GetVehiclePos(vid, x, y, z),
- SetPlayerPos(playerid, x, y, z),
- CallRemoteFunction(FIXES_gscPutPlayerInVehicle, FIXES_gscSpec@iiiii, playerid, vehicleid, seatid, 1, vid),
- 1;
- }
- #endif
- // ===========================
- // END: PutPlayerInVehicle
- // ===========================
- // ==================
- // BEGIN: TrainExit
- // ==================
- #if FIX_TrainExit
- new
- model = GetVehicleModel(vehicleid);
- switch (model)
- {
- case 449, 537, 538:
- {
- CallRemoteFunction(FIXES_gscPutPlayerInVehicle, FIXES_gscSpec@iiiii, playerid, vehicleid, seatid, 0, model);
- //FIXES_gsPlayerBools[playerid] |= e_FIXES_BOOLS_PUT_IN_TRAIN;
- }
- }
- #endif
- // ==================
- // END: TrainExit
- // ==================
- return PutPlayerInVehicle(playerid, vehicleid, seatid);
- }
- public _FIXES_PutPlayerInVehicle(playerid, vehicleid, seatid, from, data)
- {
- FIXES_PRINTF("IN CHARGE: %d", (FIXES_gsSettings & e_FIXES_SETTINGS_IN_CHARGE));
- _FIXES_IS_IN_CHARGE()
- {
- // ===========================
- // BEGIN: PutPlayerInVehicle
- // ===========================
- #if FIX_PutPlayerInVehicle
- if (from)
- {
- FIXES_gsVehicleSeatData[playerid] = seatid << 24 | vehicleid,
- FIXES_gsPlayerBools[playerid] |= e_FIXES_BOOLS_PUT_IN_VEHICLE;
- }
- #endif
- // ===========================
- // END: PutPlayerInVehicle
- // ===========================
- // ==================
- // BEGIN: TrainExit
- // ==================
- #if FIX_TrainExit
- #if FIX_PutPlayerInVehicle
- else
- #else
- if (!from)
- #endif
- {
- switch (data)
- {
- case 449, 537, 538:
- {
- FIXES_gsPlayerBools[playerid] |= e_FIXES_BOOLS_PUT_IN_TRAIN;
- }
- }
- }
- #endif
- // ==================
- // END: TrainExit
- // ==================
- }
- return 1;
- }
- #endif
- #define _ALS_PutPlayerInVehicle
- #define PutPlayerInVehicle FIXES_PutPlayerInVehicle
- #endif
- /*
- * _FIXES_SetCheckpoint(playerid, Float:x, Float:y, Float:z, Float:size)
- *
- * FIXES:
- * SetPlayerCheckpoint
- */
- #if FIX_SetPlayerCheckpoint
- forward _FIXES_SetCheckpoint(playerid, Float:x, Float:y, Float:z, Float:size);
- public _FIXES_SetCheckpoint(playerid, Float:x, Float:y, Float:z, Float:size)
- {
- #if FIXES_Single
- if (FIXES_gsPlayerBools[playerid] & e_FIXES_BOOLS_CP_DELAYED)
- #else
- if (GetPVarInt(playerid, FIXES_pvarPlayerCheckpoint))
- #endif
- {
- return
- #if FIXES_Single
- FIXES_gsPlayerBools[playerid] &= ~e_FIXES_BOOLS_CP_DELAYED,
- #else
- DeletePVar(playerid, FIXES_pvarPlayerCheckpoint),
- #endif
- SetPlayerCheckpoint(playerid, x, y, z, size);
- }
- return 0;
- }
- #endif
- /*
- * FIXES_SetPlayerCheckpoint(playerid, Float:x, Float:y, Float:z, Float:size)
- *
- * FIXES:
- * SetPlayerCheckpoint
- */
- #if defined _ALS_SetPlayerCheckpoint
- #error _ALS_SetPlayerCheckpoint defined
- #endif
- native BAD_SetPlayerCheckpoint(playerid, Float:x, Float:y, Float:z, Float:size) = SetPlayerCheckpoint;
- #if FIX_SetPlayerCheckpoint
- stock FIXES_SetPlayerCheckpoint(playerid, Float:x, Float:y, Float:z, Float:size)
- {
- return
- #if FIXES_Single
- FIXES_gsPlayerBools[playerid] |= e_FIXES_BOOLS_CP_DELAYED,
- #else
- SetPVarInt(playerid, FIXES_pvarPlayerCheckpoint, 1),
- #endif
- DisablePlayerCheckpoint(playerid),
- SetTimerEx(FIXES_gscSetCheckpoint, 50, 0, FIXES_gscSpec@iffff, playerid, x, y, z, size),
- 1;
- }
- #define _ALS_SetPlayerCheckpoint
- #define SetPlayerCheckpoint FIXES_SetPlayerCheckpoint
- #endif
- /*
- * FIXES_DisablePlayerCheckpoint(playerid)
- *
- * FIXES:
- * SetPlayerCheckpoint
- */
- #if defined _ALS_DisablePlayerCheckpoint
- #error _ALS_DisablePlayerCheckpoint defined
- #endif
- native BAD_DisablePlayerCheckpoint(playerid) = DisablePlayerCheckpoint;
- #if FIX_SetPlayerCheckpoint
- stock FIXES_DisablePlayerCheckpoint(playerid)
- {
- return
- #if FIXES_Single
- FIXES_gsPlayerBools[playerid] &= ~e_FIXES_BOOLS_CP_DELAYED,
- #else
- DeletePVar(playerid, FIXES_pvarPlayerCheckpoint),
- #endif
- DisablePlayerCheckpoint(playerid);
- }
- #define _ALS_DisablePlayerCheckpoint
- #define DisablePlayerCheckpoint FIXES_DisablePlayerCheckpoint
- #endif
- /*
- * _FIXES_SetRaceCheckpoint(playerid, type, Float:x, Float:y, Float:z, Float:nextx, Float:nexty, Float:nextz, Float:size)
- *
- * FIXES:
- * SetPlayerRaceCheckpoint
- */
- #if FIX_SetPlayerRaceCheckpoint
- forward _FIXES_SetRaceCheckpoint(playerid, type, Float:x, Float:y, Float:z, Float:nextx, Float:nexty, Float:nextz, Float:size);
- public _FIXES_SetRaceCheckpoint(playerid, type, Float:x, Float:y, Float:z, Float:nextx, Float:nexty, Float:nextz, Float:size)
- {
- #if FIXES_Single
- if (FIXES_gsPlayerBools[playerid] & e_FIXES_BOOLS_RACE_CP_DELAYED)
- #else
- if (GetPVarInt(playerid, FIXES_pvarPlayerRaceCheckpoint))
- #endif
- {
- return
- #if FIXES_Single
- FIXES_gsPlayerBools[playerid] &= ~e_FIXES_BOOLS_RACE_CP_DELAYED,
- #else
- DeletePVar(playerid, FIXES_pvarPlayerRaceCheckpoint),
- #endif
- SetPlayerRaceCheckpoint(playerid, type, x, y, z, nextx, nexty, nextz, size);
- }
- return 0;
- }
- #endif
- /*
- * FIXES_SetPlayerRaceCheckpoint(playerid, type, Float:x, Float:y, Float:z, Float:nextx, Float:nexty, Float:nextz, Float:size)
- *
- * FIXES:
- * SetPlayerRaceCheckpoint
- */
- #if defined _ALS_SetPlayerRaceCheckpoint
- #error _ALS_SetPlayerRaceCheckpoint defined
- #endif
- native BAD_SetPlayerRaceCheckpoint(playerid, type, Float:x, Float:y, Float:z, Float:nextx, Float:nexty, Float:nextz, Float:size) = SetPlayerRaceCheckpoint;
- #if FIX_SetPlayerRaceCheckpoint
- stock FIXES_SetPlayerRaceCheckpoint(playerid, type, Float:x, Float:y, Float:z, Float:nextx, Float:nexty, Float:nextz, Float:size)
- {
- return
- #if FIXES_Single
- FIXES_gsPlayerBools[playerid] |= e_FIXES_BOOLS_RACE_CP_DELAYED,
- #else
- SetPVarInt(playerid, FIXES_pvarPlayerRaceCheckpoint, 1),
- #endif
- DisablePlayerRaceCheckpoint(playerid),
- SetTimerEx(FIXES_gscSetRaceCheckpoint, 50, 0, FIXES_gscSpec@iifffffff, playerid, type, x, y, z, nextx, nexty, nextz, size),
- 1;
- }
- #define _ALS_SetPlayerRaceCheckpoint
- #define SetPlayerRaceCheckpoint FIXES_SetPlayerRaceCheckpoint
- #endif
- /*
- * FIXES_DisablePlayerRaceCheckpoint(playerid)
- *
- * FIXES:
- * SetPlayerRaceCheckpoint
- */
- #if defined _ALS_DisablePlayerRaceCP
- #error _ALS_DisablePlayerRaceCP defined
- #endif
- native BAD_DisablePlayerRaceCheckpoint(playerid) = DisablePlayerRaceCheckpoint;
- #if FIX_SetPlayerRaceCheckpoint
- stock FIXES_DisablePlayerRaceCP(playerid)
- {
- return
- #if FIXES_Single
- FIXES_gsPlayerBools[playerid] &= ~e_FIXES_BOOLS_RACE_CP_DELAYED,
- #else
- DeletePVar(playerid, FIXES_pvarPlayerRaceCheckpoint),
- #endif
- DisablePlayerRaceCheckpoint(playerid);
- }
- #define _ALS_DisablePlayerRaceCP
- #define DisablePlayerRaceCheckpoint FIXES_DisablePlayerRaceCP
- #endif
- /*
- * _FIXES_HideGameTextForPlayer(playerid, style, parr[])
- *
- * Hides a GameText style for one or more players, and accounts for the fact
- * that they may have different messages being shown.
- *
- * FIXES:
- * GameText
- */
- #if FIX_GameText
- static stock _FIXES_HideGameTextForPlayer(playerid, style, parr[])
- {
- switch (playerid)
- {
- case MAX_PLAYERS:
- {
- // Remove the global GameText for everyone that can see it.
- TextDrawHideForAll(FIXES_gsGTStyle[style]);
- }
- case INVALID_PLAYER_ID:
- {
- // Hide any player-local ones. This is similar to "foreach".
- playerid = parr[MAX_PLAYERS],
- parr[MAX_PLAYERS] = MAX_PLAYERS;
- for (new next; playerid != MAX_PLAYERS; playerid = next)
- {
- PlayerTextDrawHide(playerid, FIXES_gsPGTStyle[playerid][style]),
- next = parr[playerid],
- parr[playerid] = 0;
- }
- }
- default:
- {
- // Remove.
- PlayerTextDrawHide(playerid, FIXES_gsPGTStyle[playerid][style]),
- _FIXES_RemoveInternal(parr, playerid, MAX_PLAYERS);
- }
- }
- }
- #endif
- /*
- * _FIXES_HideGameTextTimer(playerid, style)
- *
- * FIXES:
- * GameText
- */
- #if FIX_GameText
- forward _FIXES_HideGameTextTimer(playerid, style);
- public _FIXES_HideGameTextTimer(playerid, style)
- {
- if (GetTickCount() >= FIXES_gsGTTimer[style][playerid])
- {
- // Only hide it if it hasn't been re-shown in the interim.
- _FIXES_HideGameTextForPlayer(playerid, style, FIXES_gsPlayerPGTShown[style]);
- }
- }
- #endif
- /*
- * _FIXES_GameTextShow(playerid, string[], time, style)
- *
- * FIXES:
- * GameText
- */
- #if FIX_GameText
- forward _FIXES_GameTextShow(playerid, string[], time, style);
- public _FIXES_GameTextShow(playerid, string[], time, style)
- {
- _FIXES_IS_IN_CHARGE()
- {
- if (playerid == MAX_PLAYERS)
- {
- _FIXES_HideGameTextForPlayer(INVALID_PLAYER_ID, style, FIXES_gsPlayerPGTShown[style]),
- TextDrawSetString(FIXES_gsGTStyle[style], string),
- TextDrawShowForAll(FIXES_gsGTStyle[style]);
- }
- else
- {
- TextDrawHideForPlayer(playerid, FIXES_gsGTStyle[style]),
- PlayerTextDrawSetString(playerid, FIXES_gsPGTStyle[playerid][style], string),
- PlayerTextDrawShow(playerid, FIXES_gsPGTStyle[playerid][style]),
- _FIXES_AddInternal(FIXES_gsPlayerPGTShown[style], playerid, MAX_PLAYERS);
- }
- if (time)
- {
- // Tiny offset because timers are inaccurate.
- FIXES_gsGTTimer[style][playerid] = GetTickCount() + time - 10,
- // Don't need to save the timer's ID.
- SetTimerEx(FIXES_gscHideGameTextTimer, time, false, FIXES_gscSpec@ii, playerid, style);
- }
- }
- return 1;
- }
- #endif
- /*
- * FIXES_GameTextForAll(string[], time, style)
- *
- * FIXES:
- * GameText
- */
- #if defined _ALS_GameTextForAll
- #error _ALS_GameTextForAll defined
- #endif
- native BAD_GameTextForAll(const string[], time, style) = GameTextForAll;
- #if FIX_GameText
- stock FIXES_GameTextForAll(string[], time, style)
- {
- if (_FIXES_IN_RANGE(style, 0, FIXES_GT_STYLE_COUNT))
- {
- if ((string[0] == '\0') || (string[0] == '\1' && string[1] == '\0'))
- {
- #if FIXES_Single
- return _FIXES_GameTextShow(MAX_PLAYERS, FIXES_gscSpace, time, style);
- #else
- return CallRemoteFunction(FIXES_gscGameTextShow, FIXES_gscSpec@isii, MAX_PLAYERS, FIXES_gscSpace, time, style);
- #endif
- }
- else
- {
- #if FIXES_Single
- return _FIXES_GameTextShow(MAX_PLAYERS, string, time, style);
- #else
- return CallRemoteFunction(FIXES_gscGameTextShow, FIXES_gscSpec@isii, MAX_PLAYERS, string, time, style);
- #endif
- }
- }
- return 0;
- }
- #define _ALS_GameTextForAll
- #define GameTextForAll FIXES_GameTextForAll
- #endif
- /*
- * FIXES_GameTextForPlayer(playerid, string[], time, style)
- *
- * FIXES:
- * GameText
- */
- #if defined _ALS_GameTextForPlayer
- #error _ALS_GameTextForPlayer defined
- #endif
- native BAD_GameTextForPlayer(playerid, const string[], time, style) = GameTextForPlayer;
- #if FIX_GameText
- stock FIXES_GameTextForPlayer(playerid, string[], time, style)
- {
- if (_FIXES_IN_RANGE(style, 0, FIXES_GT_STYLE_COUNT) && _FIXES_IS_PLAYER_CONNECTED(playerid))
- {
- if ((string[0] <= '\0') || (string[0] == '\1' && string[1] == '\0'))
- {
- #if FIXES_Single
- return _FIXES_GameTextShow(playerid, FIXES_gscSpace, time, style);
- #else
- return CallRemoteFunction(FIXES_gscGameTextShow, FIXES_gscSpec@isii, playerid, FIXES_gscSpace, time, style);
- #endif
- }
- else
- {
- #if FIXES_Single
- return _FIXES_GameTextShow(playerid, string, time, style);
- #else
- return CallRemoteFunction(FIXES_gscGameTextShow, FIXES_gscSpec@isii, playerid, string, time, style);
- #endif
- }
- }
- return 0;
- }
- #define _ALS_GameTextForPlayer
- #define GameTextForPlayer FIXES_GameTextForPlayer
- #endif
- /*
- * HideGameTextForAll(style)
- *
- * FIXES:
- * HideGameText
- */
- #if defined _ALS_HideGameTextForAll
- #error _ALS_HideGameTextForAll defined
- #endif
- native BAD_HideGameTextForAll(style) = HideGameTextForAll;
- #if FIX_HideGameText
- #define _ALS_HideGameTextForAll
- #define HideGameTextForAll(%0) GameTextForAll(FIXES_gscSpace, 0, (%0))
- #endif
- /*
- * HideGameTextForPlayer(playerid, style)
- *
- * FIXES:
- * HideGameText
- */
- #if defined _ALS_HideGameTextForPlayer
- #error _ALS_HideGameTextForPlayer defined
- #endif
- native BAD_HideGameTextForPlayer(playerid, style) = HideGameTextForPlayer;
- #if FIX_HideGameText
- #define _ALS_HideGameTextForPlayer
- #define HideGameTextForPlayer(%1,%0) GameTextForPlayer((%1), FIXES_gscSpace, 0, (%0))
- #endif
- /*
- * PlayerText:FIXES_CreatePlayerTextDraw(playerid, Float:x, Float:y, text[])
- *
- * FIXES:
- * CreatePlayerTextDraw
- */
- #if defined _ALS_CreatePlayerTextDraw
- #error _ALS_CreatePlayerTextDraw defined
- #endif
- native Text:BAD_CreatePlayerTextDraw(playerid, Float:x, Float:y, text[]) = CreatePlayerTextDraw;
- #if FIX_CreatePlayerTextDraw
- stock PlayerText:FIXES_CreatePlayerTextDraw(playerid, Float:x, Float:y, text[])
- {
- if ((text[0] == '\0') || (text[0] == '\1' && text[1] == '\0'))
- {
- return CreatePlayerTextDraw(playerid, x, y, FIXES_gscSpace);
- }
- else
- {
- return CreatePlayerTextDraw(playerid, x, y, text);
- }
- }
- #define _ALS_CreatePlayerTextDraw
- #define CreatePlayerTextDraw FIXES_CreatePlayerTextDraw
- #endif
- /*
- * FIXES_PlayerTextDrawSetString(playerid, PlayerText:text, string[])
- *
- * FIXES:
- * PlayerTextDrawSetString
- */
- #if defined _ALS_PlayerTextDrawSetString
- #error _ALS_PlayerTextDrawSetString defined
- #endif
- native BAD_PlayerTextDrawSetString(playerid, PlayerText:text, string[]) = PlayerTextDrawSetString;
- #if FIX_PlayerTextDrawSetString
- stock FIXES_PlayerTextDrawSetString(playerid, PlayerText:text, string[])
- {
- if ((string[0] == '\0') || (string[0] == '\1' && string[1] == '\0'))
- {
- return PlayerTextDrawSetString(playerid, text, FIXES_gscSpace);
- }
- else
- {
- return PlayerTextDrawSetString(playerid, text, string);
- }
- }
- #define _ALS_PlayerTextDrawSetString
- #define PlayerTextDrawSetString FIXES_PlayerTextDrawSetString
- #endif
- /*
- * Text:FIXES_TextDrawCreate(Float:x, Float:y, text[])
- *
- * FIXES:
- * TextDrawCreate
- */
- #if defined _ALS_TextDrawCreate
- #error _ALS_TextDrawCreate defined
- native Text:BAD_TextDrawCreate(Float:x, Float:y, text[]) = TextDrawCreate;
- #if FIX_TextDrawCreate
- stock Text:FIXES_TextDrawCreate(Float:x, Float:y, text[])
- {
- if ((text[0] == '\0') || (text[0] == '\1' && text[1] == '\0'))
- {
- return TextDrawCreate(x, y, FIXES_gscSpace);
- }
- else
- {
- return TextDrawCreate(x, y, text);
- }
- }
- #endif
- #define _ALS_TextDrawCreate
- #define TextDrawCreate FIXES_TextDrawCreate
- #endif
- /*
- * FIXES_TextDrawSetString(Text:text, string[])
- *
- * FIXES:
- * TextDrawSetString
- */
- #if defined _ALS_TextDrawSetString
- #error _ALS_TextDrawSetString defined
- #endif
- native BAD_TextDrawSetString(Text:text, string[]) = TextDrawSetString;
- #if FIX_TextDrawSetString
- stock FIXES_TextDrawSetString(Text:text, string[])
- {
- if ((string[0] == '\0') || (string[0] == '\1' && string[1] == '\0'))
- {
- return TextDrawSetString(text, FIXES_gscSpace);
- }
- else
- {
- return TextDrawSetString(text, string);
- }
- }
- #define _ALS_TextDrawSetString
- #define TextDrawSetString FIXES_TextDrawSetString
- #endif
- /*
- * FIXES_AllowInteriorWeapons(allow)
- *
- * FIXES:
- * AllowInteriorWeapons
- */
- #if defined _ALS_AllowInteriorWeapons
- #error _ALS_AllowInteriorWeapons defined
- #endif
- native BAD_AllowInteriorWeapons(allow) = AllowInteriorWeapons;
- #if FIX_AllowInteriorWeapons
- #if FIXES_Single
- stock FIXES_AllowInteriorWeapons(allow)
- {
- if (allow)
- {
- FIXES_gsSettings &= ~e_FIXES_SETTINGS_INTERIOR;
- _FIXES_FOREACH(FIXES_gsPlayersIterator, i)
- {
- FIXES_gsPlayerBools[i] &= ~e_FIXES_BOOLS_INTERIOR;
- }
- }
- else
- {
- FIXES_gsSettings |= e_FIXES_SETTINGS_INTERIOR;
- _FIXES_FOREACH(FIXES_gsPlayersIterator, i)
- {
- if (GetPlayerInterior(i))
- {
- FIXES_gsPlayerBools[i] |= e_FIXES_BOOLS_INTERIOR;
- }
- }
- }
- return allow;
- }
- #else
- forward _FIXES_AllowInteriorWeapons(allow);
- stock FIXES_AllowInteriorWeapons(allow)
- {
- CallRemoteFunction(FIXES_gscAllowInteriorWeapons, FIXES_gscSpec@i, allow);
- return allow;
- }
- public _FIXES_AllowInteriorWeapons(allow)
- {
- if (allow)
- {
- FIXES_gsSettings &= ~e_FIXES_SETTINGS_INTERIOR;
- _FIXES_FOREACH(FIXES_gsPlayersIterator, i)
- {
- FIXES_gsPlayerBools[i] &= ~e_FIXES_BOOLS_INTERIOR;
- }
- }
- else
- {
- FIXES_gsSettings |= e_FIXES_SETTINGS_INTERIOR;
- _FIXES_FOREACH(FIXES_gsPlayersIterator, i)
- {
- if (GetPlayerInterior(i))
- {
- FIXES_gsPlayerBools[i] |= e_FIXES_BOOLS_INTERIOR;
- }
- }
- }
- return allow;
- }
- #endif
- #define _ALS_AllowInteriorWeapons
- #define AllowInteriorWeapons FIXES_AllowInteriorWeapons
- #endif
- /*
- * FIXES_GetPlayerInterior(playerid)
- *
- * FIXES:
- * GetPlayerInterior
- */
- #if defined _ALS_GetPlayerInterior
- #error _ALS_GetPlayerInterior defined
- #endif
- native BAD_GetPlayerInterior(playerid) = GetPlayerInterior;
- #if FIX_GetPlayerInterior
- stock FIXES_GetPlayerInterior(playerid)
- {
- if (_FIXES_IN_RANGE(playerid, 0, MAX_PLAYERS))
- {
- #if FIXES_Single
- return FIXES_gsInterior[playerid];
- #else
- return GetPVarInt(playerid, FIXES_pvarPlayerInterior);
- #endif
- }
- return 0;
- }
- #define _ALS_GetPlayerInterior
- #define GetPlayerInterior FIXES_GetPlayerInterior
- #endif
- /*
- * FIXES_SetPlayerInterior(playerid, interiorid)
- *
- * FIXES:
- * GetPlayerInterior
- */
- #if defined _ALS_SetPlayerInterior
- #error _ALS_SetPlayerInterior defined
- #endif
- native BAD_SetPlayerInterior(playerid, interiorid) = SetPlayerInterior;
- #if FIX_GetPlayerInterior
- stock FIXES_SetPlayerInterior(playerid, interiorid)
- {
- if (_FIXES_IN_RANGE(playerid, 0, MAX_PLAYERS))
- {
- #if FIXES_Single
- FIXES_gsInterior[playerid] = interiorid;
- #else
- SetPVarInt(playerid, FIXES_pvarPlayerInterior, interiorid);
- #endif
- return SetPlayerInterior(playerid, interiorid);
- }
- return 0;
- }
- #define _ALS_SetPlayerInterior
- #define SetPlayerInterior FIXES_SetPlayerInterior
- #endif
- /*
- * OnPlayerClickMap(playerid, Float:fX, Float:fY, Float:fZ)
- *
- * FIXES:
- * AllowTeleport
- */
- #if FIX_AllowTeleport && !defined FILTERSCRIPT
- forward _FIXES_AllowTeleport(playerid, allow);
- public OnPlayerClickMap(playerid, Float:fX, Float:fY, Float:fZ)
- {
- // ======================
- // BEGIN: AllowTeleport
- // ======================
- #if FIX_AllowTeleport
- if (!_FIXES_gIsFilterscript)
- {
- // Unusually, the call order here is always Game Mode first -
- // most callbacks are Filter Script first.
- if ((FIXES_gsPlayerBools[playerid] & e_FIXES_BOOLS_TELEPORT) || ((FIXES_gsSettings & e_FIXES_SETTINGS_ADMIN_TELEPORT) && (IsPlayerAdmin(playerid))))
- {
- SetPlayerPosFindZ(playerid, fX, fY, fZ);
- }
- }
- #endif
- // ======================
- // END: AllowTeleport
- // ======================
- return FIXES_OnPlayerClickMap(playerid, fX, fY, fZ);
- }
- #if defined _ALS_OnPlayerClickMap
- #error _ALS_OnPlayerClickMap defined
- #endif
- #define _ALS_OnPlayerClickMap
- #define OnPlayerClickMap(%0) FIXES_OnPlayerClickMap(%0) <_ALS : _ALS_go>
- _FIXES_FORWARD FIXES_OnPlayerClickMap(playerid, Float:fX, Float:fY, Float:fZ);
- #endif
- /*
- * FIXES_AllowPlayerTeleport(playerid, allow)
- *
- * FIXES:
- * AllowTeleport
- */
- #if defined _ALS_AllowPlayerTeleport
- #error _ALS_AllowPlayerTeleport defined
- #endif
- native BAD_AllowPlayerTeleport(playerid, allow) = AllowPlayerTeleport;
- #if FIX_AllowTeleport
- #if FIXES_Single
- stock FIXES_AllowPlayerTeleport(playerid, allow)
- {
- if (_FIXES_IN_RANGE(playerid, 0, MAX_PLAYERS))
- {
- if (allow)
- {
- FIXES_gsPlayerBools[playerid] |= e_FIXES_BOOLS_TELEPORT;
- }
- else
- {
- FIXES_gsPlayerBools[playerid] &= ~e_FIXES_BOOLS_TELEPORT;
- }
- }
- return 0;
- }
- #else
- stock FIXES_AllowPlayerTeleport(playerid, allow)
- {
- if (_FIXES_IN_RANGE(playerid, 0, MAX_PLAYERS))
- {
- CallRemoteFunction(FIXES_gscAllowTeleport, FIXES_gscSpec@ii, playerid, allow);
- }
- return 0;
- }
- #endif
- #define _ALS_AllowPlayerTeleport
- #define AllowPlayerTeleport FIXES_AllowPlayerTeleport
- #endif
- /*
- * FIXES_AllowAdminTeleport(allow)
- *
- * FIXES:
- * AllowTeleport
- */
- #if defined _ALS_AllowAdminTeleport
- #error _ALS_AllowAdminTeleport defined
- #endif
- native BAD_AllowAdminTeleport(allow) = AllowAdminTeleport;
- #if FIX_AllowTeleport
- #if FIXES_Single
- stock FIXES_AllowAdminTeleport(allow)
- {
- if (allow)
- {
- FIXES_gsSettings |= e_FIXES_SETTINGS_ADMIN_TELEPORT;
- }
- else
- {
- FIXES_gsSettings &= ~e_FIXES_SETTINGS_ADMIN_TELEPORT;
- }
- return allow;
- }
- #else
- stock FIXES_AllowAdminTeleport(allow)
- {
- return
- CallRemoteFunction(FIXES_gscAllowTeleport, FIXES_gscSpec@ii, INVALID_PLAYER_ID, allow),
- allow;
- }
- #endif
- #define _ALS_AllowAdminTeleport
- #define AllowAdminTeleport FIXES_AllowAdminTeleport
- #endif
- /*
- * FIXES_AllowAdminTeleport(allow)
- *
- * FIXES:
- * AllowTeleport
- */
- #if FIX_AllowTeleport && !defined FILTERSCRIPT && !FIXES_Single
- public _FIXES_AllowTeleport(playerid, allow)
- {
- if (!_FIXES_gIsFilterscript)
- {
- if (playerid == INVALID_PLAYER_ID)
- {
- if (allow)
- {
- FIXES_gsSettings |= e_FIXES_SETTINGS_ADMIN_TELEPORT;
- }
- else
- {
- FIXES_gsSettings &= ~e_FIXES_SETTINGS_ADMIN_TELEPORT;
- }
- }
- else
- {
- if (allow)
- {
- FIXES_gsPlayerBools[playerid] |= e_FIXES_BOOLS_TELEPORT;
- }
- else
- {
- FIXES_gsPlayerBools[playerid] &= ~e_FIXES_BOOLS_TELEPORT;
- }
- }
- }
- }
- #endif
- /*
- * FIXES_SetPlayerSpecialAction(playerid, actionid)
- *
- * FIXES:
- * SetPlayerSpecialAction
- */
- #if defined _ALS_SetPlayerSpecialAction
- #error _ALS_SetPlayerSpecialAction defined
- #endif
- native BAD_SetPlayerSpecialAction(playerid, actionid) = SetPlayerSpecialAction;
- #if FIX_SetPlayerSpecialAction
- stock FIXES_SetPlayerSpecialAction(playerid, actionid)
- {
- if (GetPlayerSpecialAction(playerid) == SPECIAL_ACTION_USEJETPACK)
- {
- ClearAnimations(playerid);
- }
- SetPlayerSpecialAction(playerid, actionid);
- return 1;
- }
- #define _ALS_SetPlayerSpecialAction
- #define SetPlayerSpecialAction FIXES_SetPlayerSpecialAction
- #endif
- /*
- * FIXES_ClearAnimations(playerid, forcesync = 0)
- *
- * FIXES:
- * ClearAnimations
- */
- #if defined _ALS_ClearAnimations
- #error _ALS_ClearAnimations defined
- #endif
- native BAD_ClearAnimations(playerid, forcesync = 0) = ClearAnimations;
- #if FIX_ClearAnimations || FIX_ClearAnimations_2
- stock FIXES_ClearAnimations(playerid, forcesync = 0)
- {
- #if FIX_ClearAnimations || FIX_ClearAnimations_2
- if (IsPlayerInAnyVehicle(playerid))
- #endif
- #if FIX_ClearAnimations
- {
- return ApplyAnimation(playerid, "PED", "CAR_SIT", 4.0, 0, 0, 0, 0, 1, forcesync);
- }
- #endif
- #if FIX_ClearAnimations + FIX_ClearAnimations_2 == 1 // XOR
- {
- return ClearAnimations(playerid, forcesync);
- }
- #endif
- #if FIX_ClearAnimations_2
- new
- ret = ClearAnimations(playerid, forcesync);
- ApplyAnimation(playerid, "PED", "IDLE_STANCE", 4.0, 0, 0, 0, 0, 1, forcesync);
- ApplyAnimation(playerid, "PED", "IDLE_CHAT", 4.0, 0, 0, 0, 0, 1, forcesync);
- ApplyAnimation(playerid, "PED", "WALK_PLAYER", 4.0, 0, 0, 0, 0, 1, forcesync);
- return ret;
- #endif
- }
- #define _ALS_ClearAnimations
- #define ClearAnimations FIXES_ClearAnimations
- #endif
- /*
- * FIXES_GangZoneCreate(Float:minx, Float:miny, Float:maxx, Float:maxy)
- *
- * FIXES:
- * GangZoneCreate
- */
- #if defined _ALS_GangZoneCreate
- #error _ALS_GangZoneCreate defined
- #endif
- native BAD_GangZoneCreate(Float:minx, Float:miny, Float:maxx, Float:maxy) = GangZoneCreate;
- #if FIX_GangZoneCreate
- stock FIXES_GangZoneCreate(Float:minx, Float:miny, Float:maxx, Float:maxy)
- {
- return GangZoneCreate(floatsub(minx, floatfract(minx)), floatsub(miny, floatfract(miny)), floatsub(maxx, floatfract(maxx)), floatsub(maxy, floatfract(maxy)));
- }
- #define _ALS_GangZoneCreate
- #define GangZoneCreate FIXES_GangZoneCreate
- #endif
- /*
- * FIXES_ShowPlayerDialog(playerid, dialog, style, title[], caption[], button1[], button2[])
- *
- * FIXES:
- * OnDialogResponse
- * GetPlayerDialog
- */
- #if defined _ALS_ShowPlayerDialog
- #error _ALS_ShowPlayerDialog defined
- #endif
- native BAD_ShowPlayerDialog(playerid, dialog, style, title[], caption[], button1[], button2[]) = ShowPlayerDialog;
- #if FIX_OnDialogResponse || FIX_GetPlayerDialog
- stock FIXES_ShowPlayerDialog(playerid, dialog, style, title[], caption[], button1[], button2[])
- {
- if (_FIXES_IN_RANGE(playerid, 0, MAX_PLAYERS))
- {
- #if FIXES_Single
- FIXES_gsDialogID[playerid] = dialog;
- #else
- SetPVarInt(playerid, FIXES_pvarPlayerDialog, dialog);
- #endif
- return ShowPlayerDialog(playerid, dialog, style, title, caption, button1, button2);
- }
- return 0;
- }
- #define _ALS_ShowPlayerDialog
- #define ShowPlayerDialog FIXES_ShowPlayerDialog
- #endif
- /*
- * OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
- *
- * FIXES:
- * OnDialogResponse
- * GetPlayerDialog
- */
- #if FIX_OnDialogResponse || FIX_GetPlayerDialog
- public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
- {
- // =========================
- // BEGIN: OnDialogResponse
- // =========================
- #if FIX_OnDialogResponse || FIX_GetPlayerDialog
- #if FIXES_Single
- #if FIX_OnDialogResponse
- dialogid = FIXES_gsDialogID[playerid];
- #endif
- FIXES_gsDialogID[playerid] = INVALID_DIALOG_ID;
- #elseif FIX_OnDialogResponse
- _FIXES_IS_IN_CHARGE()
- {
- // If there are multiple scripts, we can't just wipe the
- // current dialog data or subsequent scripts will display
- // the wrong value.
- dialogid = GetPVarInt(playerid, FIXES_pvarPlayerDialog),
- SetPVarInt(playerid, FIXES_pvarCurrentDialog, dialogid),
- SetPVarInt(playerid, FIXES_pvarPlayerDialog, INVALID_DIALOG_ID);
- }
- else
- {
- dialogid = GetPVarInt(playerid, FIXES_pvarCurrentDialog);
- }
- #else
- SetPVarInt(playerid, FIXES_pvarPlayerDialog, INVALID_DIALOG_ID);
- #endif
- if (inputtext[0])
- {
- return FIXES_OnDialogResponse(playerid, dialogid, response, listitem, inputtext);
- }
- else
- {
- return FIXES_OnDialogResponse(playerid, dialogid, response, listitem, FIXES_gscNULL);
- }
- #endif
- // =========================
- // END: OnDialogResponse
- // =========================
- }
- #if defined _ALS_OnDialogResponse
- #error _ALS_OnDialogResponse defined
- #endif
- #define _ALS_OnDialogResponse
- #define OnDialogResponse(%0) FIXES_OnDialogResponse(%0) <_ALS : _ALS_go>
- _FIXES_FORWARD FIXES_OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]);
- #endif
- /*
- * FIXES_GetPlayerDialog(playerid)
- *
- * FIXES:
- * GetPlayerDialog
- */
- #if defined _ALS_GetPlayerDialog
- #error _ALS_GetPlayerDialog defined
- #endif
- native BAD_GetPlayerDialog(playerid) = GetPlayerDialog;
- #if FIX_GetPlayerDialog
- stock FIXES_GetPlayerDialog(playerid)
- {
- if (_FIXES_IN_RANGE(playerid, 0, MAX_PLAYERS))
- {
- #if FIXES_Single
- return FIXES_gsDialogID[playerid];
- #else
- return GetPVarInt(playerid, FIXES_pvarPlayerDialog);
- #endif
- }
- return -1;
- }
- #define _ALS_GetPlayerDialog
- #define GetPlayerDialog FIXES_GetPlayerDialog
- #endif
- /*
- * FIXES_valstr(dest[], value, bool:pack = false)
- *
- * FIXES:
- * valstr
- */
- #if defined _ALS_valstr
- #error _ALS_valstr defined
- #endif
- native BAD_valstr(dest[], value, bool:pack = false) = valstr;
- #if FIX_valstr
- stock FIXES_valstr(dest[], value, bool:pack = false)
- {
- // "format" can't handle cellmin properly.
- static const
- sc_szCellmin[] = !"-2147483648";
- if (value == cellmin)
- {
- pack && strpack(dest, sc_szCellmin, 12) || strunpack(dest, sc_szCellmin, 12);
- }
- else
- {
- format(dest, 12, "%d", value),
- pack && strpack(dest, dest, 12);
- }
- return 0;
- }
- #define _ALS_valstr
- #define valstr FIXES_valstr
- #endif
- /*
- * FIXES_fclose(File:handle)
- *
- * FIXES:
- * fclose
- */
- #if defined _ALS_fclose
- #error _ALS_fclose defined
- #endif
- native BAD_fclose(File:handle) = fclose;
- #if FIX_fclose
- stock bool:FIXES_fclose(File:handle)
- {
- return handle && fclose(handle);
- }
- #define _ALS_fclose
- #define fclose FIXES_fclose
- #endif
- /*
- * FIXES_fwrite(File:handle, const string[])
- *
- * FIXES:
- * fwrite
- */
- #if defined _ALS_fwrite
- #error _ALS_fwrite defined
- #endif
- native BAD_fwrite(File:handle, const string[]) = fwrite;
- #if FIX_fwrite
- stock FIXES_fwrite(File:handle, const string[])
- {
- return handle && fwrite(handle, string);
- }
- #define _ALS_fwrite
- #define fwrite FIXES_fwrite
- #endif
- /*
- * FIXES_fread(File:handle, string[], size = sizeof (string), bool:pack = false)
- *
- * FIXES:
- * fread
- */
- #if defined _ALS_fread
- #error _ALS_fread defined
- #endif
- native BAD_fread(File:handle, string[], size = sizeof (string), bool:pack = false) = fread;
- #if FIX_fread
- stock FIXES_fread(File:handle, string[], size = sizeof (string), bool:pack = false)
- {
- return handle && fread(handle, string, size, pack);
- }
- #define _ALS_fread
- #define fread FIXES_fread
- #endif
- /*
- * FIXES_fputchar(File:handle, value, bool:utf8 = true)
- *
- * FIXES:
- * fputchar
- */
- #if defined _ALS_fputchar
- #error _ALS_fputchar defined
- #endif
- native BAD_fputchar(File:handle, value, bool:utf8 = true) = fputchar;
- #if FIX_fputchar
- stock bool:FIXES_fputchar(File:handle, value, bool:utf8 = true)
- {
- return handle && fputchar(handle, value, utf8);
- }
- #define _ALS_fputchar
- #define fputchar FIXES_fputchar
- #endif
- /*
- * FIXES_fgetchar(File:handle, value, bool:utf8 = true)
- *
- * FIXES:
- * fgetchar
- */
- #if defined _ALS_fgetchar
- #error _ALS_fgetchar defined
- #endif
- native BAD_fgetchar(File:handle, value, bool:utf8 = true) = fgetchar;
- #if FIX_fgetchar
- stock FIXES_fgetchar(File:handle, value, bool:utf8 = true)
- {
- return handle && fgetchar(handle, value, utf8);
- }
- #define _ALS_fgetchar
- #define fgetchar FIXES_fgetchar
- #endif
- /*
- * FIXES_fblockwrite(File:handle, const buffer[], size = sizeof (buffer))
- *
- * FIXES:
- * fblockwrite
- */
- #if defined _ALS_fblockwrite
- #error _ALS_fblockwrite defined
- #endif
- native BAD_fblockwrite(File:handle, const buffer[], size = sizeof (buffer)) = fblockwrite;
- #if FIX_fblockwrite
- stock FIXES_fblockwrite(File:handle, const buffer[], size = sizeof (buffer))
- {
- return handle && fblockwrite(handle, buffer, size);
- }
- #define _ALS_fblockwrite
- #define fblockwrite FIXES_fblockwrite
- #endif
- /*
- * FIXES_fblockread(File:handle, buffer[], size = sizeof (buffer))
- *
- * FIXES:
- * fblockread
- */
- #if defined _ALS_fblockread
- #error _ALS_fblockread defined
- #endif
- native BAD_fblockread(File:handle, buffer[], size = sizeof (buffer)) = fblockread;
- #if FIX_fblockread
- stock FIXES_fblockread(File:handle, buffer[], size = sizeof (buffer))
- {
- return handle && fblockread(handle, buffer, size);
- }
- #define _ALS_fblockread
- #define fblockread FIXES_fblockread
- #endif
- /*
- * FIXES_fseek(File:handle, position = 0, seek_whence:whence = seek_start)
- *
- * FIXES:
- * fseek
- */
- #if defined _ALS_fseek
- #error _ALS_fseek defined
- #endif
- native BAD_fseek(File:handle, position = 0, seek_whence:whence = seek_start) = fseek;
- #if FIX_fseek
- stock FIXES_fseek(File:handle, position = 0, seek_whence:whence = seek_start)
- {
- return handle && fseek(handle, position, whence);
- }
- #define _ALS_fseek
- #define fseek FIXES_fseek
- #endif
- /*
- * FIXES_flength(File:handle)
- *
- * FIXES:
- * flength
- */
- #if defined _ALS_flength
- #error _ALS_flength defined
- #endif
- native BAD_flength(File:handle) = flength;
- #if FIX_flength
- stock FIXES_flength(File:handle)
- {
- return handle && flength(handle);
- }
- #define _ALS_flength
- #define flength FIXES_flength
- #endif
- /*
- * FIXES_Kick(playerid)
- *
- * FIXES:
- * Kick
- */
- #if defined _ALS_Kick
- #error _ALS_Kick defined
- #endif
- native BAD_Kick(playerid) = Kick;
- #if FIX_Kick
- forward _FIXES_Kick(playerid);
- public _FIXES_Kick(playerid)
- {
- FIXES_gsPlayerBools[playerid] &= ~e_FIXES_BOOLS_KICKED,
- Kick(playerid);
- }
- #if !FIXES_Single
- forward @FIXES_Kick(playerid);
- public @FIXES_Kick(playerid)
- {
- FIXES_BlockUpdate(playerid, true, 0);
- }
- #endif
- stock FIXES_Kick(playerid)
- {
- if (FIXES_gsPlayerBools[playerid] & e_FIXES_BOOLS_ON_PLAYER_CONNECT)
- {
- // Disable as much of the server as possible quickly.
- return
- #if FIXES_Single
- FIXES_BlockUpdate(playerid, true, 0),
- #else
- CallRemoteFunction("@FIXES_Kick", "i", playerid),
- #endif
- TogglePlayerSpectating(playerid, true),
- TogglePlayerControllable(playerid, false),
- SetPVarInt(playerid, FIXES_pvarKick, SetTimerEx(FIXES_gscKick, 1000, 0, FIXES_gscSpec@i, playerid)),
- FIXES_gsPlayerBools[playerid] |= e_FIXES_BOOLS_KICKED,
- 1;
- }
- else
- {
- return Kick(playerid);
- }
- }
- #define _ALS_Kick
- #define Kick FIXES_Kick
- #endif
- /*
- * FIXES_IsPAttachedObjectSlotUsed(playerid, index)
- *
- * FIXES:
- * IsPlayerAttachedObjectSlotUsed
- */
- #if defined _ALS_IsPAttachedObjSlotUsed
- #error _ALS_IsPAttachedObjSlotUsed defined
- #endif
- native BAD_IsPlayerAttachedObjSlotUsed(playerid, index) = IsPlayerAttachedObjectSlotUsed;
- #if FIX_IsPlayerAttachedObjSlotUsed
- stock FIXES_IsPAttachedObjectSlotUsed(playerid, index)
- {
- if (_FIXES_IS_PLAYER_CONNECTED(playerid))
- {
- return FIXES_gsObjectSlots[playerid / _FIXES_ATTACHMENTS] & 1 << playerid % _FIXES_ATTACHMENTS * MAX_PLAYER_ATTACHED_OBJECTS + index;
- }
- return 0;
- }
- #define _ALS_IsPAttachedObjSlotUsed
- #define IsPlayerAttachedObjectSlotUsed FIXES_IsPAttachedObjectSlotUsed
- #endif
- /*
- * _FIXES_SetPlayerAttachedObject(slot, to)
- *
- * FIXES:
- * IsPlayerAttachedObjectSlotUsed
- */
- #if (FIX_IsPlayerAttachedObjSlotUsed || FIX_SetPlayerAttachedObject) && !FIXES_Single
- forward _FIXES_SetPlayerAttachedObject(slot, to);
- public _FIXES_SetPlayerAttachedObject(slot, to)
- {
- FIXES_gsObjectSlots[slot] = to;
- }
- #endif
- /*
- * FIXES_SetPlayerAttachedObject(playerid, index, modelid, bone, Float:fOffsetX = 0.0, Float:fOffsetY = 0.0, Float:fOffsetZ = 0.0, Float:fRotX = 0.0, Float:fRotY = 0.0, Float:fRotZ = 0.0, Float:fScaleX = 1.0, Float:fScaleY = 1.0, Float:fScaleZ = 1.0)
- *
- * FIXES:
- * IsPlayerAttachedObjectSlotUsed
- * SetPlayerAttachedObject
- */
- #if defined _ALS_SetPlayerAttachedObject
- #error _ALS_SetPlayerAttachedObject defined
- #endif
- native BAD_SetPlayerAttachedObject(playerid, index, modelid, bone, Float:fOffsetX = 0.0, Float:fOffsetY = 0.0, Float:fOffsetZ = 0.0, Float:fRotX = 0.0, Float:fRotY = 0.0, Float:fRotZ = 0.0, Float:fScaleX = 1.0, Float:fScaleY = 1.0, Float:fScaleZ = 1.0, materialcolor1 = 0, materialcolor2 = 0) = SetPlayerAttachedObject;
- #if FIX_IsPlayerAttachedObjSlotUsed || FIX_SetPlayerAttachedObject
- stock FIXES_SetPlayerAttachedObject(playerid, index, modelid, bone, Float:fOffsetX = 0.0, Float:fOffsetY = 0.0, Float:fOffsetZ = 0.0, Float:fRotX = 0.0, Float:fRotY = 0.0, Float:fRotZ = 0.0, Float:fScaleX = 1.0, Float:fScaleY = 1.0, Float:fScaleZ = 1.0, materialcolor1 = 0, materialcolor2 = 0)
- {
- if (SetPlayerAttachedObject(playerid, index, modelid, bone, fOffsetX, fOffsetY, fOffsetZ, fRotX, fRotY, fRotZ, fScaleX, fScaleY, fScaleZ, materialcolor1, materialcolor2))
- {
- #if FIXES_Single
- FIXES_gsObjectSlots[playerid / _FIXES_ATTACHMENTS] |= (1 << playerid % _FIXES_ATTACHMENTS * MAX_PLAYER_ATTACHED_OBJECTS + index);
- #else
- new
- slot = playerid / _FIXES_ATTACHMENTS;
- CallRemoteFunction(FIXES_gscSetPlayerAttachedObj, FIXES_gscSpec@ii, slot, FIXES_gsObjectSlots[slot] | (1 << playerid % _FIXES_ATTACHMENTS * MAX_PLAYER_ATTACHED_OBJECTS + index));
- #endif
- return 1;
- }
- return 0;
- }
- #define _ALS_SetPlayerAttachedObject
- #define SetPlayerAttachedObject FIXES_SetPlayerAttachedObject
- #endif
- /*
- * FIXES_RemovePlayerAttachedObj(playerid, index)
- *
- * FIXES:
- * IsPlayerAttachedObjectSlotUsed
- */
- #if defined _ALS_RemovePlayerAttachedObject
- #error _ALS_RemovePlayerAttachedObject defined
- #endif
- native BAD_RemovePlayerAttachedObject(playerid, index) = RemovePlayerAttachedObject;
- #if FIX_IsPlayerAttachedObjSlotUsed || FIX_SetPlayerAttachedObject
- stock FIXES_RemovePlayerAttachedObj(playerid, index)
- {
- if (RemovePlayerAttachedObject(playerid, index))
- {
- #if FIXES_Single
- FIXES_gsObjectSlots[playerid / _FIXES_ATTACHMENTS] &= ~(1 << playerid % _FIXES_ATTACHMENTS * MAX_PLAYER_ATTACHED_OBJECTS + index);
- #else
- new
- slot = playerid / _FIXES_ATTACHMENTS;
- CallRemoteFunction(FIXES_gscSetPlayerAttachedObj, FIXES_gscSpec@ii, slot, FIXES_gsObjectSlots[slot] & ~(1 << playerid % _FIXES_ATTACHMENTS * MAX_PLAYER_ATTACHED_OBJECTS + index));
- #endif
- return 1;
- }
- return 0;
- }
- #define _ALS_RemovePlayerAttachedObject
- #define RemovePlayerAttachedObject FIXES_RemovePlayerAttachedObj
- #endif
- /*
- * _FIXES_DetermineOrder()
- *
- * Figure out which the first filterscript to be called is so that it can do the
- * majority of the work. More detail: Several pieces of code for some fixes
- * rely on things like blocking "OnPlayerUpdate". This should be done in the
- * first script in which "OnPlayerUpdate" is called only, so we need to find out
- * in advance which script will be called first (at least out of all the fixed
- * scripts).
- */
- #if !FIXES_Single
- public _FIXES_DetermineOrder()
- {
- // TODO: Graceful handoff. I thought I was past all this rubbish!
- if (!_FIXES_gIsFilterscript)
- {
- if (existproperty(5, FIXES_gscNoGMProperty))
- {
- return 0;
- }
- // Make sure certain data is synced with what the GM thinks it is.
- // =============================
- // BEGIN: AllowInteriorWeapons
- // =============================
- #if FIX_AllowInteriorWeapons
- CallRemoteFunction(FIXES_gscAllowInteriorWeapons, FIXES_gscSpec@i, !(FIXES_gsSettings & e_FIXES_SETTINGS_INTERIOR));
- #endif
- // =============================
- // END: AllowInteriorWeapons
- // =============================
- // ================================
- // BEGIN: SetPlayerAttachedObject
- // ================================
- #if FIX_IsPlayerAttachedObjSlotUsed || FIX_SetPlayerAttachedObject
- for (new i = 0; i != _FIXES_ATTACHMENTS; ++i)
- {
- CallRemoteFunction(FIXES_gscSetPlayerAttachedObj, FIXES_gscSpec@ii, i, FIXES_gsObjectSlots[i]);
- }
- #endif
- // ==============================
- // END: SetPlayerAttachedObject
- // ==============================
- }
- if (existproperty(5, FIXES_gscOrderProperty))
- {
- // Either this is a Filter Script (1) and we don't want gamemodes
- // (1) or this isn't a filterscript (0) and we do want gamemodes
- // (0). All other cases return here due to a logic mismatch. This
- // is to rectify the difference in call orders between
- // "CallRemoteFunction" and normal callbacks. Now DOESN'T end on
- // the second time round for filterscripts to correctly pass on the
- // data to GameModes.
- if (!existproperty(5, FIXES_gscNoGMProperty) && _FIXES_gIsFilterscript == bool:getproperty(5, FIXES_gscOrderProperty))
- {
- // The game mode is not in charge, which means we are checking
- // the filterscripts a second time and shouldn't be.
- return 0;
- }
- // If this script was previously the owner, and we are not ending
- // the game mode (in which case discard all data), and if we are
- // only dealing with filterscripts or the gamemode is now the
- // master.
- if (FIXES_gsSettings & (e_FIXES_SETTINGS_IN_CHARGE | e_FIXES_SETTINGS_DROP_ALL_DATA) == e_FIXES_SETTINGS_IN_CHARGE)
- {
- FIXES_PRINTF("_FIXES_DetermineOrder: Was in charge");
- // This script is currently in charge, but a new script has
- // usurped it! Pass all relevant data over to the new script.
- // Also, this wasn't triggered by a game mode change (where we
- // just want to dump and reset all data). There is no need to
- // reset the admin teleport data as that is always handled by
- // the Game Mode, so it will either be correct, or it will be
- // blank.
- FIXES_gsSettings &= ~e_FIXES_SETTINGS_IN_CHARGE;
- #if FIX_SetPlayerWorldBounds || FIX_TogglePlayerControllable
- _FIXES_FOREACH(FIXES_gsPlayersIterator, i)
- {
- // =================
- // BEGIN: GameText
- // =================
- #if FIX_GameText
- for (new j = 0; j != FIXES_GT_STYLE_COUNT; ++j)
- {
- PlayerTextDrawDestroy(i, FIXES_gsPGTStyle[i][j]);
- }
- #endif
- // =================
- // END: GameText
- // =================
- // =============================
- // BEGIN: SetPlayerWorldBounds
- // =============================
- #if FIX_SetPlayerWorldBounds
- // I realised that you could have the GM in charge,
- // set their bounds, load an FS, remove their bounds
- // then unload the FS again and it would result in
- // the old GM setting of them HAVING bounds being
- // re-applied, so the check is removed.
- CallRemoteFunction(FIXES_gscSetPlayerWorldBounds, FIXES_gscSpec@iffff, i, FIXES_gsWorldbounds[i][E_FIXES_WORLDBOUND_DATA_UX], FIXES_gsWorldbounds[i][E_FIXES_WORLDBOUND_DATA_LX], FIXES_gsWorldbounds[i][E_FIXES_WORLDBOUND_DATA_UY], FIXES_gsWorldbounds[i][E_FIXES_WORLDBOUND_DATA_LY]);
- #endif
- // =============================
- // END: SetPlayerWorldBounds
- // =============================
- // =================================
- // BEGIN: TogglePlayerControllable
- // =================================
- #if FIX_TogglePlayerControllable
- CallRemoteFunction(FIXES_gscTogglePlayerControl, FIXES_gscSpec@ii, i, !(FIXES_gsPlayerBools[i] & e_FIXES_BOOLS_UNCONTROLLABLE));
- #endif
- // =================================
- // END: TogglePlayerControllable
- // =================================
- // ===========================
- // BEGIN: PutPlayerInVehicle
- // ===========================
- #if FIX_PutPlayerInVehicle
- if (FIXES_gsPlayerBools[i] & e_FIXES_BOOLS_PUT_IN_VEHICLE)
- {
- CallRemoteFunction(FIXES_gscPutPlayerInVehicle, FIXES_gscSpec@iii, i, FIXES_gsVehicleSeatData[i] & 0x00FFFFFF, FIXES_gsVehicleSeatData[i] >>> 24);
- }
- #endif
- // ===========================
- // END: PutPlayerInVehicle
- // ===========================
- }
- #endif
- // =================
- // BEGIN: GameText
- // =================
- #if FIX_GameText
- #if FIX_GameTextStyles
- TextDrawDestroy(FIXES_gsGTStyle[13]),
- TextDrawDestroy(FIXES_gsGTStyle[12]),
- TextDrawDestroy(FIXES_gsGTStyle[11]),
- TextDrawDestroy(FIXES_gsGTStyle[10]),
- TextDrawDestroy(FIXES_gsGTStyle[9]),
- TextDrawDestroy(FIXES_gsGTStyle[8]),
- TextDrawDestroy(FIXES_gsGTStyle[7]),
- #endif
- TextDrawDestroy(FIXES_gsGTStyle[6]),
- TextDrawDestroy(FIXES_gsGTStyle[5]),
- TextDrawDestroy(FIXES_gsGTStyle[4]),
- TextDrawDestroy(FIXES_gsGTStyle[3]),
- TextDrawDestroy(FIXES_gsGTStyle[2]),
- TextDrawDestroy(FIXES_gsGTStyle[1]),
- TextDrawDestroy(FIXES_gsGTStyle[0]);
- #endif
- // =================
- // END: GameText
- // =================
- FIXES_PRINTF("_FIXES_DetermineOrder: Not in charge");
- return 0;
- }
- else
- {
- FIXES_gsSettings &= ~e_FIXES_SETTINGS_IN_CHARGE;
- FIXES_PRINTF("_FIXES_DetermineOrder: Not in charge");
- return 0;
- }
- }
- else if (!(FIXES_gsSettings & e_FIXES_SETTINGS_ENDING))
- {
- setproperty(5, FIXES_gscOrderProperty, _FIXES_gIsFilterscript);
- #if FIXES_Debug
- if (FIXES_gsSettings & e_FIXES_SETTINGS_IN_CHARGE)
- {
- FIXES_PRINTF("_FIXES_DetermineOrder: Already in charge");
- }
- #endif
- FIXES_gsSettings |= e_FIXES_SETTINGS_IN_CHARGE;
- FIXES_PRINTF("_FIXES_DetermineOrder: Now in charge");
- // =================
- // BEGIN: GameText
- // =================
- #if FIX_GameText
- // Create all the relevant TextDraws.
- _FIXES_FOREACH(FIXES_gsPlayersIterator, playerid)
- {
- _FIXES_CreateGameTextDraws(playerid);
- }
- _FIXES_CreateGameTextDraws(INVALID_PLAYER_ID);
- #endif
- // =================
- // END: GameText
- // =================
- return 1;
- }
- else if (!(FIXES_gsSettings & e_FIXES_SETTINGS_ENDED))
- {
- // Only called when a filterscript that is currently master (and
- // thus called first by "CallRemoteFunction") ends. This doesn't
- // get triggered when a gamemode is master, but that doesn't matter
- // because in that case all the textdraws are destroyed anyway.
- // =================
- // BEGIN: GameText
- // =================
- #if FIX_GameText
- // Destroy all the relevant TextDraws.
- _FIXES_FOREACH(FIXES_gsPlayersIterator, playerid)
- {
- #if FIX_GameTextStyles
- PlayerTextDrawDestroy(playerid, FIXES_gsPGTStyle[playerid][13]),
- PlayerTextDrawDestroy(playerid, FIXES_gsPGTStyle[playerid][12]),
- PlayerTextDrawDestroy(playerid, FIXES_gsPGTStyle[playerid][11]),
- PlayerTextDrawDestroy(playerid, FIXES_gsPGTStyle[playerid][10]),
- PlayerTextDrawDestroy(playerid, FIXES_gsPGTStyle[playerid][9]),
- PlayerTextDrawDestroy(playerid, FIXES_gsPGTStyle[playerid][8]),
- PlayerTextDrawDestroy(playerid, FIXES_gsPGTStyle[playerid][7]),
- #endif
- PlayerTextDrawDestroy(playerid, FIXES_gsPGTStyle[playerid][6]),
- PlayerTextDrawDestroy(playerid, FIXES_gsPGTStyle[playerid][5]),
- PlayerTextDrawDestroy(playerid, FIXES_gsPGTStyle[playerid][4]),
- PlayerTextDrawDestroy(playerid, FIXES_gsPGTStyle[playerid][3]),
- PlayerTextDrawDestroy(playerid, FIXES_gsPGTStyle[playerid][2]),
- PlayerTextDrawDestroy(playerid, FIXES_gsPGTStyle[playerid][1]),
- PlayerTextDrawDestroy(playerid, FIXES_gsPGTStyle[playerid][0]);
- }
- #if FIX_GameTextStyles
- TextDrawDestroy(FIXES_gsGTStyle[13]),
- TextDrawDestroy(FIXES_gsGTStyle[12]),
- TextDrawDestroy(FIXES_gsGTStyle[11]),
- TextDrawDestroy(FIXES_gsGTStyle[10]),
- TextDrawDestroy(FIXES_gsGTStyle[9]),
- TextDrawDestroy(FIXES_gsGTStyle[8]),
- TextDrawDestroy(FIXES_gsGTStyle[7]),
- #endif
- TextDrawDestroy(FIXES_gsGTStyle[6]),
- TextDrawDestroy(FIXES_gsGTStyle[5]),
- TextDrawDestroy(FIXES_gsGTStyle[4]),
- TextDrawDestroy(FIXES_gsGTStyle[3]),
- TextDrawDestroy(FIXES_gsGTStyle[2]),
- TextDrawDestroy(FIXES_gsGTStyle[1]),
- TextDrawDestroy(FIXES_gsGTStyle[0]);
- #endif
- // =================
- // END: GameText
- // =================
- #if FIXES_Debug
- FIXES_PRINTF("_FIXES_DetermineOrder: Ending");
- #endif
- FIXES_gsSettings |= e_FIXES_SETTINGS_ENDED;
- }
- return 0;
- }
- #endif
- /*
- * FIXES_strins(string[], const substr[], pos, maxlength = sizeof string)
- *
- * FIXES:
- * strins
- */
- #if defined _ALS_strins
- #error _ALS_strins defined
- #endif
- native BAD_strins(string[], const substr[], pos, maxlength = sizeof string) = strins;
- #if FIX_strins
- stock FIXES_strins(string[], const substr[], pos, maxlength = sizeof string)
- {
- if (string[0] > 255)
- {
- new
- strlength = strlen(string),
- sublength = strlen(substr),
- m4 = maxlength * 4;
- // Packed - format doesn't like these strings.
- if (strlength + sublength >= m4)
- {
- if (pos + sublength >= m4)
- {
- return
- string{pos} = '\0',
- // Hopefully this doesn't ignore maxlength and does packed.
- strcat(string, substr, maxlength);
- }
- else
- {
- // pos + sublength is less than maxlength, so this sum MUST
- // be positive and gte than "pos", so there's no need for
- // additional checks.
- string{maxlength - sublength - 1} = '\0';
- }
- }
- return strins(string, substr, pos, maxlength);
- }
- else if (substr[0] > 255)
- {
- new
- strlength = strlen(string),
- sublength = strlen(substr);
- // Packed - format doesn't like these strings.
- if (strlength + sublength >= maxlength)
- {
- if (pos + sublength >= maxlength)
- {
- return
- string[pos] = '\0',
- // Hopefully this doesn't ignore maxlength and does packed.
- strcat(string, substr, maxlength);
- }
- else
- {
- // pos + sublength is less than maxlength, so this sum MUST
- // be positive and gte than "pos", so there's no need for
- // additional checks.
- string[maxlength - sublength - 1] = '\0';
- }
- }
- return strins(string, substr, pos, maxlength);
- }
- else
- {
- return format(string, maxlength, "%.*s%s%s", pos, string, substr, string[pos]);
- }
- }
- #define _ALS_strins
- #define strins FIXES_strins
- #endif
- /*
- * _FIXES_GetAnimLibIndex(animlib[])
- *
- * FIXES:
- * ApplyAnimation
- * ApplyAnimation_2
- * ApplyActorAnimation
- * ApplyActorAnimation_2
- */
- #if FIX_ApplyAnimation || FIX_ApplyAnimation_2 || FIX_ApplyActorAnimation || FIX_ApplyActorAnimation_2
- static stock _FIXES_GetAnimLibIndex(animlib[])
- {
- new
- diff,
- idx = animlib[0] & ~0x20;
- // Uses a sort of optimised binary search. The code first identifies the area in the array
- // in which libraries with this first letter are, then does a binary search using only that
- // subset of the array. This used to use an N-ary search that just went linearly through
- // the identified subset of the array, and that was 5x faster than a simple linear loop over
- // the whole array. This new version is 50% faster than even that was. "E" has no
- // libraries, but we don't check for that explicitly as it would slow down the more common
- // code path - and it ends fairly quickly anyway as "upper == lower".
- if (_FIXES_IN_RANGE(idx, 'A', 'W' + 1))
- {
- new
- upper = FIXES_gscAnimIndexes[idx - ('A' - 1)],
- lower = FIXES_gscAnimIndexes[idx - 'A'];
- while (upper != lower)
- {
- idx = (upper - lower) / 2 + lower;
- if ((diff = strcmp(FIXES_gscAnimLib[idx], animlib, true)))
- {
- if (diff > 0) upper = idx;
- else lower = idx + 1;
- }
- else
- {
- return idx;
- }
- }
- }
- return -1;
- }
- #endif
- /*
- * _FIXES_ApplyAnimationDelay(animname[], playerid, idx, Float:fDelta, loop, lockx, locky, freeze, time, forcesync = 0)
- *
- * FIXES:
- * ApplyAnimation_2
- */
- #if FIX_ApplyAnimation_2
- static stock _FIXES_ApplyAnimationDelay(animname[], playerid, idx, Float:fDelta, loop, lockx, locky, freeze, time, forcesync = 0)
- {
- if (FIXES_gsPlayerAnimTimer[playerid])
- {
- KillTimer(FIXES_gsPlayerAnimTimer[playerid]),
- FIXES_gsPlayerAnimTimer[playerid] = 0;
- }
- if (FIXES_gsPlayerAnimLibs[playerid][idx >>> 5] & (1 << (idx & 0x1F)))
- {
- FIXES_gsPlayerAnimLibs[playerid][idx >>> 5] &= ~(1 << (idx & 0x1F)),
- FIXES_gsPlayerAnimName[playerid][0] = '\0',
- strcat(FIXES_gsPlayerAnimName[playerid], animname);
- FIXES_gsPlayerAnimTimer[playerid] = SetTimerEx("_FIXES_ApplyAnimation", 350, false, "ddfdddddd", playerid, idx, fDelta, loop, lockx, locky, freeze, time, forcesync);
- }
- }
- #endif
- /*
- * _FIXES_ApplyAnimation(playerid, animlib, Float:fDelta, loop, lockx, locky, freeze, time, forcesync)
- *
- * FIXES:
- * ApplyAnimation_2
- */
- #if FIX_ApplyAnimation_2
- forward _FIXES_ApplyAnimation(playerid, animlib, Float:fDelta, loop, lockx, locky, freeze, time, forcesync);
- public _FIXES_ApplyAnimation(playerid, animlib, Float:fDelta, loop, lockx, locky, freeze, time, forcesync)
- {
- ApplyAnimation(playerid, FIXES_gscAnimLib[animlib], FIXES_gsPlayerAnimName[playerid], fDelta, loop, lockx, locky, freeze, time, forcesync),
- FIXES_gsPlayerAnimTimer[playerid] = 0;
- }
- #endif
- /*
- * FIXES_ApplyAnimation(playerid, animlib[], animname[], Float:fDelta, loop, lockx, locky, freeze, time, forcesync = 0)
- *
- * FIXES:
- * ApplyAnimation
- * ApplyAnimation_2
- */
- #if defined _ALS_ApplyAnimation
- #error _ALS_ApplyAnimation defined
- #endif
- native BAD_ApplyAnimation(playerid, animlib[], animname[], Float:fDelta, loop, lockx, locky, freeze, time, forcesync = 0) = ApplyAnimation;
- #if FIX_ApplyAnimation || FIX_ApplyAnimation_2
- stock FIXES_ApplyAnimation(playerid, animlib[], animname[], Float:fDelta, loop, lockx, locky, freeze, time, forcesync = 0)
- {
- new
- idx;
- idx = _FIXES_GetAnimLibIndex(animlib);
- if (idx != -1)
- {
- #if FIX_ApplyAnimation_2
- _FIXES_ApplyAnimationDelay(animname, playerid, idx, fDelta, loop, lockx, locky, freeze, time, forcesync);
- #endif
- return ApplyAnimation(playerid, animlib, animname, fDelta, loop, lockx, locky, freeze, time, forcesync);
- }
- return 0;
- }
- #define _ALS_ApplyAnimation
- #define ApplyAnimation FIXES_ApplyAnimation
- #endif
- /*
- * _FIXES_ApplyActorAnimationDelay(animname[], actorid, idx, Float:fDelta, loop, lockx, locky, freeze, time)
- *
- * FIXES:
- * ApplyActorAnimation_2
- */
- #if FIX_ApplyActorAnimation_2
- static stock _FIXES_ApplyActorAnimationDelay(animname[], actorid, idx, Float:fDelta, loop, lockx, locky, freeze, time)
- {
- if (FIXES_gsActorAnimTimer[actorid])
- {
- KillTimer(FIXES_gsActorAnimTimer[actorid]),
- FIXES_gsActorAnimTimer[actorid] = 0;
- }
- if (FIXES_gsActorAnimLibs[actorid][idx >>> 5] & (1 << (idx & 0x1F)))
- {
- FIXES_gsActorAnimLibs[actorid][idx >>> 5] &= ~(1 << (idx & 0x1F)),
- FIXES_gsActorAnimName[actorid][0] = '\0',
- strcat(FIXES_gsActorAnimName[actorid], animname);
- FIXES_gsActorAnimTimer[actorid] = SetTimerEx("_FIXES_ApplyActorAnimation", 350, false, "ddfdddddd", actorid, idx, fDelta, loop, lockx, locky, freeze, time);
- }
- }
- #endif
- /*
- * _FIXES_ApplyActorAnimation(actorid, animlib, Float:fDelta, loop, lockx, locky, freeze, time)
- *
- * FIXES:
- * ApplyActorAnimation_2
- */
- #if FIX_ApplyActorAnimation_2
- forward _FIXES_ApplyActorAnimation(actorid, animlib, Float:fDelta, loop, lockx, locky, freeze, time);
- public _FIXES_ApplyActorAnimation(actorid, animlib, Float:fDelta, loop, lockx, locky, freeze, time)
- {
- ApplyActorAnimation(actorid, FIXES_gscAnimLib[animlib], FIXES_gsActorAnimName[actorid], fDelta, loop, lockx, locky, freeze, time),
- FIXES_gsActorAnimTimer[actorid] = 0;
- }
- #endif
- /*
- * FIXES_ApplyActorAnimation(actorid, animlib[], animname[], Float:fDelta, loop, lockx, locky, freeze, time)
- *
- * FIXES:
- * ApplyActorAnimation
- * ApplyActorAnimation_2
- */
- #if defined _ALS_ApplyActorAnimation
- #error _ALS_ApplyActorAnimation defined
- #endif
- native BAD_ApplyActorAnimation(actorid, animlib[], animname[], Float:fDelta, loop, lockx, locky, freeze, time) = ApplyActorAnimation;
- #if FIX_ApplyActorAnimation || FIX_ApplyActorAnimation_2
- stock FIXES_ApplyActorAnimation(actorid, animlib[], animname[], Float:fDelta, loop, lockx, locky, freeze, time)
- {
- new
- idx;
- idx = _FIXES_GetAnimLibIndex(animlib);
- if (idx != -1)
- {
- #if FIX_ApplyActorAnimation_2
- _FIXES_ApplyActorAnimationDelay(animname, actorid, idx, fDelta, loop, lockx, locky, freeze, time);
- #endif
- return ApplyActorAnimation(actorid, animlib, animname, fDelta, loop, lockx, locky, freeze, time);
- }
- return 0;
- }
- #define _ALS_ApplyActorAnimation
- #define ApplyActorAnimation FIXES_ApplyActorAnimation
- #endif
- /*
- * FIXES_CreateActor(modelid, Float:X, Float:Y, Float:Z, Float:Rotation)
- *
- * FIXES:
- * ApplyActorAnimation_2
- */
- #if defined _ALS_CreateActor
- #error _ALS_CreateActor defined
- #endif
- native BAD_CreateActor(modelid, Float:X, Float:Y, Float:Z, Float:Rotation) = CreateActor;
- #if FIX_ApplyActorAnimation_2
- stock FIXES_CreateActor(modelid, Float:X, Float:Y, Float:Z, Float:Rotation)
- {
- new
- actorid;
- return
- actorid = CreateActor(modelid, X, Y, Z, Rotation),
- FIXES_gsActorAnimLibs[actorid][0] =
- FIXES_gsActorAnimLibs[actorid][1] =
- FIXES_gsActorAnimLibs[actorid][2] =
- FIXES_gsActorAnimLibs[actorid][3] =
- FIXES_gsActorAnimLibs[actorid][4] = -1,
- actorid;
- }
- #define _ALS_CreateActor
- #define CreateActor FIXES_CreateActor
- #endif
- /*
- * FIXES_DestroyActor(actorid)
- *
- * FIXES:
- * ApplyActorAnimation_2
- */
- #if defined _ALS_DestroyActor
- #error _ALS_DestroyActor defined
- #endif
- native BAD_DestroyActor(actorid) = DestroyActor;
- #if FIX_ApplyActorAnimation_2
- stock FIXES_DestroyActor(actorid)
- {
- if (FIXES_gsActorAnimTimer[actorid])
- {
- KillTimer(FIXES_gsActorAnimTimer[actorid]),
- FIXES_gsActorAnimTimer[actorid] = 0;
- }
- return DestroyActor(actorid);
- }
- #define _ALS_DestroyActor
- #define DestroyActor FIXES_DestroyActor
- #endif
- /*
- * FIXES_random(max)
- *
- * FIXES:
- * random
- */
- #if defined _ALS_random
- #error _ALS_random defined
- #endif
- native BAD_random(max) = random;
- #if FIX_random
- stock FIXES_random(max)
- {
- if (max < 0)
- {
- return -random(-max);
- }
- else
- {
- return random(max);
- }
- }
- #define _ALS_random
- #define random FIXES_random
- #endif
- /*
- * _FIXES_SetCamera
- *
- * FIXES:
- * SetPlayerCamera
- */
- #if FIX_SetPlayerCamera
- forward _FIXES_SetCamera(playerid, type, Float:x, Float:y, Float:z, cut);
- public _FIXES_SetCamera(playerid, type, Float:x, Float:y, Float:z, cut)
- {
- if (type)
- {
- SetPlayerCameraPos(playerid, x, y, z);
- }
- else
- {
- SetPlayerCameraLookAt(playerid, x, y, z, cut);
- }
- return 0;
- }
- #endif
- /*
- * FIXES_SetPlayerCameraLookAt(playerid, Float:x, Float:y, Float:z)
- *
- * FIXES:
- * SetPlayerCamera
- */
- #if defined _ALS_SetPlayerCameraPos
- #error _ALS_SetPlayerCameraPos defined
- #endif
- native BAD_SetPlayerCameraPos(playerid, Float:x, Float:y, Float:z) = SetPlayerCameraPos;
- #if FIX_SetPlayerCamera
- stock FIXES_SetPlayerCameraPos(playerid, Float:x, Float:y, Float:z)
- {
- if (_FIXES_IN_RANGE(playerid, 0, MAX_PLAYERS))
- {
- #if FIXES_Single
- if (FIXES_gsPlayerBools[playerid] & e_FIXES_BOOLS_SPECTATING || GetPlayerState(playerid) == PLAYER_STATE_SPECTATING)
- #else
- if (GetPVarInt(playerid, FIXES_pvarPlayerSpectate) || GetPlayerState(playerid) == PLAYER_STATE_SPECTATING)
- #endif
- {
- SetTimerEx(FIXES_gscSetCamera, 300, 0, FIXES_gscSpec@iifff, playerid, 1, x, y, z);
- }
- else
- {
- SetPlayerCameraPos(playerid, x, y, z);
- }
- }
- return 0;
- }
- #define _ALS_SetPlayerCameraPos
- #define SetPlayerCameraPos FIXES_SetPlayerCameraPos
- #endif
- /*
- * FIXES_SetPlayerCameraLookAt(playerid, Float:x, Float:y, Float:z, cut = CAMERA_CUT)
- *
- * FIXES:
- * SetPlayerCamera
- */
- #if defined _ALS_SetPlayerCameraLookAt
- #error _ALS_SetPlayerCameraLookAt defined
- #endif
- native BAD_SetPlayerCameraLookAt(playerid, Float:x, Float:y, Float:z) = SetPlayerCameraLookAt;
- #if FIX_SetPlayerCamera
- stock FIXES_SetPlayerCameraLookAt(playerid, Float:x, Float:y, Float:z, cut = CAMERA_CUT)
- {
- if (_FIXES_IN_RANGE(playerid, 0, MAX_PLAYERS))
- {
- #if FIXES_Single
- if (FIXES_gsPlayerBools[playerid] & e_FIXES_BOOLS_SPECTATING || GetPlayerState(playerid) == PLAYER_STATE_SPECTATING)
- #else
- if (GetPVarInt(playerid, FIXES_pvarPlayerSpectate) || GetPlayerState(playerid) == PLAYER_STATE_SPECTATING)
- #endif
- {
- SetTimerEx(FIXES_gscSetCamera, 300, 0, FIXES_gscSpec@iifffi, playerid, 0, x, y, z, cut);
- }
- else
- {
- SetPlayerCameraLookAt(playerid, x, y, z, cut);
- }
- }
- return 0;
- }
- #define _ALS_SetPlayerCameraLookAt
- #define SetPlayerCameraLookAt FIXES_SetPlayerCameraLookAt
- #endif
- /*
- * FIXES_TogglePlayerSpectating(playerid, toggle)
- *
- * FIXES:
- * SetPlayerCamera
- */
- #if defined _ALS_TogglePlayerSpectating
- #error _ALS_TogglePlayerSpectating defined
- #endif
- native BAD_TogglePlayerSpectating(playerid, toggle) = TogglePlayerSpectating;
- #if FIX_SetPlayerCamera
- stock FIXES_TogglePlayerSpectating(playerid, toggle)
- {
- if (_FIXES_IN_RANGE(playerid, 0, MAX_PLAYERS))
- {
- if (toggle)
- {
- #if FIXES_Single
- FIXES_gsPlayerBools[playerid] |= e_FIXES_BOOLS_SPECTATING;
- #else
- SetPVarInt(playerid, FIXES_pvarPlayerSpectate, 1);
- #endif
- }
- else
- {
- #if FIXES_Single
- FIXES_gsPlayerBools[playerid] &= ~e_FIXES_BOOLS_SPECTATING;
- #else
- DeletePVar(playerid, FIXES_pvarPlayerSpectate);
- #endif
- }
- return TogglePlayerSpectating(playerid, toggle);
- }
- return 0;
- }
- #define _ALS_TogglePlayerSpectating
- #define TogglePlayerSpectating FIXES_TogglePlayerSpectating
- #endif
- /*
- * FIXES_SetPlayerTime(playerid, hour, minute)
- *
- * FIXES:
- * SetPlayerTime
- */
- #if defined _ALS_SetPlayerTime
- #error _ALS_SetPlayerTime defined
- #endif
- native BAD_SetPlayerTime(playerid, hour, minute) = SetPlayerTime;
- #if FIX_SetPlayerTime
- forward _FIXES_SetTime(playerid, hour, minute);
- public _FIXES_SetTime(playerid, hour, minute)
- {
- if (FIXES_gsPlayerBools[playerid] & e_FIXES_BOOLS_ON_PLAYER_CONNECT)
- {
- return SetPlayerTime(playerid, hour, minute);
- }
- return 0;
- }
- stock FIXES_SetPlayerTime(playerid, hour, minute)
- {
- if (_FIXES_IN_RANGE(playerid, 0, MAX_PLAYERS))
- {
- if (FIXES_gsPlayerBools[playerid] & e_FIXES_BOOLS_ON_PLAYER_CONNECT)
- {
- return SetTimerEx(FIXES_gscSetTime, 250, 0, FIXES_gscSpec@iii, playerid, hour, minute);
- }
- return SetPlayerTime(playerid, hour, minute);
- }
- return 0;
- }
- #define _ALS_SetPlayerTime
- #define SetPlayerTime FIXES_SetPlayerTime
- #endif
- /*
- * FIXES_SetPlayerColor(playerid, color)
- *
- * FIXES:
- * SetPlayerColor
- */
- #if defined _ALS_SetPlayerColor
- #error _ALS_SetPlayerColor defined
- #endif
- native BAD_SetPlayerColor(playerid, color) = SetPlayerColor;
- #if FIX_SetPlayerColour
- forward _FIXES_SetColor(playerid, color);
- public _FIXES_SetColor(playerid, color)
- {
- if (FIXES_gsPlayerBools[playerid] & e_FIXES_BOOLS_ON_PLAYER_CONNECT)
- {
- return SetPlayerColor(playerid, color);
- }
- return 0;
- }
- stock FIXES_SetPlayerColor(playerid, color)
- {
- if (_FIXES_IN_RANGE(playerid, 0, MAX_PLAYERS))
- {
- if (FIXES_gsPlayerBools[playerid] & e_FIXES_BOOLS_ON_PLAYER_CONNECT)
- {
- return SetTimerEx(FIXES_gscSetColor, 300, 0, FIXES_gscSpec@ii, playerid, color);
- }
- return SetPlayerColor(playerid, color);
- }
- return 0;
- }
- #define _ALS_SetPlayerColor
- #define SetPlayerColor FIXES_SetPlayerColor
- #endif
- /*
- * FIXES_GetPlayerWeaponData(playerid, slot, &weapons, &ammo)
- *
- * FIXES:
- * GetPlayerWeaponData
- */
- #if defined _ALS_GetPlayerWeaponData
- #error _ALS_GetPlayerWeaponData defined
- #endif
- native BAD_GetPlayerWeaponData(playerid, slot, &weapons, &ammo) = GetPlayerWeaponData;
- #if FIX_GetPlayerWeaponData
- stock FIXES_GetPlayerWeaponData(playerid, slot, &weapons, &ammo)
- {
- // This reuses the "slot" variable so we don't have to declare a new one
- // and can put all the code in a single statement.
- return
- slot = GetPlayerWeaponData(playerid, slot, weapons, ammo),
- weapons = ammo ? weapons : 0,
- slot;
- }
- #define _ALS_GetPlayerWeaponData
- #define GetPlayerWeaponData FIXES_GetPlayerWeaponData
- #endif
- /*
- * FIXES_strcmp(const string1[], const string2[], bool:ignorecase, length)
- *
- * FIXES:
- * strcmp
- */
- #if defined _ALS_strcmp
- #error _ALS_strcmp defined
- #endif
- native BAD_strcmp(const string1[], const string2[], bool:ignorecase=false, length=cellmax) = strcmp;
- #if FIX_strcmp
- stock FIXES_strcmp(const string1[], const string2[], bool:ignorecase=false, length=cellmax)
- {
- if (string1[0])
- {
- if (string2[0])
- {
- return strcmp(string1, string2, ignorecase, length);
- }
- else
- {
- // Positive as st1 is greater (strcmp spec).
- return 1;
- }
- }
- else
- {
- if (string2[0])
- {
- // Negative as str2 is greater.
- return -1;
- }
- else
- {
- // The strings are the same (empty).
- return 0;
- }
- }
- }
- #define _ALS_strcmp
- #define strcmp FIXES_strcmp
- #endif
- /*
- * FIXES_GetPVarString(playerid, varname[], string_return[], len)
- *
- * FIXES:
- * GetPVarString
- */
- #if defined _ALS_GetPVarString
- #error _ALS_GetPVarString defined
- #endif
- native BAD_GetPVarString(playerid, varname[], string_return[], len) = GetPVarString;
- #if FIX_GetPVarString
- stock FIXES_GetPVarString(playerid, varname[], string_return[], len)
- {
- len = GetPVarString(playerid, varname, string_return, len);
- static i; i = -1;
- do {} while ((string_return[++i] &= 0xFF) != '\0');
- return len;
- }
- #define _ALS_GetPVarString
- #define GetPVarString FIXES_GetPVarString
- #endif
- /*
- * FIXES_GetSVarString(varname[], string_return[], len)
- *
- * FIXES:
- * GetSVarString
- */
- #if defined _ALS_GetSVarString
- #error _ALS_GetSVarString defined
- #endif
- native BAD_GetSVarString(varname[], string_return[], len) = GetSVarString;
- #if FIX_GetSVarString
- stock FIXES_GetSVarString(varname[], string_return[], len)
- {
- len = GetSVarString(varname, string_return, len);
- static i; i = -1;
- do {} while ((string_return[++i] &= 0xFF) != '\0');
- return len;
- }
- #define _ALS_GetSVarString
- #define GetSVarString FIXES_GetSVarString
- #endif
- /*
- * FIXES_toupper(c)
- *
- * FIXES:
- * toupper
- */
- #if defined _ALS_toupper
- #error _ALS_toupper defined
- #endif
- native BAD_toupper(c) = toupper;
- #if FIX_toupper
- stock FIXES_toupper(c)
- {
- switch (c)
- {
- case 'a'..'z', 'а'..'я':
- {
- return c - 32;
- }
- case 'ё':
- {
- return c - 16;
- }
- }
- return c;
- }
- #define _ALS_toupper
- #define toupper FIXES_toupper
- #endif
- /*
- * FIXES_tolower(c)
- *
- * FIXES:
- * tolower
- */
- #if defined _ALS_tolower
- #error _ALS_tolower defined
- #endif
- native BAD_tolower(c) = tolower;
- #if FIX_tolower
- stock FIXES_tolower(c)
- {
- switch (c)
- {
- case 'A'..'Z', 'А'..'Я':
- {
- return c + 32;
- }
- case 'Ё':
- {
- return c + 16;
- }
- }
- return c;
- }
- #define _ALS_tolower
- #define tolower FIXES_tolower
- #endif
- /*
- * FIXES_sleep(const time)
- *
- * FIXES:
- * sleep
- */
- // Uses a little trick to consume part of the line and thus not match
- // our hooked version.
- #if defined _ALS_sleep
- #error _ALS_sleep defined
- #endif
- #define BAD_sleep%0\n%9 sleep%0
- #if FIX_sleep
- stock FIXES_sleep(ms)
- {
- // Call a native function that does very little, but saves the current
- // heap pointer. Then return to save the accurate stack pointer.
- return heapspace(), ms;
- }
- #define _ALS_sleep
- #define sleep%0\n%9 sleep FIXES_sleep(%0)
- // This fixes another BIZZARE bug. Just doing:
- //
- // #define FIXES_sleep(%0;) FIXES_sleep(%0)
- //
- // Results in:
- //
- // FIXES_sleep(n));
- //
- // Which clearly it shouldn't. I've stepped through the compilation and that
- // extra bracket comes from nowhere!
- #define FIXES_sleep(%0;) FIXES_sleep _FIXES_SLEEP_BRACKET %0);
- #define _FIXES_SLEEP_BRACKET (
- #endif
- /*
- * _FIXES_AddInternal(array[], value, size)
- *
- * Add something to an internal linked list.
- */
- static stock _FIXES_AddInternal(array[], value, size)
- {
- if (array[value] <= value)
- {
- new
- last = size,
- next = array[last];
- while (next < value)
- {
- last = next,
- next = array[last];
- }
- array[next - 1] = value + 1,
- array[(value - 1) % (size + 1)] = (last + 1) % (size + 1),
- array[last] = value,
- array[value] = next;
- }
- }
- /*
- * _FIXES_RemoveInternal(array[], value, size)
- *
- * Remove something from an internal linked list.
- */
- static stock _FIXES_RemoveInternal(array[], value, size)
- {
- if (array[value] > value)
- {
- static
- last;
- // Adjustment for easier "mod"ing.
- ++size,
- last = (array[(value - 1) % size] - 1) % size,
- // Store the reverse value here as well as in the previous slot.
- array[value] =
- // Copy the next value to the last value.
- array[(array[last] = array[value]) - 1] =
- // Set the reverse iterator value.
- (last + 1) % size;
- }
- }
- #undef _FIXES_CEILDIV
- #undef _FIXES_INFINITY
- #undef _FIXES_N_INFINITY
- #undef _FIXES_ATTACHMENTS
- #undef _FIXES_FOREACH
- #undef _FIXES_IS_UNSET
- #undef _FIXES_IS_IN_CHARGE
- #undef _FIXES_IN_RANGE
- #undef _FIXES_NO_RANGE
- #undef _FIXES_FORWARD
- #undef _FIXES_IS_PLAYER_CONNECTED
- #undef FIXES_PRINTF
- #endinput
- // Fix inclusion template.
- #if !defined FIX_NameOfFixHere
- #define FIX_NameOfFixHere (1)
- #elseif _FIXES_IS_UNSET(FIX_NameOfFixHere)
- #undef FIX_NameOfFixHere
- #define FIX_NameOfFixHere (2)
- #endif
- // Fix function template.
- /*
- * FIXES_NameOfFixHere
- *
- * FIXES:
- * NameOfFixHere
- */
- #if defined _ALS_NameOfFixHere
- #error _ALS_NameOfFixHere defined
- #endif
- native BAD_NameOfFixHere(params) = NameOfFixHere;
- #if FIX_NameOfFixHere
- stock FIXES_NameOfFixHere(params)
- {
- return 0;
- }
- #define _ALS_NameOfFixHere
- #define NameOfFixHere FIXES_NameOfFixHere
- #endif
|