EVF.inc 173 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620
  1. /**********************************************************************************************************************************
  2. * *
  3. * )( Extended Vehicle Functions )( *
  4. * *
  5. * Copyright © 2018 Abyss Morgan. All rights reserved. *
  6. * Contributors: Emmet_, Pottus, kvann, Hanger, Freaksken, Gammix, Yashas, Admigo, RIDE2DAY *
  7. * *
  8. * Download: https://github.com/AbyssMorgan/SA-MP/tree/master/include/ADM *
  9. * Publication: http://forum.sa-mp.com/showthread.php?t=611142 *
  10. * Website: http://8.ct8.pl *
  11. * *
  12. * Plugins: Streamer *
  13. * Modules: None *
  14. * *
  15. * File Version: 3.2.1 *
  16. * Streamer Version: 2.9.1 *
  17. * *
  18. * Functions: *
  19. * IsValidVehicleModelID(modelid); *
  20. * GetVehiclePanels(vehicleid,&front_left,&front_right,&rear_left,&rear_right,&windshield,&front_bumper,&rear_bumper); *
  21. * SetVehiclePanels(vehicleid,front_left,front_right,rear_left,rear_right,windshield,front_bumper,rear_bumper); *
  22. * GetVehicleLights(vehicleid,&front_left_light,&front_right_light,&back_lights); *
  23. * SetVehicleLights(vehicleid,front_left_light,front_right_light,back_lights); *
  24. * GetVehicleDoors(vehicleid,&bonnet,&boot,&driver_door,&passenger_door); *
  25. * SetVehicleDoors(vehicleid,bonnet,boot,driver_door,passenger_door); *
  26. * GetVehicleTires(vehicleid,&front_left,&front_right,&rear_left,&rear_right); *
  27. * SetVehicleTires(vehicleid,front_left,front_right,rear_left,rear_right); *
  28. * GetVehicleWindowState(vehicleid,doorid); *
  29. * SetVehicleWindowState(vehicleid,doorid,window_state); *
  30. * GetVehicleDoorState(vehicleid,doorid); *
  31. * SetVehicleDoorState(vehicleid,doorid,door_state); *
  32. * IsValidVehicleDoor(vehicleid,doorid); *
  33. * GetVehicleModelDoorAmount(modelid); *
  34. * GetVehicleDoorAmount(vehicleid); *
  35. * SwitchVehicleEngine(vehicleid,bool:engine_status); *
  36. * SwitchVehicleLight(vehicleid,bool:light_status); *
  37. * SwitchVehicleAlarm(vehicleid,bool:alarm_status); *
  38. * SwitchVehicleDoors(vehicleid,bool:doors_status); *
  39. * SwitchVehicleBonnet(vehicleid,bool:bonnet_status); *
  40. * SwitchVehicleBoot(vehicleid,bool:boot_status); *
  41. * SwitchVehicleObjective(vehicleid,bool:objective_status); *
  42. * GetVehicleParams(vehicleid,type); *
  43. * SetVehicleParams(vehicleid,type,status,delay = 0); *
  44. * GetVehicleRandomColors(modelid,&color1,&color2); *
  45. * GetNearestVehicleToPos(Float:x,Float:y,Float:z,worldid=-1,interiorid=-1,Float:maxdist=0.0,bool:fast=true,except_vid=0); *
  46. * GetNearestVehicleToPlayer(playerid,Float:maxdist=0.0,bool:fast=false); *
  47. * GetVehicleDriver(vehicleid); *
  48. * Float:GetVehicleModelTopSpeed(modelid); *
  49. * Float:GetVehicleTopSpeed(vehicleid); *
  50. * SetVehicleInterior(vehicleid,interiorid); *
  51. * GetVehicleSeats(vehicleid); *
  52. * GetVehicleModelSeats(modelid); *
  53. * IsVehicleSeatOccupied(vehicleid,seatid); *
  54. * IsValidVehicle(vehicleid); *
  55. * RemoveVehiclePaintjob(vehicleid); *
  56. * SetVehicleHorn(vehicleid,soundid); *
  57. * GetVehicleHorn(vehicleid); *
  58. * RestoreVehicleHorn(vehicleid); *
  59. * GetVehicleBomb(vehicleid); *
  60. * IsVehicleBombed(vehicleid); *
  61. * RemoveVehicleBomb(vehicleid); *
  62. * SetVehicleBomb(vehicleid,time = 1000); *
  63. * IsVehicleBombActivated(vehicleid); *
  64. * Float:EVF::GetVehicleSpeed(vehicleid); *
  65. * SetVehicleSpeedCap(vehicleid,Float:maxspeed); *
  66. * Float:GetVehicleSpeedCap(vehicleid); *
  67. * DisableVehicleSpeedCap(vehicleid); *
  68. * SetVehicleFuel(vehicleid,fuel); *
  69. * GetVehicleFuel(vehicleid); *
  70. * ToggleVehicleFuel(vehicleid,bool:toggle); *
  71. * IsVehicleFuelToggled(vehicleid); *
  72. * ToggleVehicleSticky(vehicleid,bool:toggle); *
  73. * IsVehicleSticky(vehicleid); *
  74. * ToggleUnoccupiedVehicleDamage(vehicleid,bool:toggle); *
  75. * IsUnoccupiedDamageToggled(vehicleid); *
  76. * ToggleVehiclePetrolCapDestroy(vehicleid,bool:toggle); *
  77. * IsPetrolCapDestroyToggled(vehicleid); *
  78. * IsVehicleDamageToggled(vehicleid,type); *
  79. * ToggleVehicleDamageUpdate(vehicleid,type,toggle); *
  80. * GetVehicleNextSeat(vehicleid,passenger = 1); *
  81. * TeleportVehicle(vehicleid,Float:x,Float:y,Float:z,Float:angle,worldid = -1,interiorid = -1); *
  82. * GetVehicleSlotAttachedObject(vehicleid,slot); *
  83. * IsObjectAttachedToVehicle(objectid,vehicleid); *
  84. * EVF::UpdateVehicleDamage(vehicleid,type); *
  85. * EVF::UpdateVehicleDamageStatus(vehicleid,type,update); *
  86. * EVF::GetVehicleDamageStatus(vehicleid,type); *
  87. * SetVehicleNeonLights(vehicleid,bool:enable = true,color = RED_NEON); *
  88. * VehicleSupportsNeonLights(modelid); *
  89. * GetVehicleNeonLightsState(vehicleid); *
  90. * IsToggledVehicleBulletproof(vehicleid); *
  91. * ToggleVehicleBulletproof(vehicleid,bool:toggle); *
  92. * GetComponentName(componentid,name[],len = sizeof(name)); *
  93. * GetComponentTypeName(component); *
  94. * EVF::IsPlayerInModShop(playerid); *
  95. * IsValidComponentForVehicle(vehicleid,componentid); *
  96. * GetVehicleComponentPrice(componentid); *
  97. * GetVehicleName(vehicleid); *
  98. * GetVehicleModelName(modelid); *
  99. * EVF::IsTrailer(vehicleid); *
  100. * EVF::IsCarBlinking(vehicleid); *
  101. * EVF::DisableCarBlinking(vehicleid); *
  102. * EVF::SetCarBlinking(vehicleid,side,bool:skip=false); *
  103. * EVF::ToggleVehicleBlinking(bool:toggle); *
  104. * EVF::IsToggledVehicleBlinking(); *
  105. * *
  106. * Remote functions: *
  107. * EVF_ImportVehicle(vehicleid,modelid,Float:x,Float:y,Float:z,Float:angle,color1,color2,worldid,interiorid,unoccupied_damage); *
  108. * EVF_RemoveVehicle(vehicleid); *
  109. * *
  110. * Compatible with YSF Functions: *
  111. * GetVehicleColor(vehicleid,&color1,&color2); *
  112. * GetVehiclePaintjob(vehicleid); *
  113. * GetVehicleInterior(vehicleid); *
  114. * EVF::GetVehicleSpawnInfo(vehicleid,&Float:x,&Float:y,&Float:z,&Float:rotation,&worldid,&interiorid); *
  115. * EVF::SetVehicleSpawnInfo(vehicleid,Float:x,Float:y,Float:z,Float:rotation,worldid,interiorid); *
  116. * IsVehicleOccupied(vehicleid); *
  117. * *
  118. * Callbacks: *
  119. * OnVehicleCreated(vehicleid); //Called when a vehicle is created. *
  120. * OnVehicleDestroyed(vehicleid); //Called when a vehicle is deleted. *
  121. * OnTrailerHooked(playerid,vehicleid,trailerid); //Called when a trailer is hooked. *
  122. * OnTrailerUnhooked(playerid,vehicleid,trailerid); //Called when a trailer is unhooked. *
  123. * OnPlayerShotVehicle(playerid,vehicleid,weaponid,Float:amount,bodypart); //Called when a player shoots at a vehicle. *
  124. * OnVehiclePosChange(vehicleid,Float:newx,Float:newy,Float:newz,Float:newangle,Float:oldx,Float:oldy,Float:oldz,Float:oldangle); *
  125. * OnVehicleVelocityChange(vehicleid,Float:newx,Float:newy,Float:newz,Float:oldx,Float:oldy,Float:oldz); *
  126. * OnVehicleHealthChange(vehicleid,Float:newhealth,Float:oldhealth); *
  127. * OnVehicleFuelChange(vehicleid,newfuel,oldfuel); *
  128. * OnVehicleBombDeactivate(vehicleid); *
  129. * OnVehicleBombExplode(vehicleid); *
  130. * OnPlayerEditVehicle(playerid,vehicleid,response,Float:fX,Float:fY,Float:fZ,Float:fRotZ); *
  131. * OnPlayerEditVehicleObject(playerid,vehicleid,response,Float:x,Float:y,Float:z,Float:rx,Float:ry,Float:rz); *
  132. * OnPlayerReachSpeedCapLimit(playerid,vehicleid,Float:speed); *
  133. * OnVehicleBombActivate(vehicleid); *
  134. * OnVehicleModEx(playerid,vehicleid,componentid,price,illegal); *
  135. * *
  136. * Definitions: *
  137. * INVALID_SEAT_ID *
  138. * INVALID_PAINTJOB_ID *
  139. * VEHICLE_UPDATE_INTERVAL *
  140. * MAX_VEHICLE_ATTACHED_OBJECTS *
  141. * RESET_PAINTJOB_ID *
  142. * MAX_VEHICLE_PARAMS *
  143. * MAX_VEHICLE_MODELS *
  144. * DEFAULT_VEHICLE_FUEL *
  145. * VEHICLE_SPEED_MULTIPLIER *
  146. * MULTIPLIER_FUEL_SYSTEM *
  147. * *
  148. * BONNET_HEALTHY_CLOSED *
  149. * BONNET_HEALTHY_OPENED *
  150. * BONNET_DAMAGED_CLOSED *
  151. * BONNET_DAMAGED_OPENED *
  152. * BONNET_MISSING *
  153. * *
  154. * BOOT_HEALTHY_CLOSED *
  155. * BOOT_HEALTHY_OPENED *
  156. * BOOT_DAMAGED_CLOSED *
  157. * BOOT_DAMAGED_OPENED *
  158. * BOOT_MISSING *
  159. * *
  160. * DOOR_HEALTHY_CLOSED *
  161. * DOOR_HEALTHY_OPENED *
  162. * DOOR_DAMAGED_CLOSED *
  163. * DOOR_DAMAGED_OPENED *
  164. * DOOR_MISSING *
  165. * *
  166. * BUMPER_HEALTHY *
  167. * BUMPER_CRUSHED *
  168. * BUMPER_HANGING *
  169. * BUMPER_MISSING *
  170. * *
  171. * WINDSHIELD_HEALTHY *
  172. * WINDSHIELD_DAMAGED *
  173. * WINDSHIELD_MISSING *
  174. * *
  175. * LIGHT_ENABLE *
  176. * LIGHT_DISABLE *
  177. * *
  178. * TIRE_HEALTHY *
  179. * TIRE_DAMAGED *
  180. * *
  181. * DOOR_DRIVER *
  182. * DOOR_PASSENGER *
  183. * DOOR_BACKLEFF *
  184. * DOOR_BACKRIGHT *
  185. * *
  186. * VEHICLE_DAMAGE_PANELS *
  187. * VEHICLE_DAMAGE_DOORS *
  188. * VEHICLE_DAMAGE_LIGHTS *
  189. * VEHICLE_DAMAGE_TIRES *
  190. * *
  191. * RED_NEON *
  192. * BLUE_NEON *
  193. * GREEN_NEON *
  194. * YELLOW_NEON *
  195. * PINK_NEON *
  196. * WHITE_NEON *
  197. * *
  198. * EVF_CAR_BLINK_NONE *
  199. * EVF_CAR_BLINK_LEFT *
  200. * EVF_CAR_BLINK_RIGHT *
  201. * EVF_CAR_BLINK_EMERGENCY *
  202. * *
  203. * MIN_VEHICLE_COMPONENT_ID *
  204. * MAX_VEHICLE_COMPONENT_ID *
  205. * *
  206. * Enums: *
  207. * enum 'EVF::VehicleProperties' *
  208. * # e_VEHICLE_PAINTJOB *
  209. * # e_VEHICLE_INTERIOR *
  210. * # e_VEHICLE_COLOR_1 *
  211. * # e_VEHICLE_COLOR_2 *
  212. * # e_VEHICLE_HORN *
  213. * # e_VEHICLE_SPAWN_X *
  214. * # e_VEHICLE_SPAWN_Y *
  215. * # e_VEHICLE_SPAWN_Z *
  216. * # e_VEHICLE_SPAWN_A *
  217. * # e_VEHICLE_SPAWN_VW *
  218. * # e_VEHICLE_SPAWN_INT *
  219. * # e_VEHICLE_SPEED_CAP *
  220. * # e_VEHICLE_FUEL_USE *
  221. * # e_VEHICLE_FUEL *
  222. * # e_VEHICLE_STICKY *
  223. * # e_VEHICLE_UNO_DAMAGE *
  224. * # e_VEHICLE_CAP_DAMAGE *
  225. * # e_VEHICLE_EDITOR *
  226. * # e_VEHICLE_DAMAGE_PANELS *
  227. * # e_VEHICLE_DAMAGE_DOORS *
  228. * # e_VEHICLE_DAMAGE_LIGHTS *
  229. * # e_VEHICLE_DAMAGE_TIRES *
  230. * # e_VEHICLE_BOMB *
  231. * # e_VEHICLE_BOMB_TIMER *
  232. * # e_VEHICLE_BULLETPROOF *
  233. * # e_VEHICLE_STORED *
  234. * *
  235. * enum 'EVF::VehicleBodyPart' *
  236. * # VEHICLE_BODYPART_UNKNOWN *
  237. * # VEHICLE_BODYPART_FL_WHEEL - Front Left *
  238. * # VEHICLE_BODYPART_FR_WHEEL - Front Right *
  239. * # VEHICLE_BODYPART_BL_WHEEL - Back Left *
  240. * # VEHICLE_BODYPART_BR_WHEEL - Back Right *
  241. * # VEHICLE_BODYPART_PETROLCAP *
  242. * *
  243. * enum 'EVF::ParamTypes' *
  244. * # VEHICLE_TYPE_ENGINE *
  245. * # VEHICLE_TYPE_LIGHTS *
  246. * # VEHICLE_TYPE_ALARM *
  247. * # VEHICLE_TYPE_DOORS *
  248. * # VEHICLE_TYPE_BONNET *
  249. * # VEHICLE_TYPE_BOOT *
  250. * # VEHICLE_TYPE_OBJECTIVE *
  251. * *
  252. **********************************************************************************************************************************/
  253. /*
  254. //Check Version EVF.inc
  255. #if !defined _EVF_include
  256. #error [ADM] You need EVF.inc v3.2.1
  257. #elseif !defined EVF_Version
  258. #error [ADM] Update you EVF.inc to v3.2.1
  259. #elseif (EVF_Version < 30201)
  260. #error [ADM] Update you EVF.inc to v3.2.1
  261. #endif
  262. */
  263. #if defined _EVF_include
  264. #endinput
  265. #endif
  266. #define _EVF_include
  267. #if defined _samp_included
  268. #if (!defined GetPlayerPoolSize || !defined GetSVarInt)
  269. #error [ADM] This include requires SA:MP version 0.3.7 (github.com/AbyssMorgan/SA-MP/blob/master/samp/include)
  270. #endif
  271. #elseif defined _rwmp_included
  272. #error [ADM] This game currently is not supported
  273. #else
  274. #error [ADM] Not found any general game includes
  275. #endif
  276. #if defined _Vehicle_Ex
  277. #error [ADM] Please remove deprecated file VehicleEx.inc (already implemented)
  278. #endif
  279. #if defined gVehiclePetrolCapOffsets
  280. #error [ADM] Please remove deprecated file vehicleplus.inc (already implemented)
  281. #endif
  282. #if ((defined g_anltv_VehicleData) && (defined SetVehicleNeonLights))
  283. #error [ADM] Please remove deprecated file SetVehicleNeonLights.inc (already implemented)
  284. #endif
  285. //Update Checker
  286. #if !defined HTTP
  287. #tryinclude <a_http>
  288. #endif
  289. #if !defined HTTP
  290. #error [ADM] Please include a_http.inc before EVF.inc
  291. #endif
  292. #define EVF_Version (30201) //a.b.c 10000*a+100*b+c
  293. #define EVF_SAMP_Version "0.3.7"
  294. #define EVF_Function:: stock
  295. #define EVF_Public::%0(%1) forward %0(%1); public %0(%1)
  296. #define EVF:: EVF_
  297. //Detect Streamer Plugin
  298. #if ((defined Streamer_AppendArrayData) && (defined INVALID_STREAMER_ID))
  299. #define EVF_Streamer
  300. #endif
  301. #if !defined IsValidVehicle
  302. native IsValidVehicle(vehicleid);
  303. #endif
  304. #if !defined isnull
  305. #define isnull(%1) ((!(%1[0])) || (((%1[0]) == '\1') && (!(%1[1]))))
  306. #endif
  307. #if !defined INVALID_SEAT_ID
  308. #define INVALID_SEAT_ID -1
  309. #endif
  310. #if !defined INVALID_PAINTJOB_ID
  311. #define INVALID_PAINTJOB_ID -1
  312. #endif
  313. #if !defined MAX_VEHICLE_ATTACHED_OBJECTS
  314. #define MAX_VEHICLE_ATTACHED_OBJECTS 30
  315. #endif
  316. #if !defined VEHICLE_UPDATE_INTERVAL
  317. #define VEHICLE_UPDATE_INTERVAL 250
  318. #endif
  319. #if !defined VEHICLE_SPEED_MULTIPLIER
  320. #define VEHICLE_SPEED_MULTIPLIER 170.0
  321. #endif
  322. #if !defined MULTIPLIER_FUEL_SYSTEM
  323. #define MULTIPLIER_FUEL_SYSTEM 1
  324. #endif
  325. #define RESET_PAINTJOB_ID 3
  326. #define MAX_VEHICLE_PARAMS 7
  327. #define MAX_VEHICLE_MODELS 212
  328. #define DEFAULT_VEHICLE_FUEL 1000
  329. #define MAX_VEHICLE_FUEL DEFAULT_VEHICLE_FUEL
  330. #define BONNET_HEALTHY_CLOSED 0
  331. #define BONNET_HEALTHY_OPENED 1
  332. #define BONNET_DAMAGED_CLOSED 2
  333. #define BONNET_DAMAGED_OPENED 3
  334. #define BONNET_MISSING 4
  335. #define BOOT_HEALTHY_CLOSED 0
  336. #define BOOT_HEALTHY_OPENED 1
  337. #define BOOT_DAMAGED_CLOSED 2
  338. #define BOOT_DAMAGED_OPENED 3
  339. #define BOOT_MISSING 4
  340. #define DOOR_HEALTHY_CLOSED 0
  341. #define DOOR_HEALTHY_OPENED 1
  342. #define DOOR_DAMAGED_CLOSED 2
  343. #define DOOR_DAMAGED_OPENED 3
  344. #define DOOR_MISSING 4
  345. #define BUMPER_HEALTHY 0
  346. #define BUMPER_CRUSHED 1
  347. #define BUMPER_HANGING 2
  348. #define BUMPER_MISSING 3
  349. #define WINDSHIELD_HEALTHY 0
  350. #define WINDSHIELD_DAMAGED 1
  351. #define WINDSHIELD_MISSING 2
  352. #define LIGHT_ENABLE 0
  353. #define LIGHT_DISABLE 1
  354. #define TIRE_HEALTHY 0
  355. #define TIRE_DAMAGED 1
  356. #define DOOR_DRIVER 1
  357. #define DOOR_PASSENGER 2
  358. #define DOOR_BACKLEFF 3
  359. #define DOOR_BACKRIGHT 4
  360. #define VEHICLE_DAMAGE_PANELS 0
  361. #define VEHICLE_DAMAGE_DOORS 1
  362. #define VEHICLE_DAMAGE_LIGHTS 2
  363. #define VEHICLE_DAMAGE_TIRES 3
  364. #define EVF_CAR_BLINK_NONE -1
  365. #define EVF_CAR_BLINK_LEFT 0
  366. #define EVF_CAR_BLINK_RIGHT 1
  367. #define EVF_CAR_BLINK_EMERGENCY 2
  368. #define RED_NEON 18647
  369. #define BLUE_NEON 18648
  370. #define GREEN_NEON 18649
  371. #define YELLOW_NEON 18650
  372. #define PINK_NEON 18651
  373. #define WHITE_NEON 18652
  374. #define MIN_VEHICLE_COMPONENT_ID 1000
  375. #define MAX_VEHICLE_COMPONENT_ID 1193
  376. enum EVF::VehicleProperties {
  377. e_VEHICLE_PAINTJOB,
  378. e_VEHICLE_INTERIOR,
  379. e_VEHICLE_COLOR_1,
  380. e_VEHICLE_COLOR_2,
  381. e_VEHICLE_HORN,
  382. e_VEHICLE_SPAWN_X,
  383. e_VEHICLE_SPAWN_Y,
  384. e_VEHICLE_SPAWN_Z,
  385. e_VEHICLE_SPAWN_A,
  386. e_VEHICLE_SPAWN_VW,
  387. e_VEHICLE_SPAWN_INT,
  388. e_VEHICLE_SPEED_CAP,
  389. e_VEHICLE_FUEL_USE,
  390. e_VEHICLE_FUEL,
  391. e_VEHICLE_STICKY,
  392. e_VEHICLE_UNO_DAMAGE,
  393. e_VEHICLE_CAP_DAMAGE,
  394. e_VEHICLE_EDITOR,
  395. e_VEHICLE_DAMAGE_PANELS,
  396. e_VEHICLE_DAMAGE_DOORS,
  397. e_VEHICLE_DAMAGE_LIGHTS,
  398. e_VEHICLE_DAMAGE_TIRES,
  399. e_VEHICLE_BOMB,
  400. e_VEHICLE_BOMB_TIMER,
  401. e_VEHICLE_BULLETPROOF,
  402. e_VEHICLE_STORED
  403. };
  404. enum EVF::VehicleBodyPart {
  405. VEHICLE_BODYPART_UNKNOWN,
  406. VEHICLE_BODYPART_FL_WHEEL, //front left
  407. VEHICLE_BODYPART_FR_WHEEL, //front right
  408. VEHICLE_BODYPART_BL_WHEEL, //back left
  409. VEHICLE_BODYPART_BR_WHEEL, //back right
  410. VEHICLE_BODYPART_PETROLCAP
  411. };
  412. enum EVF::ParamTypes {
  413. VEHICLE_TYPE_ENGINE,
  414. VEHICLE_TYPE_LIGHTS,
  415. VEHICLE_TYPE_ALARM,
  416. VEHICLE_TYPE_DOORS,
  417. VEHICLE_TYPE_BONNET,
  418. VEHICLE_TYPE_BOOT,
  419. VEHICLE_TYPE_OBJECTIVE
  420. };
  421. enum EVF::VehicleData {
  422. #if defined EVF_Streamer
  423. STREAMER_TAG_OBJECT e_attached_object[MAX_VEHICLE_ATTACHED_OBJECTS],
  424. #endif
  425. Float:e_vel_x,
  426. Float:e_vel_y,
  427. Float:e_vel_z,
  428. Float:e_pos_x,
  429. Float:e_pos_y,
  430. Float:e_pos_z,
  431. Float:e_pos_a,
  432. Float:e_health,
  433. e_uptime
  434. };
  435. enum EVF::PlayerData {
  436. e_editor_vehicle
  437. #if defined EVF_Streamer
  438. ,
  439. STREAMER_TAG_OBJECT e_editor_object
  440. #endif
  441. };
  442. enum EVF::NeonOffset {
  443. Float:EVF::NeonX,
  444. Float:EVF::NeonY,
  445. Float:EVF::NeonZ
  446. };
  447. #if defined EVF_Streamer
  448. enum EVF::BlinkOffset {
  449. Float: EVF::X,
  450. Float: EVF::Y,
  451. Float: EVF::Z,
  452. Float: EVF::rX,
  453. Float: EVF::rY,
  454. Float: EVF::rZ
  455. };
  456. #endif
  457. new EVF::VehicleProperty[MAX_VEHICLES][EVF::VehicleProperties];
  458. new const EVF::NeonOffsetData[MAX_VEHICLE_MODELS][EVF::NeonOffset] = {
  459. {-0.924999,0.009999,-0.674999},
  460. {-0.979999,0.074999,-0.489999},
  461. {-1.034999,-0.029999,-0.579999},
  462. {-0.884999,1.834998,-1.099999},
  463. {-0.839999,-0.064999,-0.419999},
  464. {-0.914999,0.000000,-0.534999},
  465. {-1.129999,0.354999,-1.219999},
  466. {-1.214999,0.125000,-0.759999},
  467. {-0.664999,0.709999,-0.889999},
  468. {-0.914999,-0.294999,-0.474999},
  469. {-0.879999,0.000000,-0.389999},
  470. {-0.969999,0.004999,-0.559999},
  471. {-0.994999,-0.154999,-0.569999},
  472. {-0.919999,-0.069999,-0.719999},
  473. {-0.759999,-0.469999,-0.524999},
  474. {-0.949999,-0.009999,-0.524999},
  475. {-1.259999,-0.604999,-0.664999},
  476. {-2.255004,0.859999,-0.124999},
  477. {-1.004999,0.089999,-0.829999},
  478. {-0.934999,-0.009999,-0.584999},
  479. {-0.954999,-0.009999,-0.444999},
  480. {-0.929999,-0.029999,-0.589999},
  481. {-0.889999,0.009999,-0.609999},
  482. {-0.999999,0.164999,-0.714999},
  483. {-0.739999,0.039999,-0.234999},
  484. {-0.639999,2.475009,-0.789999},
  485. {-0.969999,0.000000,-0.464999},
  486. {-1.124999,-0.714999,-0.734999},
  487. {-1.124999,0.054999,-0.759999},
  488. {-0.844999,0.004999,-0.474999},
  489. {0.0,0.0,0.0},
  490. {-1.304998,2.300005,-0.714999},
  491. {0.0,0.0,0.0},
  492. {-0.579999,0.994999,-0.874999},
  493. {0.0,0.0,0.0},
  494. {0.0,0.0,0.0},
  495. {-0.859999,-0.024999,-0.489999},
  496. {-1.314998,2.245003,-0.724999},
  497. {-0.969999,-0.034999,-0.674999},
  498. {-0.884999,0.034999,-0.644999},
  499. {-0.914999,-0.045000,-0.899999},
  500. {0.0,0.0,0.0},
  501. {-1.004999,-0.074999,-0.604999},
  502. {-0.809999,2.770015,-1.174999},
  503. {-1.064999,0.000000,0.135000},
  504. {-0.949999,0.000000,-0.519999},
  505. {0.0,0.0,0.0},
  506. {-1.004999,0.259999,-0.769999},
  507. {0.0,0.0,0.0},
  508. {0.0,0.0,0.0},
  509. {0.0,0.0,0.0},
  510. {-0.984999,-0.194999,-0.519999},
  511. {0.0,0.0,0.0},
  512. {0.0,0.0,0.0},
  513. {0.0,0.0,0.0},
  514. {-0.579999,0.979999,-0.859999},
  515. {-0.764999,-0.179999,-0.464999},
  516. {0.0,0.0,0.0},
  517. {-0.959999,-0.039999,-0.594999},
  518. {-0.919999,-0.069999,-0.719999},
  519. {-1.399998,0.554999,-1.819998},
  520. {0.0,0.0,0.0},
  521. {0.0,0.0,0.0},
  522. {0.0,0.0,0.0},
  523. {0.0,0.0,0.0},
  524. {0.0,0.0,0.0},
  525. {-0.989999,-0.064999,-0.489999},
  526. {-0.989999,-0.044999,-0.484999},
  527. {0.0,0.0,0.0},
  528. {0.0,0.0,0.0},
  529. {-1.119999,-0.149999,-0.359999},
  530. {0.0,0.0,0.0},
  531. {0.0,0.0,0.0},
  532. {0.0,0.0,0.0},
  533. {-0.994999,-0.064999,-0.544999},
  534. {-0.904999,-0.054999,-0.549999},
  535. {0.0,0.0,0.0},
  536. {-0.979999,0.019999,-0.514999},
  537. {-0.804999,0.064999,-0.519999},
  538. {-0.854999,0.090000,-0.454999},
  539. {-0.879999,0.000000,-0.489999},
  540. {0.0,0.0,0.0},
  541. {-0.989999,0.000000,-0.759999},
  542. {-0.834999,-0.149999,-0.744999},
  543. {0.0,0.0,0.0},
  544. {-0.629999,0.164999,-0.374999},
  545. {0.0,0.0,0.0},
  546. {0.0,0.0,0.0},
  547. {0.0,0.0,0.0},
  548. {-1.019999,0.110000,-0.679999},
  549. {-1.054999,0.125000,-0.604999},
  550. {-0.874999,-0.009999,-0.569999},
  551. {-0.909999,0.000000,-0.459999},
  552. {0.0,0.0,0.0},
  553. {-0.909999,-0.199999,-0.639999},
  554. {-1.024999,0.184999,-0.809999},
  555. {-0.854999,0.029999,-0.469999},
  556. {0.0,0.0,0.0},
  557. {-1.149999,0.269999,-0.654999},
  558. {-0.969999,-1.404998,-0.199999},
  559. {-0.969999,0.189999,-0.574999},
  560. {0.0,0.0,0.0},
  561. {-0.909999,0.029999,-0.639999},
  562. {-0.909999,-0.184999,-0.639999},
  563. {-0.989999,-0.059999,-0.494999},
  564. {-1.019999,0.110000,-0.679999},
  565. {-0.904999,-0.249999,-0.509999},
  566. {-1.084999,-0.024999,-0.589999},
  567. {-1.334998,-0.424999,-0.979999},
  568. {0.0,0.0,0.0},
  569. {0.0,0.0,0.0},
  570. {0.0,0.0,0.0},
  571. {0.0,0.0,0.0},
  572. {0.0,0.0,0.0},
  573. {-0.969999,1.669998,-1.174999},
  574. {-1.454998,0.439999,-1.854998},
  575. {-0.989999,0.024999,-0.584999},
  576. {-0.959999,0.004999,-0.554999},
  577. {-1.049999,0.110000,-0.439999},
  578. {0.0,0.0,0.0},
  579. {0.0,0.0,0.0},
  580. {0.0,0.0,0.0},
  581. {0.0,0.0,0.0},
  582. {0.0,0.0,0.0},
  583. {-0.689999,1.489998,-1.319998},
  584. {-1.054999,0.499999,-0.329999},
  585. {-0.899999,0.000000,-0.564999},
  586. {-0.944999,0.154999,-0.419999},
  587. {-0.924999,0.059999,-0.529999},
  588. {-0.934999,-0.110000,-0.429999},
  589. {0.0,0.0,0.0},
  590. {-0.144999,0.314999,-0.444999},
  591. {0.0,0.0,0.0},
  592. {-0.924999,-0.034999,-0.479999},
  593. {-0.984999,0.164999,-0.564999},
  594. {-1.069999,-0.034999,-0.569999},
  595. {-0.954999,-0.019999,-0.579999},
  596. {0.0,0.0,0.0},
  597. {0.0,0.0,0.0},
  598. {-1.004999,-0.049999,-0.019999},
  599. {-1.024999,-0.090000,-0.639999},
  600. {-0.904999,0.000000,-0.414999},
  601. {-0.894999,0.014999,-0.539999},
  602. {-0.904999,0.009999,-0.409999},
  603. {-1.089999,0.000000,-0.709999},
  604. {-0.939999,-0.029999,-0.564999},
  605. {-1.039999,-0.100000,-0.474999},
  606. {-0.884999,0.059999,-0.479999},
  607. {-1.769998,1.484998,-1.774998},
  608. {-0.949999,0.105000,-0.439999},
  609. {-1.089999,-0.059999,-0.554999},
  610. {-0.964999,0.004999,-0.564999},
  611. {-1.034999,0.749999,-0.254999},
  612. {0.0,0.0,0.0},
  613. {-1.109999,0.009999,-0.534999},
  614. {-0.754999,0.000000,-0.464999},
  615. {-1.119999,0.000000,0.184999},
  616. {-1.129999,0.044999,0.074999},
  617. {-0.894999,-0.089999,-0.374999},
  618. {-0.964999,0.000000,-0.444999},
  619. {-1.004999,0.054999,-0.414999},
  620. {-0.919999,0.130000,-0.574999},
  621. {-0.909999,0.120000,-0.404999},
  622. {0.0,0.0,0.0},
  623. {0.0,0.0,0.0},
  624. {-0.824999,0.000000,-0.414999},
  625. {-0.989999,-0.049999,-0.479999},
  626. {-1.089999,0.309999,-0.609999},
  627. {-0.334999,0.100000,-0.374999},
  628. {0.0,0.0,0.0},
  629. {0.0,0.0,0.0},
  630. {0.0,0.0,0.0},
  631. {0.0,0.0,0.0},
  632. {0.0,0.0,0.0},
  633. {0.0,0.0,0.0},
  634. {-0.924999,0.004999,-0.334999},
  635. {-1.019999,-0.140000,-0.419999},
  636. {0.0,0.0,0.0},
  637. {-1.429998,-0.649999,-0.879999},
  638. {-1.014999,0.000000,-0.484999},
  639. {-1.089999,0.014999,-0.474999},
  640. {0.0,0.0,0.0},
  641. {-0.984999,-0.194999,-0.709999},
  642. {-0.674999,0.259999,0.130000},
  643. {0.0,0.0,0.0},
  644. {-1.019999,-0.009999,-0.354999},
  645. {0.0,0.0,0.0},
  646. {-1.009999,-0.064999,-0.534999},
  647. {-1.374998,0.000000,-0.664999},
  648. {-0.909999,0.000000,-0.359999},
  649. {0.0,0.0,0.0},
  650. {0.0,0.0,0.0},
  651. {0.0,0.0,0.0},
  652. {0.0,0.0,0.0},
  653. {0.0,0.0,0.0},
  654. {0.0,0.0,0.0},
  655. {-0.974999,0.000000,-0.469999},
  656. {-0.969999,0.000000,-0.464999},
  657. {-1.004999,-0.014999,-0.414999},
  658. {-1.019999,0.115000,-0.684999},
  659. {-0.959999,0.204999,-0.499999},
  660. {0.0,0.0,0.0},
  661. {-1.024999,0.000000,-0.549999},
  662. {-0.954999,0.034999,-0.629999},
  663. {-0.989999,-0.064999,-0.489999},
  664. {-0.904999,0.009999,-0.409999},
  665. {0.0,0.0,0.0},
  666. {0.0,0.0,0.0},
  667. {0.0,0.0,0.0},
  668. {-1.149999,0.269999,-0.654999},
  669. {0.0,0.0,0.0},
  670. {0.0,0.0,0.0}
  671. };
  672. #if defined EVF_Streamer
  673. new const EVF::BlinkOffsetData[][EVF::BlinkOffset] = {
  674. {-0.9001, 2.0490, -0.0965, -0.9605, -2.2404, -0.0965},
  675. {-0.9686, 2.5393, 0.0235, -0.9970, -2.2863, 0.0235},
  676. {-0.8788, 2.5160, -0.0565, -0.9208, -2.5936, 0.0435},
  677. {-1.3897, 3.6007, -0.2194, -1.1904, -0.9415, 1.8389},
  678. {-0.7236, 2.1715, -0.0365, -0.7906, -2.7052, 0.0635},
  679. {-0.9127, 2.2766, -0.0565, -0.8723, -2.6526, -0.0565},
  680. {-2.2165, 4.9242, -0.0332, -2.0785, -5.2054, 0.5468},
  681. {-0.9887, 4.0622, -0.0913, -1.0141, -3.4034, -0.0913},
  682. {-0.9659, 4.7615, -0.2513, -0.8430, -3.9722, -0.5113},
  683. {-0.7859, 3.5522, -0.0313, -0.8027, -3.8228, -0.0313},
  684. {-0.825, 2.105, 0.0635, -0.8723, -2.1926, 0.1235},
  685. {-0.9405, 2.6710, -0.1825, -0.9636, -2.4525, 0.0825},
  686. {-0.8965, 2.6478, -0.0575, -0.9592, -3.4870, -0.1575},
  687. {-0.8669, 2.5464, -0.0913, -0.8209, -2.5829, 0.0687},
  688. {-0.8069, 2.7473, 0.0087, -0.9058, -3.2050, 0.1094},
  689. {-0.8738, 2.4866, -0.2357, -0.7792, -2.3501, 0.0450},
  690. {-0.8469, 2.9073, 0.0087, -1.0352, -3.5937, 1.4522},
  691. {0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000},
  692. {-0.9511, 2.3820, -0.2357, -1.0081, -2.4904, -0.1557},
  693. {-1.0742, 2.3978, -0.1757, -0.8127, -2.8620, -0.1557},
  694. {-1.0142, 2.2978, -0.0157, -0.9637, -2.6744, 0.0043},
  695. {-0.9013, 2.5343, -0.1357, -0.5921, -2.9228, -0.1957},
  696. {-0.7813, 2.1543, -0.2657, -0.8985, -2.4349, -0.1057},
  697. {-0.7817, 2.2093, -0.0313, -0.8340, -2.1794, 0.0596},
  698. {-0.7350, 1.4505, 0.1087, -0.7062, -1.4778, 0.2996},
  699. {0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000},
  700. {-1.0006, 2.3164, -0.0100, -0.9627, -2.6930, -0.0100},
  701. {-0.8728, 2.5856, 0.1887, -0.9831, -3.8383, -0.3495},
  702. {-0.8728, 2.5856, -0.2103, -0.9045, -2.8871, 1.2466},
  703. {-0.7942, 2.2846, -0.2500, -0.8397, -2.3849, -0.0070},
  704. {0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000},
  705. {-0.9771, 5.8479, 0.3497, -1.0300, -5.7043, -0.1041},
  706. {-1.7168, 4.0330, 0.4497, -1.5830, -4.3414, 0.7039},
  707. {-1.2619, 3.7708, -0.2163, -1.2966, -4.6534, -0.1051},
  708. {0.0, 0.0, 0.0, -0.4811, -1.9838, -0.0670},
  709. {0.0000, 0.0000, 0.0000, -1.0697, -3.9690, -1.1053}, //trailer
  710. {-0.8495, 2.2519, -0.0070, -0.8948, -2.4838, 0.1130},
  711. {-1.1156, 5.5395, -0.2163, -0.9856, -5.3099, 1.6458},
  712. {-1.1128, 2.3675, -0.2870, -1.0992, -2.4601, -0.2870},
  713. {-0.8381, 2.3101, -0.1470, -0.8221, -2.6534, -0.1070},
  714. {-0.8270, 2.5573, -0.3173, -0.8676, -2.5376, -0.0149},
  715. {0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000},
  716. {-1.0354, 2.8278, -0.1870, -1.0226, -3.0877, -0.1270},
  717. {-1.0610, 5.7528, -0.9573, -1.2388, -7.1392, -0.8250},
  718. {-0.9880, 2.7188, 0.6140, -1.0722, -3.0184, 0.7248},
  719. {-0.9590, 2.3460, -0.0840, -0.9773, -2.8049, -0.0840},
  720. {0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000},
  721. {0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000},
  722. { -0.1992, -0.9229, -0.1270},
  723. {0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000},
  724. { 0.0000, 0.0000, 0.0000, -1.0697, -3.9690, -1.1053}, //trailer
  725. {-0.9826, 1.9642, -0.1399, -0.8894, -2.3991, -0.0199},
  726. {0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000},
  727. {0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000},
  728. {0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000},
  729. {0.0000, 0.0000, 0.0000, -1.3866, -4.5162, -0.7399},
  730. {0.0000, 0.0000, 0.0000, -1.3045, -4.6123, 0.4601},
  731. {0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000},
  732. {-0.9513, 2.4197, -0.1399, -0.9703, -2.7779, 0.0201},
  733. {-0.8214, 2.5716, -0.1274, -0.8760, -2.5775, 0.1127},
  734. {0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000},
  735. {0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000},
  736. {0.0000, 0.0000, 0.0000, -0.2054, -0.9359, -0.1399},
  737. {-0.2276, 0.7185, 0.3201, -0.1952, -1.0037, 0.1601},
  738. {0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000},
  739. {0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000},
  740. {0.0000, 0.0000, 0.0000, -1.0201, -2.7994, 0.0401},
  741. {0.0000, 0.0000, 0.0000, -0.9401, -3.0594, 0.1601},
  742. {0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000},
  743. {0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000},
  744. {-1.0259, 2.1382, 0.2001, -1.0433, -2.5463, 0.1201},
  745. {0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000},
  746. {0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000},
  747. {0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000},
  748. {0.0000, 0.0000, 0.0000, -0.9833, -2.7663, -0.0599},
  749. {-0.8681, 2.4086, -0.3399, -0.8632, -2.7629, -0.2399},
  750. {0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000},
  751. {-0.8081, 2.6686, -0.1999, -0.9945, -2.6987, 0.0801},
  752. {-1.0938, 2.0255, 0.1001, -1.0579, -2.5378, -0.2799},
  753. {-0.9671, 2.4844, 0.0201, -0.9578, -2.7556, 0.0601},
  754. {-0.5897, 2.2607, -0.4399, -0.9183, -2.3388, -0.1399},
  755. {0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000},
  756. {-0.8841, 2.4094, -0.3399, -0.8685, -2.5676, 0.0201},
  757. {-0.7770, 2.6235, -0.0199, -0.6709, -2.7712, -0.1999},
  758. { 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000},
  759. {-0.6104, 1.7180, 0.2201, -0.7074, -1.3681, 0.1201},
  760. {0.0000, 0.0000, 0.0000, -0.5919, -3.2353, 0.9601},
  761. {0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000},
  762. {0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000},
  763. {-1.1024, 2.5796, 0.0401, -1.1261, -2.6473, 0.1601},
  764. {-1.0971, 3.1462, 0.0401, -1.1327, -3.1055, 0.1601},
  765. {-0.8495, 2.5284, -0.0799, -0.8870, -2.7776, 0.0001},
  766. {-0.7905, 2.4656, -0.0599, -0.9075, -2.8130, 0.0001},
  767. {0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000},
  768. {-0.8513, 2.3630, -0.2199, -0.8275, -2.8485, 0.1401},
  769. {-1.0909, 2.3818, 0.0001, -1.1540, -2.1156, -0.0399},
  770. {-0.9219, 2.1787, 0.0401, -0.7095, -2.1087, 0.0801},
  771. {0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000},
  772. {-0.8915, 3.0670, 0.2201, -0.9740, -3.0460, 0.3601},
  773. {-0.7725, 2.4576, -0.1999, -1.1318, -3.4186, 0.1401},
  774. {-0.9152, 1.9097, -0.0355, -0.7552, -1.9266, -0.0355},
  775. {0.0, 0.0, 0.0, 0.0, 0.0, 0.0},
  776. {-0.8723, 2.5986, -0.1770, 0.0, 0.0, 0.0},
  777. {-0.8579, 2.3582, -0.0213, 0.0, 0.0, 0.0},
  778. {0.0, 0.0, 0.0, 0.0, 0.0, 0.0},
  779. {-1.1068, 2.5744, 0.0086, -1.1365, -2.6250, 0.1679},
  780. {-0.7672, 2.2106, -0.3185, -0.9113, -2.3474, -0.0273},
  781. {-1.1143, 2.6057, -0.0456, -1.1410, -2.9714, -0.0456},
  782. {-0.7012, 3.0199, -0.6678, -1.3807, -3.3356, 1.2628},
  783. {0.0, 0.0, 0.0, 0.0, 0.0, 0.0},
  784. {0.0, 0.0, 0.0, 0.0, 0.0, 0.0},
  785. {0.0, 0.0, 0.0, 0.0, 0.0, 0.0},
  786. {0.0, 0.0, 0.0, 0.0, 0.0, 0.0},
  787. {0.0, 0.0, 0.0, 0.0, 0.0, 0.0},
  788. {-1.2341, 4.2204, 0.0806, 0.0, 0.0, 0.0},
  789. {-1.4241, 4.4811, -0.7354, -1.2973, -4.8274, -0.8974},
  790. {-0.9512, 2.7208, -0.0543, -0.9926, -2.7809, -0.0348},
  791. {-0.9401, 2.7868, -0.0726, -1.0208, -2.7461, -0.1324},
  792. {-0.9166, 2.6548, -0.0487, -1.0124, -2.8219, -0.0487}, //fake
  793. {0.0, 0.0, 0.0, 0.0, 0.0, 0.0},
  794. {0.0, 0.0, 0.0, 0.0, 0.0, 0.0},
  795. {0.0, 0.0, 0.0, 0.0, 0.0, 0.0},
  796. {0.0, 0.0, 0.0, 0.0, 0.0, 0.0},
  797. {-0.2607, 0.6038, 0.2881, -0.1973, -0.9958, 0.0638},
  798. {-0.9279, 3.6538, -0.0473, -1.3003, -3.9309, -1.0661}, //fake back
  799. {-0.8576, 2.9431, 0.1425, -1.0428, -2.9851, -0.1486}, //fake back
  800. {-0.9421, 2.3087, -0.1128, -0.9559, -2.2882, -0.0411},
  801. {-0.9351, 2.4078, -0.0242, -0.9825, -2.2344, 0.0844},
  802. {-0.8783, 2.5102, -0.1526, -0.8133, -2.5965, -0.3237}, //fake back
  803. {-1.0177, 2.5256, 0.0698, -1.0505, -2.5713, 0.2047},
  804. {0.0, 0.0, 0.0, 0.0, 0.0, 0.0},
  805. {-0.4216, 1.5030, -0.1191, -0.5225, -1.0517, 0.4484}, //fake
  806. {-4.0331, 3.9619, -0.9118, -1.5976, -0.3739, 0.4484}, //fake!
  807. {-0.9410, 2.3774, 0.0985, -0.9852, -2.4663, -0.0020},
  808. {-1.0159, 2.9278, -0.1698, -0.8236, -2.7548, -0.0574},
  809. {-0.8265, 2.5014, -0.2084, -0.9267, -2.6058, -0.1784},
  810. {-0.8577, 2.3943, -0.1248, -0.8736, -3.0999, -0.0900},
  811. {0.0, 0.0, 0.0, 0.0, 0.0, 0.0},
  812. {0.0, 0.0, 0.0, 0.0, 0.0, 0.0},
  813. {0.0, 0.0, 0.0, 0.0, 0.0, 0.0},
  814. {-0.9827, 2.5810, -0.1248, -1.0597, -2.7121, -0.0842},
  815. {-0.6055, 2.3378, -0.2108, -0.7826, -2.1992, 0.0913},
  816. {-0.9712, 2.6252, -0.0064, -0.8281, -2.9729, -0.0577},
  817. {-0.8414, 2.2904, 0.0719, -0.9831, -2.6214, -0.0116}, //fake front
  818. {-0.7346, 3.5720, 0.0200, -0.8597, -3.2242, -0.5918},
  819. {-0.4372, 1.6776, -0.0400, -0.7955, -2.0453, -0.2888},
  820. {-1.1294, 1.0702, 0.0719, -1.0580, -2.6948, 0.0719},
  821. {-0.9582, 2.5222, 0.0271, -0.9937, -2.5915, 0.0719},
  822. {0.0, 0.0, 0.0, 0.0, 0.0, 0.0},
  823. {-0.9264, 2.4914, 0.0271, -0.9070, -2.5802, 0.0271},
  824. {-1.0477, 2.5642, -0.1807, -1.0302, -2.6549, -0.1297},
  825. {-0.9334, 2.6344, -0.0448, -0.9785, -3.0524, 0.0366},
  826. {-0.8757, 3.0634, 0.3600, -0.9933, -2.9119, 0.4752},
  827. {0.0, 0.0, 0.0, 0.0, 0.0, 0.0},
  828. {-0.9409, 2.5345, 0.0600, -1.1112, -2.8095, 0.0651},
  829. {-0.9236, 1.1282, -0.0462, 0.0, 0.0, 0.0},
  830. {-0.9686, 2.5396, 0.5800, -1.1128, -2.8895, 0.7691},
  831. {-0.9886, 2.4796, 0.7000, -1.0904, -2.7699, 0.6871},
  832. {-0.9452, 2.0854, 0.0836, -0.9187, -2.4047, 0.3185},
  833. {-0.9037, 2.4333, -0.0168, -0.8819, -2.2910, 0.1482},
  834. {-0.9347, 2.5097, -0.2644, -0.9639, -2.2337, 0.1259},
  835. {-0.9157, 2.5754, -0.0857, -0.9317, -2.5444, -0.0191},
  836. {-0.9299, 2.3759, 0.0201, -0.8575, -2.2773, 0.1659},
  837. {0.0, 0.0, 0.0, 0.0, 0.0, 0.0},
  838. {0.0, 0.0, 0.0, 0.0, 0.0, 0.0},
  839. {-0.8503, 2.0545, 0.0346, -0.9249, -1.9224, 0.0816},
  840. {-0.9539, 2.7226, 0.0346, -0.9506, -2.9199, 0.0346},
  841. {-0.9942, 2.9212, -0.1543, -1.0077, -2.9164, -0.1543},
  842. {-0.2962, 2.0729, -0.0171, -0.2384, -1.2180, 0.0720},
  843. {0.0, 0.0, 0.0, 0.0, 0.0, 0.0},
  844. {0.0, 0.0, 0.0, 0.0, 0.0, 0.0},
  845. {0.0, 0.0, 0.0, 0.0, 0.0, 0.0},
  846. {-0.3095, 0.7291, -0.0971, -0.4318, -0.8940, -0.0510},
  847. {-0.7949, 3.0624, -0.3371, -0.8727, -3.0917, -0.4540},
  848. {-0.4348, 1.6912, -0.2171, -0.4277, -1.1358, -0.2069},
  849. {-0.9483, 2.3252, 0.1334, -0.9173, -2.7359, -0.0291},
  850. {-0.9948, 2.4505, 0.1883, -0.9983, -3.1357, -0.0291},
  851. {0.0, 0.0, 0.0, 0.0, 0.0, 0.0},
  852. {-1.0478, 4.3687, -0.1800, -1.1188, -5.3472, -0.5099},
  853. {-1.0598, 2.3634, 0.1013, -1.0873, -2.7596, 0.1013},
  854. {-0.7970, 2.6313, -0.2429, -1.0776, -2.8302, 0.1013},
  855. {0.0, 0.0, 0.0, -0.1975, -1.0375, 0.3448},
  856. {-0.8583, 2.4404, -0.0571, -0.9214, -3.3625, 0.0521},
  857. {-0.5225, 1.3799, 0.2429, -0.5486, -1.5684, 0.2462},
  858. {0.0, 0.0, 0.0, -1.0452, -4.3338, -0.7298}, //trailer
  859. {-1.0068, 2.7905, 0.0907, -0.9760, -3.0160, 0.2088},
  860. {-0.2872, 0.5383, 0.2009, -0.1703, -1.3533, 0.2784},
  861. {-1.0236, 2.1415, -0.2834, -1.0832, -2.4851, 0.1047},
  862. {-1.0116, 3.3590, 0.1029, -1.0679, -3.9639, -0.3029},
  863. {-0.8107, 2.3905, 0.1834, -0.9605, -2.2799, 0.3761},
  864. {0.0, 0.0, 0.0, 0.0, 0.0, 0.0},
  865. {0.0, 0.0, 0.0, -1.0590, -3.9902, -1.0809}, //trailer
  866. {0.0, 0.0, 0.0, 0.0, 0.0, 0.0},
  867. {0.0, 0.0, 0.0, 0.0, 0.0, 0.0},
  868. {0.0, 0.0, 0.0, 0.0, 0.0, 0.0},
  869. {0.0, 0.0, 0.0, 0.0, 0.0, 0.0},
  870. {-1.0419, 2.2929, -0.0255, -1.0332, -2.6951, 0.0005},
  871. {-1.0419, 2.2929, -0.0255, -1.0332, -2.6951, 0.0005},
  872. {-1.0423, 2.3495, 0.0600, -1.0326, -2.6930, 0.0600},
  873. {-1.0837, 2.5663, 0.0301, -1.1267, -2.6290, 0.1451},
  874. {-0.8782, 2.6525, -0.0344, -1.0586, -2.6696, 0.0596},
  875. {-0.8094, 3.0084, 0.5429, -0.9321, -3.0808, 0.9071},
  876. {-1.0297, 2.0487, -0.0543, -0.8907, -2.5334, -0.3228},
  877. {-0.9069, 2.6672, -0.1335, -0.8647, -2.5991, -0.1335},
  878. {0.0, 0.0, 0.0, 0.0, 0.0, 0.0},
  879. {0.0, 0.0, 0.0, 0.0, 0.0, 0.0},
  880. {0.0, 0.0, 0.0, -0.5702, -1.5842, 0.7956}, //trailer
  881. {0.0, 0.0, 0.0, 0.0, 0.0, 0.0},
  882. {0.0, 0.0, 0.0, 0.0, 0.0, 0.0},
  883. {-0.8972, 3.0244, 0.2629, -0.9349, -2.9809, 0.2791},
  884. {0.0, 0.0, 0.0, 0.0, 0.0, 0.0},
  885. {0.0, 0.0, 0.0, 0.0, 0.0, 0.0}
  886. };
  887. #endif
  888. new EVF::VehicleTrailerID[MAX_VEHICLES],
  889. EVF::VehicleTempData[MAX_VEHICLES][EVF::VehicleData],
  890. EVF::PlayerTempData[MAX_PLAYERS][EVF::PlayerData],
  891. EVF::ModShopStatus[MAX_PLAYERS];
  892. #if defined EVF_Streamer
  893. new STREAMER_TAG_OBJECT EVF::VehicleNeon[MAX_VEHICLES][2],
  894. STREAMER_TAG_OBJECT EVF::Blink[MAX_VEHICLES][4],
  895. EVF::BlinkSide[MAX_VEHICLES],
  896. Float:EVF::BlinkR[MAX_VEHICLES],
  897. bool:EVF::VehicleBlinking = false;
  898. #endif
  899. new const Float:EVF::TopSpeed[MAX_VEHICLE_MODELS] = {
  900. 157.0, 147.0, 186.0, 110.0, 133.0, 164.0, 110.0, 148.0, 100.0, 158.0, 129.0, 221.0, 168.0, 110.0, 105.0, 192.0, 154.0, 270.0, 115.0, 149.0,
  901. 145.0, 154.0, 140.0, 99.0, 135.0, 270.0, 173.0, 165.0, 157.0, 201.0, 190.0, 130.0, 94.0, 110.0, 167.0, 0.0, 149.0, 158.0, 142.0, 168.0,
  902. 136.0, 145.0, 139.0, 126.0, 110.0, 164.0, 270.0, 270.0, 111.0, 0.0, 0.0, 193.0, 270.0, 60.0, 135.0, 157.0, 106.0, 95.0, 157.0, 136.0,
  903. 270.0, 160.0, 111.0, 142.0, 145.0, 145.0, 147.0, 140.0, 144.0, 270.0, 157.0, 110.0, 190.0, 190.0, 149.0, 173.0, 270.0, 186.0, 117.0, 140.0,
  904. 184.0, 73.0, 156.0, 122.0, 190.0, 99.0, 64.0, 270.0, 270.0, 139.0, 157.0, 149.0, 140.0, 270.0, 214.0, 176.0, 162.0, 270.0, 108.0, 123.0,
  905. 140.0, 145.0, 216.0, 216.0, 173.0, 140.0, 179.0, 166.0, 108.0, 79.0, 101.0, 270.0, 270.0, 270.0, 120.0, 142.0, 157.0, 157.0, 164.0, 270.0,
  906. 270.0, 160.0, 176.0, 151.0, 130.0, 160.0, 158.0, 149.0, 176.0, 149.0, 60.0, 70.0, 110.0, 167.0, 168.0, 158.0, 173.0, 0.0, 0.0, 270.0,
  907. 149.0, 203.0, 164.0, 151.0, 150.0, 147.0, 149.0, 142.0, 270.0, 153.0, 145.0, 157.0, 121.0, 270.0, 144.0, 158.0, 113.0, 113.0, 156.0, 178.0,
  908. 169.0, 154.0, 178.0, 270.0, 145.0, 165.0, 160.0, 173.0, 146.0, 0.0, 0.0, 93.0, 60.0, 110.0, 60.0, 158.0, 158.0, 270.0, 130.0, 158.0,
  909. 153.0, 151.0, 136.0, 85.0, 0.0, 153.0, 142.0, 165.0, 108.0, 162.0, 0.0, 0.0, 270.0, 270.0, 130.0, 190.0, 175.0, 175.0, 175.0, 158.0,
  910. 151.0, 110.0, 169.0, 171.0, 148.0, 152.0, 0.0, 0.0, 0.0, 108.0, 0.0, 0.0
  911. };
  912. new const EVF::CarColors[][]={
  913. {16, 004, 001, 123, 001, 113, 001, 101, 001, 075, 001, 062, 001, 040, 001, 036, 001},
  914. {16, 041, 041, 047, 047, 052, 052, 066, 066, 074, 074, 087, 087, 091, 091, 113, 113},
  915. {16, 010, 010, 013, 013, 022, 022, 030, 030, 039, 039, 090, 090, 098, 098, 110, 110},
  916. {16, 036, 001, 037, 001, 030, 001, 028, 001, 025, 001, 040, 001, 101, 001, 113, 001},
  917. {16, 113, 039, 119, 050, 123, 092, 109, 100, 101, 101, 095, 105, 083, 110, 066, 025},
  918. {16, 011, 001, 024, 001, 036, 001, 040, 001, 075, 001, 091, 001, 123, 001, 004, 001},
  919. {2, 001, 001},
  920. {2, 003, 001},
  921. {2, 026, 026},
  922. {2, 001, 001},
  923. {16, 004, 001, 009, 001, 010, 001, 025, 001, 036, 001, 040, 001, 045, 001, 084, 001},
  924. {16, 012, 001, 064, 001, 123, 001, 116, 001, 112, 001, 106, 001, 080, 001, 075, 001},
  925. {16, 009, 001, 010, 008, 011, 001, 025, 008, 027, 001, 029, 008, 030, 001, 037, 008},
  926. {16, 087, 001, 088, 001, 091, 001, 105, 001, 109, 001, 119, 001, 004, 001, 025, 001},
  927. {16, 025, 001, 028, 001, 043, 001, 067, 001, 072, 001, 009, 001, 095, 001, 024, 001},
  928. {16, 020, 001, 025, 001, 036, 001, 040, 001, 062, 001, 075, 001, 092, 001, 000, 001},
  929. {2, 001, 003},
  930. {0, 000, 000},
  931. {16, 119, 119, 117, 227, 114, 114, 108, 108, 095, 095, 081, 081, 061, 061, 041, 041},
  932. {16, 045, 075, 047, 076, 033, 075, 013, 076, 054, 075, 069, 076, 059, 075, 087, 076},
  933. {2, 006, 001},
  934. {16, 004, 001, 013, 001, 025, 001, 030, 001, 036, 001, 040, 001, 075, 001, 095, 001},
  935. {14, 096, 025, 097, 025, 101, 025, 111, 031, 113, 036, 083, 057, 067, 059},
  936. {12, 001, 016, 001, 056, 001, 017, 001, 053, 001, 005, 001, 035},
  937. {16, 001, 000, 002, 002, 003, 002, 003, 006, 006, 016, 015, 030, 024, 053, 035, 061},
  938. {2, 043, 000},
  939. {16, 037, 037, 042, 042, 053, 053, 062, 062, 007, 007, 010, 010, 011, 011, 015, 015},
  940. {2, 000, 001},
  941. {2, 004, 075},
  942. {16, 012, 012, 013, 013, 014, 014, 001, 002, 002, 001, 001, 003, 003, 001, 010, 010},
  943. {2, 046, 026},
  944. {16, 071, 059, 075, 059, 092, 072, 047, 074, 055, 083, 059, 083, 071, 087, 082, 087},
  945. {2, 043, 000},
  946. {2, 043, 000},
  947. {14, 001, 001, 012, 012, 002, 002, 006, 006, 004, 004, 046, 046, 053, 053},
  948. {2, 001, 001},
  949. {14, 083, 001, 087, 001, 092, 001, 095, 001, 109, 001, 119, 045, 011, 001},
  950. {16, 054, 007, 079, 007, 087, 007, 095, 016, 098, 020, 105, 020, 123, 020, 125, 021},
  951. {2, 006, 076},
  952. {16, 057, 008, 008, 017, 043, 021, 054, 038, 067, 008, 037, 078, 065, 079, 025, 078},
  953. {16, 034, 034, 032, 032, 020, 020, 110, 110, 066, 066, 084, 084, 118, 118, 121, 121},
  954. {16, 002, 096, 079, 042, 082, 054, 067, 086, 126, 096, 070, 096, 110, 054, 067, 098},
  955. {16, 000, 000, 011, 105, 025, 109, 036, 000, 040, 036, 075, 036, 000, 036, 000, 109},
  956. {16, 004, 001, 020, 001, 024, 001, 025, 001, 036, 001, 040, 001, 054, 001, 084, 001},
  957. {12, 032, 036, 032, 042, 032, 053, 032, 066, 032, 014, 032, 032},
  958. {16, 034, 034, 035, 035, 037, 037, 039, 039, 041, 041, 043, 043, 045, 045, 047, 047},
  959. {32, 000, 000, 000, 001, 001, 005, 001, 001, 003, 003, 000, 001, 001, 022, 001, 001, 001, 035, 001, 001, 001, 044, 001, 001, 001, 053, 001, 001, 001, 057, 001, 001},
  960. {2, 075, 002},
  961. {2, 001, 003},
  962. {2, 001, 074},
  963. {2, 001, 001},
  964. {16, 123, 123, 125, 125, 036, 036, 016, 016, 018, 018, 046, 046, 061, 061, 075, 075},
  965. {16, 001, 003, 001, 005, 001, 016, 001, 022, 001, 035, 001, 044, 001, 053, 001, 057},
  966. {2, 056, 056},
  967. {2, 026, 026},
  968. {16, 084, 015, 084, 058, 084, 031, 032, 074, 043, 031, 001, 031, 077, 031, 032, 074},
  969. {16, 084, 063, 091, 063, 102, 065, 105, 072, 110, 093, 121, 093, 012, 095, 023, 001},
  970. {16, 058, 001, 002, 001, 063, 001, 018, 001, 032, 001, 045, 001, 013, 001, 034, 001},
  971. {16, 091, 001, 101, 001, 109, 001, 113, 001, 004, 001, 025, 001, 030, 001, 036, 001},
  972. {16, 026, 026, 028, 028, 044, 044, 051, 051, 057, 057, 072, 072, 106, 106, 112, 112},
  973. {16, 001, 003, 001, 009, 001, 018, 001, 030, 017, 023, 046, 023, 046, 032, 057, 034},
  974. {16, 036, 001, 037, 001, 043, 001, 053, 001, 061, 001, 075, 001, 079, 001, 088, 001},
  975. {16, 012, 012, 013, 013, 014, 014, 001, 002, 002, 001, 001, 003, 003, 001, 010, 010},
  976. {16, 079, 079, 084, 084, 007, 007, 011, 011, 019, 019, 022, 022, 036, 036, 053, 053},
  977. {2, 014, 075},
  978. {2, 014, 075},
  979. {16, 067, 076, 068, 076, 078, 076, 002, 076, 016, 076, 018, 076, 025, 076, 045, 088},
  980. {16, 051, 001, 058, 008, 060, 001, 068, 008, 002, 001, 013, 008, 022, 001, 036, 008},
  981. {8, 006, 006, 046, 046, 053, 053, 003, 003},
  982. {0, 000, 000},
  983. {2, 043, 000},
  984. {16, 120, 117, 103, 111, 120, 114, 074, 091, 120, 112, 074, 083, 120, 113, 066, 071},
  985. {4, 056, 015, 056, 053},
  986. {4, 056, 015, 056, 053},
  987. {16, 097, 001, 081, 001, 105, 001, 110, 001, 091, 001, 074, 001, 084, 001, 083, 001},
  988. {16, 002, 039, 009, 039, 017, 001, 021, 001, 033, 000, 037, 000, 041, 029, 056, 029},
  989. {16, 006, 007, 007, 006, 001, 006, 089, 091, 119, 117, 103, 102, 077, 087, 071, 077},
  990. {16, 092, 001, 094, 001, 101, 001, 121, 001, 000, 001, 022, 001, 036, 001, 075, 001},
  991. {16, 072, 001, 066, 001, 059, 001, 045, 001, 040, 001, 039, 001, 035, 001, 020, 001},
  992. {16, 027, 036, 059, 036, 060, 035, 055, 041, 054, 031, 049, 023, 045, 032, 040, 029},
  993. {14, 073, 045, 012, 012, 002, 002, 006, 006, 004, 004, 046, 046, 053, 053},
  994. {16, 001, 001, 003, 003, 006, 006, 046, 046, 065, 009, 014, 001, 012, 009, 026, 001},
  995. {16, 041, 041, 048, 048, 052, 052, 064, 064, 071, 071, 085, 085, 010, 010, 062, 062},
  996. {32, 001, 031, 001, 000, 001, 031, 001, 000, 001, 020, 003, 000, 001, 005, 000, 000, 000, 006, 003, 000, 003, 006, 003, 000, 016, 000, 008, 000, 017, 000, 120, 000},
  997. {8, 012, 035, 050, 032, 040, 026, 066, 036},
  998. {14, 001, 073, 001, 074, 001, 075, 001, 076, 001, 077, 001, 078, 001, 079},
  999. {2, 001, 001},
  1000. {16, 026, 014, 029, 042, 026, 057, 054, 029, 026, 003, 003, 029, 012, 039, 074, 035},
  1001. {4, 002, 026, 002, 029},
  1002. {12, 013, 118, 014, 123, 120, 123, 112, 120, 084, 110, 076, 102},
  1003. {2, 000, 000},
  1004. {12, 040, 065, 071, 072, 052, 066, 064, 072, 030, 072, 060, 072},
  1005. {16, 030, 026, 077, 026, 081, 027, 024, 055, 028, 056, 049, 059, 052, 069, 071, 107},
  1006. {2, 036, 013},
  1007. {16, 007, 094, 036, 088, 051, 075, 053, 075, 058, 067, 075, 067, 075, 061, 079, 062},
  1008. {16, 123, 124, 119, 122, 118, 117, 116, 115, 114, 108, 101, 106, 088, 099, 005, 006},
  1009. {16, 074, 072, 066, 072, 053, 056, 037, 019, 022, 022, 020, 020, 009, 014, 000, 000},
  1010. {2, 000, 001},
  1011. {16, 011, 123, 013, 120, 020, 117, 024, 112, 027, 107, 036, 105, 037, 107, 043, 093},
  1012. {16, 109, 025, 109, 032, 112, 032, 010, 032, 030, 044, 032, 052, 084, 066, 084, 069},
  1013. {16, 075, 084, 040, 084, 040, 110, 028, 119, 025, 119, 021, 119, 013, 119, 004, 119},
  1014. {2, 014, 075},
  1015. {16, 083, 066, 087, 074, 087, 075, 098, 083, 101, 100, 103, 101, 117, 116, 123, 036},
  1016. {16, 036, 117, 036, 013, 042, 030, 042, 033, 054, 036, 075, 079, 092, 101, 098, 109},
  1017. {16, 051, 039, 057, 038, 045, 029, 034, 009, 065, 009, 014, 001, 012, 009, 026, 001},
  1018. {12, 013, 118, 014, 123, 120, 123, 112, 120, 084, 110, 076, 102},
  1019. {10, 003, 003, 006, 006, 007, 007, 052, 052, 076, 076},
  1020. {16, 037, 037, 042, 042, 053, 053, 062, 062, 007, 007, 010, 010, 011, 011, 015, 015},
  1021. {2, 001, 001},
  1022. {16, 007, 001, 074, 001, 061, 001, 016, 001, 025, 001, 030, 001, 036, 001, 053, 001},
  1023. {16, 043, 043, 046, 046, 039, 039, 028, 028, 016, 016, 006, 006, 005, 005, 002, 002},
  1024. {16, 003, 090, 004, 090, 007, 068, 008, 066, 012, 060, 027, 097, 034, 051, 037, 051},
  1025. {16, 017, 039, 015, 123, 032, 112, 045, 088, 052, 071, 057, 067, 061, 096, 096, 096},
  1026. {16, 038, 051, 021, 036, 021, 034, 030, 034, 054, 034, 055, 020, 048, 018, 051, 006},
  1027. {16, 010, 001, 025, 001, 028, 001, 036, 001, 040, 001, 054, 001, 075, 001, 113, 001},
  1028. {16, 013, 076, 024, 077, 063, 078, 042, 076, 054, 077, 039, 078, 011, 076, 062, 077},
  1029. {16, 116, 001, 119, 001, 122, 001, 004, 001, 009, 001, 024, 001, 027, 001, 036, 001},
  1030. {16, 037, 036, 036, 036, 040, 036, 043, 041, 047, 041, 051, 072, 054, 075, 055, 084},
  1031. {16, 002, 039, 009, 039, 017, 001, 021, 001, 033, 000, 037, 000, 041, 029, 056, 029},
  1032. {2, 001, 001},
  1033. {0, 000, 000},
  1034. {16, 074, 074, 075, 013, 087, 118, 092, 003, 115, 118, 025, 118, 036, 000, 118, 118},
  1035. {16, 003, 003, 003, 008, 006, 025, 007, 079, 008, 082, 036, 105, 039, 106, 051, 118},
  1036. {0, 000, 000},
  1037. {32, 060, 024, 023, 000, 061, 027, 123, 000, 065, 031, 031, 000, 061, 061, 030, 000, 081, 035, 023, 000, 062, 061, 062, 000, 083, 066, 064, 000, 083, 064, 064, 000},
  1038. {14, 001, 001, 017, 020, 018, 020, 022, 030, 036, 043, 044, 051, 052, 054},
  1039. {16, 002, 039, 009, 039, 017, 001, 021, 001, 033, 000, 037, 000, 041, 029, 056, 029},
  1040. {16, 052, 001, 053, 001, 066, 001, 075, 001, 076, 001, 081, 001, 095, 001, 109, 001},
  1041. {0, 000, 000},
  1042. {16, 037, 037, 042, 042, 053, 053, 062, 062, 007, 007, 010, 010, 011, 011, 015, 015},
  1043. {16, 110, 001, 111, 001, 112, 001, 114, 001, 119, 001, 122, 001, 004, 001, 013, 001},
  1044. {12, 002, 035, 036, 002, 051, 053, 091, 002, 011, 022, 040, 035},
  1045. {0, 000, 000},
  1046. {16, 073, 001, 074, 001, 075, 001, 077, 001, 079, 001, 083, 001, 084, 001, 091, 001},
  1047. {16, 037, 037, 042, 042, 053, 053, 062, 062, 007, 007, 010, 010, 011, 011, 015, 015},
  1048. {16, 003, 001, 028, 001, 031, 001, 055, 001, 066, 001, 097, 001, 123, 001, 118, 001},
  1049. {16, 009, 001, 012, 001, 026, 096, 030, 096, 032, 001, 037, 001, 057, 096, 071, 096},
  1050. {2, 001, 001},
  1051. {2, 001, 001},
  1052. {14, 096, 067, 086, 070, 079, 074, 070, 086, 061, 098, 075, 075, 075, 091},
  1053. {16, 037, 037, 042, 042, 053, 053, 062, 062, 007, 007, 010, 010, 011, 011, 015, 015},
  1054. {16, 051, 001, 058, 008, 060, 001, 068, 008, 002, 001, 013, 008, 022, 001, 036, 008},
  1055. {16, 013, 118, 024, 118, 031, 093, 032, 092, 045, 092, 113, 092, 119, 113, 122, 113},
  1056. {16, 076, 008, 032, 008, 043, 008, 067, 008, 011, 011, 008, 090, 002, 002, 083, 013},
  1057. {2, 003, 001},
  1058. {16, 050, 001, 047, 001, 044, 096, 040, 096, 039, 001, 030, 001, 028, 096, 009, 096},
  1059. {16, 062, 037, 078, 038, 002, 062, 003, 087, 002, 078, 113, 078, 119, 062, 007, 078},
  1060. {16, 122, 001, 123, 001, 125, 001, 010, 001, 024, 001, 037, 001, 055, 001, 066, 001},
  1061. {2, 001, 001},
  1062. {16, 074, 039, 072, 039, 075, 039, 079, 039, 083, 036, 084, 036, 089, 035, 091, 035},
  1063. {16, 037, 037, 042, 042, 053, 053, 062, 062, 007, 007, 010, 010, 011, 011, 015, 015},
  1064. {16, 067, 001, 072, 001, 075, 001, 083, 001, 091, 001, 101, 001, 109, 001, 020, 001},
  1065. {6, 056, 056, 049, 049, 026, 124},
  1066. {16, 038, 009, 055, 023, 061, 074, 071, 087, 091, 087, 098, 114, 102, 119, 111, 003},
  1067. {16, 053, 032, 015, 032, 045, 032, 034, 030, 065, 032, 014, 032, 012, 032, 043, 032},
  1068. {16, 051, 001, 058, 001, 060, 001, 068, 001, 002, 001, 013, 001, 022, 001, 036, 001},
  1069. {2, 001, 001},
  1070. {2, 001, 001},
  1071. {16, 112, 001, 116, 001, 117, 001, 024, 001, 030, 001, 035, 001, 036, 001, 040, 001},
  1072. {16, 051, 001, 058, 008, 060, 001, 068, 008, 002, 001, 013, 008, 022, 001, 036, 008},
  1073. {16, 052, 039, 009, 039, 017, 001, 021, 001, 033, 000, 037, 000, 041, 029, 056, 029},
  1074. {16, 057, 008, 008, 017, 043, 021, 054, 038, 067, 008, 037, 078, 065, 079, 025, 078},
  1075. {16, 036, 001, 035, 001, 017, 001, 011, 001, 116, 001, 113, 001, 101, 001, 092, 001},
  1076. {2, 001, 006},
  1077. {0, 000, 000},
  1078. {16, 037, 037, 042, 042, 053, 053, 062, 062, 007, 007, 010, 010, 011, 011, 015, 015},
  1079. {16, 109, 001, 030, 008, 095, 001, 084, 008, 083, 001, 072, 008, 071, 001, 052, 008},
  1080. {16, 097, 096, 088, 064, 090, 096, 093, 064, 097, 096, 099, 081, 102, 114, 114, 001},
  1081. {16, 002, 039, 009, 039, 017, 001, 021, 001, 033, 000, 037, 000, 041, 029, 056, 029},
  1082. {0, 000, 000},
  1083. {2, 001, 001},
  1084. {12, 002, 035, 036, 002, 051, 053, 091, 002, 011, 022, 040, 035},
  1085. {16, 094, 001, 101, 001, 116, 001, 117, 001, 004, 001, 025, 001, 030, 001, 037, 001},
  1086. {16, 091, 038, 115, 043, 085, 006, 079, 007, 078, 008, 077, 018, 079, 018, 086, 024},
  1087. {2, 026, 026},
  1088. {16, 012, 001, 019, 096, 031, 064, 025, 096, 038, 001, 051, 096, 057, 001, 066, 096},
  1089. {16, 067, 001, 068, 096, 072, 001, 074, 008, 075, 096, 076, 008, 079, 001, 084, 096},
  1090. {12, 001, 003, 008, 007, 008, 010, 008, 016, 023, 031, 040, 044},
  1091. {2, 001, 001},
  1092. {16, 037, 037, 042, 042, 053, 053, 062, 062, 007, 007, 010, 010, 011, 011, 015, 015},
  1093. {18, 092, 092, 081, 081, 067, 067, 066, 066, 061, 061, 053, 053, 051, 051, 047, 047, 043, 043},
  1094. {16, 054, 001, 058, 001, 066, 001, 072, 001, 075, 001, 087, 001, 101, 001, 036, 001},
  1095. {16, 041, 010, 041, 020, 049, 011, 056, 123, 110, 113, 112, 116, 114, 118, 119, 101},
  1096. {2, 001, 001},
  1097. {2, 001, 001},
  1098. {16, 037, 037, 042, 042, 053, 053, 062, 062, 007, 007, 010, 010, 011, 011, 015, 015},
  1099. {16, 119, 001, 122, 001, 008, 001, 010, 001, 013, 001, 025, 001, 027, 001, 032, 001},
  1100. {16, 036, 001, 040, 001, 043, 001, 053, 001, 072, 001, 075, 001, 095, 001, 101, 001},
  1101. {2, 001, 001},
  1102. {16, 037, 037, 031, 031, 023, 023, 022, 022, 007, 007, 124, 124, 114, 114, 112, 112},
  1103. {0, 000, 000},
  1104. {2, 001, 001},
  1105. {2, 001, 001},
  1106. {16, 051, 001, 058, 008, 060, 001, 068, 008, 002, 001, 013, 008, 022, 001, 036, 008},
  1107. {0, 000, 000},
  1108. {2, 112, 020},
  1109. {2, 000, 001},
  1110. {2, 000, 001},
  1111. {2, 000, 001},
  1112. {2, 000, 001},
  1113. {16, 081, 008, 032, 008, 043, 008, 067, 008, 011, 011, 008, 090, 002, 002, 083, 013},
  1114. {2, 001, 001},
  1115. {16, 058, 001, 069, 001, 075, 077, 018, 001, 032, 001, 045, 045, 013, 001, 034, 001},
  1116. {16, 058, 001, 069, 001, 075, 077, 018, 001, 032, 001, 045, 045, 013, 001, 034, 001},
  1117. {16, 067, 076, 068, 076, 078, 076, 002, 076, 016, 076, 018, 076, 025, 076, 045, 088},
  1118. {16, 061, 008, 032, 008, 043, 008, 067, 008, 011, 011, 008, 090, 002, 002, 083, 013},
  1119. {0, 000, 000},
  1120. {0, 000, 000},
  1121. {2, 001, 001},
  1122. {2, 036, 036},
  1123. {0, 000, 000},
  1124. {0, 000, 000}
  1125. };
  1126. new const EVF::VehicleSeats[MAX_VEHICLE_MODELS] = {
  1127. 4,2,2,2,4,4,1,2,2,4,2,2,2,4,2,2,4,2,4,2,4,4,2,2,2,1,4,4,4,2,1,7,1,2,2,0,2,7,4,2,4,1,2,2,2,4,1,2,1,0,0,2,1,1,1,2,2,2,4,4,
  1128. 2,2,2,2,1,1,4,4,2,2,4,2,1,1,2,2,1,2,2,4,2,1,4,3,1,1,1,4,2,2,4,2,4,1,2,2,2,4,4,2,2,1,2,2,2,2,2,4,2,1,1,2,1,1,2,2,4,2,2,1,
  1129. 1,2,2,2,2,2,2,2,2,4,1,1,1,2,2,2,2,7,7,1,4,2,2,2,2,2,4,4,2,2,4,4,2,1,2,2,2,2,2,2,4,4,2,2,1,2,4,4,1,0,0,1,1,2,1,2,2,1,2,4,
  1130. 4,2,4,1,0,4,2,2,2,2,0,0,7,2,2,1,4,4,4,2,2,2,2,2,4,2,0,0,0,4,0,0
  1131. };
  1132. new const EVF::VehicleDoors[MAX_VEHICLE_MODELS] = {
  1133. 4,2,2,2,4,4,2,2,2,4,2,2,2,2,2,2,2,2,4,2,4,4,2,2,0,1,4,2,2,0,0,0,0,2,2,0,2,0,4,0,2,0,2,2,2,4,0,2,0,0,0,2,0,0,0,2,2,0,4,2,
  1134. 0,0,0,0,0,0,4,4,0,2,4,0,0,0,2,2,1,2,2,4,0,0,2,2,0,0,0,4,4,2,4,2,4,0,0,2,2,4,2,2,2,0,0,0,0,2,2,4,2,0,0,2,0,0,2,2,4,2,2,0,
  1135. 1,0,0,0,2,2,2,2,2,4,0,0,0,0,2,2,0,0,0,0,4,2,2,2,2,2,4,4,0,2,4,4,2,0,2,0,2,2,2,2,4,4,2,2,0,2,4,0,0,0,0,0,0,2,2,0,2,0,2,4,
  1136. 4,0,2,2,0,4,0,2,2,2,0,0,0,2,0,0,4,4,4,2,2,0,2,2,4,2,0,0,0,2,0,0
  1137. };
  1138. new const EVF::ComponentPrice[][] = {
  1139. {1005, 150}, {1004, 100}, {1012, 250}, {1011, 220},
  1140. {1143, 150}, {1145, 100}, {1020, 250}, {1021, 200},
  1141. {1022, 150}, {1019, 300}, {1018, 350}, {1013, 100},
  1142. {1024, 50}, {1008, 500}, {1009, 200}, {1010, 1000},
  1143. {1006, 80}, {1001, 550}, {1014, 400}, {1002, 200},
  1144. {1023, 350}, {1015, 500}, {1016, 200}, {1003, 250},
  1145. {1000, 400}, {1007, 500}, {1017, 500}, {1046, 710},
  1146. {1045, 510}, {1153, 1200}, {1152, 910}, {1150, 1090},
  1147. {1151, 840}, {1054, 210}, {1053, 130}, {1049, 810},
  1148. {1050, 620}, {1047, 670}, {1048, 530}, {1065, 850},
  1149. {1066, 750}, {1160, 1050}, {1173, 950}, {1159, 1050},
  1150. {1161, 950}, {1067, 250}, {1068, 200}, {1162, 650},
  1151. {1158, 550}, {1069, 550}, {1070, 450}, {1034, 790},
  1152. {1037, 690}, {1171, 990}, {1172, 900}, {1149, 1000},
  1153. {1148, 890}, {1038, 190}, {1035, 150}, {1147, 600},
  1154. {1146, 490}, {1036, 500}, {1039, 390}, {1064, 830},
  1155. {1059, 720}, {1155, 1030}, {1157, 930}, {1154, 1030},
  1156. {1156, 920}, {1055, 230}, {1061, 180}, {1058, 620},
  1157. {1060, 530}, {1056, 520}, {1057, 430}, {1028, 770},
  1158. {1029, 680}, {1169, 970}, {1170, 880}, {1141, 980},
  1159. {1140, 870}, {1032, 170}, {1033, 120}, {1138, 580},
  1160. {1139, 470}, {1026, 480}, {1031, 370}, {1092, 750},
  1161. {1089, 650}, {1166, 950}, {1165, 850}, {1168, 950},
  1162. {1167, 850}, {1088, 150}, {1091, 100}, {1164, 550},
  1163. {1163, 450}, {1090, 450}, {1093, 350}, {1128, 3340},
  1164. {1103, 3250}, {1184, 2150}, {1183, 2040}, {1182, 2130},
  1165. {1181, 2050}, {1104, 1610}, {1105, 1540}, {1108, 780},
  1166. {1126, 3340}, {1127, 3250}, {1179, 2150}, {1185, 2040},
  1167. {1180, 2130}, {1178, 2050}, {1122, 780}, {1106, 780},
  1168. {1100, 940}, {1123, 860}, {1125, 1120}, {1130, 3380},
  1169. {1131, 3290}, {1189, 2200}, {1188, 2080}, {1187, 2175},
  1170. {1186, 2095}, {1129, 1650}, {1132, 1590}, {1133, 830},
  1171. {1044, 500}, {1043, 500}, {1174, 1000}, {1175, 900},
  1172. {1176, 1000}, {1177, 900}, {1042, 1000}, {1113, 3340},
  1173. {1114, 3250}, {1117, 2040}, {1115, 2130}, {1116, 2050},
  1174. {1109, 1610}, {1110, 1540}, {1118, 780}, {1119, 940},
  1175. {1136, 1000}, {1135, 1500}, {1191, 1040}, {1190, 1200},
  1176. {1192, 940}, {1193, 1100}, {1134, 800}, {1079, 1030},
  1177. {1075, 980}, {1077, 1620}, {1083, 1560}, {1082, 820},
  1178. {1085, 770}, {1074, 1030}, {1081, 1230}, {1080, 900},
  1179. {1073, 1100}, {1078, 1200}, {1076, 1560}, {1084, 1350},
  1180. {1025, 1000}, {1096, 1000}, {1097, 620}, {1098, 1140},
  1181. {1086, 100}, {1087, 1500}
  1182. };
  1183. new const EVF::ValidComponent[][] = {
  1184. {400, 1024, 1021, 1020, 1019, 1018, 1013, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1185. {401, 1145, 1144, 1143, 1142, 1020, 1019, 1017, 1013, 1007, 1006, 1005, 1004, 1003, 1001, 0000, 0000, 0000, 0000},
  1186. {402, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1187. {403, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1188. {404, 1021, 1020, 1019, 1017, 1016, 1013, 1007, 1002, 1000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1189. {405, 1023, 1021, 1020, 1019, 1018, 1014, 1001, 1000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1190. {406, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1191. {407, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1192. {408, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1193. {409, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1194. {410, 1024, 1023, 1021, 1020, 1019, 1017, 1013, 1007, 1003, 1001, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1195. {411, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1196. {412, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1197. {413, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1198. {414, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1199. {415, 1023, 1019, 1018, 1017, 1007, 1003, 1001, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1200. {416, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1201. {417, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1202. {418, 1021, 1020, 1016, 1006, 1002, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1203. {419, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1204. {420, 1021, 1019, 1005, 1004, 1003, 1001, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1205. {421, 1023, 1021, 1020, 1019, 1018, 1016, 1014, 1000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1206. {422, 1021, 1020, 1019, 1017, 1013, 1007, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1207. {423, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1208. {424, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1209. {425, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1210. {426, 1021, 1019, 1006, 1005, 1004, 1003, 1001, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1211. {427, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1212. {428, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1213. {429, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1214. {430, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1215. {431, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1216. {432, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1217. {433, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1218. {434, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1219. {435, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1220. {436, 1022, 1021, 1020, 1019, 1017, 1013, 1007, 1006, 1003, 1001, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1221. {437, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1222. {438, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1223. {439, 1145, 1144, 1143, 1142, 1023, 1017, 1013, 1007, 1003, 1001, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1224. {440, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1225. {441, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1226. {442, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1227. {443, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1228. {444, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1229. {445, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1230. {446, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1231. {447, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1232. {448, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1233. {449, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1234. {450, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1235. {451, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1236. {452, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1237. {453, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1238. {454, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1239. {455, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1240. {456, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1241. {457, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1242. {458, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1243. {459, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1244. {460, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1245. {461, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1246. {462, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1247. {463, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1248. {464, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1249. {465, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1250. {466, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1251. {467, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1252. {468, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1253. {469, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1254. {470, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1255. {471, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1256. {472, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1257. {473, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1258. {474, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1259. {475, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1260. {476, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1261. {477, 1021, 1020, 1019, 1018, 1017, 1007, 1006, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1262. {478, 1024, 1022, 1021, 1020, 1013, 1012, 1005, 1004, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1263. {479, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1264. {480, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1265. {481, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1266. {482, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1267. {483, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1268. {484, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1269. {485, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1270. {486, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1271. {487, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1272. {488, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1273. {489, 1024, 1020, 1019, 1018, 1016, 1013, 1006, 1005, 1004, 1002, 1000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1274. {490, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1275. {491, 1145, 1144, 1143, 1142, 1023, 1021, 1020, 1019, 1018, 1017, 1014, 1007, 1003, 0000, 0000, 0000, 0000, 0000},
  1276. {492, 1016, 1006, 1005, 1004, 1000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1277. {493, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1278. {494, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1279. {495, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1280. {496, 1143, 1142, 1023, 1020, 1019, 1017, 1011, 1007, 1006, 1003, 1002, 1001, 0000, 0000, 0000, 0000, 0000, 0000},
  1281. {497, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1282. {498, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1283. {499, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1284. {500, 1024, 1021, 1020, 1019, 1013, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1285. {501, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1286. {502, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1287. {503, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1288. {504, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1289. {505, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1290. {506, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1291. {507, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1292. {508, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1293. {509, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1294. {510, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1295. {511, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1296. {512, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1297. {513, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1298. {514, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1299. {515, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1300. {516, 1021, 1020, 1019, 1018, 1017, 1016, 1015, 1007, 1004, 1002, 1000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1301. {517, 1145, 1144, 1143, 1142, 1023, 1020, 1019, 1018, 1017, 1016, 1007, 1003, 1002, 0000, 0000, 0000, 0000, 0000},
  1302. {518, 1145, 1144, 1143, 1142, 1023, 1020, 1018, 1017, 1013, 1007, 1006, 1005, 1003, 1001, 0000, 0000, 0000, 0000},
  1303. {519, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1304. {520, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1305. {521, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1306. {522, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1307. {523, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1308. {524, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1309. {525, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1310. {526, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1311. {527, 1021, 1020, 1018, 1017, 1015, 1014, 1007, 1001, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1312. {528, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1313. {529, 1023, 1020, 1019, 1018, 1017, 1012, 1011, 1007, 1006, 1003, 1001, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1314. {530, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1315. {531, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1316. {532, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1317. {533, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1318. {534, 1185, 1180, 1179, 1178, 1127, 1126, 1125, 1124, 1123, 1122, 1106, 1101, 1100, 0000, 0000, 0000, 0000, 0000},
  1319. {535, 1121, 1120, 1119, 1118, 1117, 1116, 1115, 1114, 1113, 1110, 1109, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1320. {536, 1184, 1183, 1182, 1181, 1128, 1108, 1107, 1105, 1104, 1103, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1321. {537, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1322. {538, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1323. {539, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1324. {540, 1145, 1144, 1143, 1142, 1024, 1023, 1020, 1019, 1018, 1017, 1007, 1006, 1004, 1001, 0000, 0000, 0000, 0000},
  1325. {541, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1326. {542, 1145, 1144, 1021, 1020, 1019, 1018, 1015, 1014, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1327. {543, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1328. {544, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1329. {545, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1330. {546, 1145, 1144, 1143, 1142, 1024, 1023, 1019, 1018, 1017, 1007, 1006, 1004, 1002, 1001, 0000, 0000, 0000, 0000},
  1331. {547, 1143, 1142, 1021, 1020, 1019, 1018, 1016, 1003, 1000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1332. {548, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1333. {549, 1145, 1144, 1143, 1142, 1023, 1020, 1019, 1018, 1017, 1012, 1011, 1007, 1003, 1001, 0000, 0000, 0000, 0000},
  1334. {550, 1145, 1144, 1143, 1142, 1023, 1020, 1019, 1018, 1006, 1005, 1004, 1003, 1001, 0000, 0000, 0000, 0000, 0000},
  1335. {551, 1023, 1021, 1020, 1019, 1018, 1016, 1006, 1005, 1003, 1002, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1336. {552, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1337. {553, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1338. {554, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1339. {555, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1340. {556, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1341. {557, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1342. {558, 1168, 1167, 1166, 1165, 1164, 1163, 1095, 1094, 1093, 1092, 1091, 1090, 1089, 1088, 0000, 0000, 0000, 0000},
  1343. {559, 1173, 1162, 1161, 1160, 1159, 1158, 1072, 1071, 1070, 1069, 1068, 1067, 1066, 1065, 0000, 0000, 0000, 0000},
  1344. {560, 1170, 1169, 1141, 1140, 1139, 1138, 1033, 1032, 1031, 1030, 1029, 1028, 1027, 1026, 0000, 0000, 0000, 0000},
  1345. {561, 1157, 1156, 1155, 1154, 1064, 1063, 1062, 1061, 1060, 1059, 1058, 1057, 1056, 1055, 0000, 0000, 0000, 0000},
  1346. {562, 1172, 1171, 1149, 1148, 1147, 1146, 1041, 1040, 1039, 1038, 1037, 1036, 1035, 1034, 0000, 0000, 0000, 0000},
  1347. {563, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1348. {564, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1349. {565, 1153, 1152, 1151, 1150, 1054, 1053, 1052, 1051, 1050, 1049, 1048, 1047, 1046, 1045, 0000, 0000, 0000, 0000},
  1350. {566, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1351. {567, 1189, 1188, 1187, 1186, 1133, 1132, 1131, 1130, 1129, 1102, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1352. {568, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1353. {569, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1354. {570, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1355. {571, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1356. {572, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1357. {573, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1358. {574, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1359. {575, 1177, 1176, 1175, 1174, 1099, 1044, 1043, 1042, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1360. {576, 1193, 1192, 1191, 1190, 1137, 1136, 1135, 1134, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1361. {577, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1362. {578, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1363. {579, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1364. {580, 1023, 1020, 1018, 1017, 1007, 1006, 1001, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1365. {581, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1366. {582, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1367. {583, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1368. {584, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1369. {585, 1145, 1144, 1143, 1142, 1020, 1019, 1018, 1013, 1006, 1001, 1023, 1003, 1007, 1017, 0000, 0000, 0000, 0000},
  1370. {586, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1371. {587, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1372. {588, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1373. {589, 1145, 1144, 1024, 1020, 1018, 1017, 1016, 1013, 1007, 1006, 1005, 1004, 1000, 0000, 0000, 0000, 0000, 0000},
  1374. {590, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1375. {591, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1376. {592, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1377. {593, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1378. {594, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1379. {595, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1380. {596, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1381. {597, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1382. {598, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1383. {599, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1384. {600, 1022, 1020, 1018, 1017, 1013, 1007, 1006, 1005, 1004, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1385. {601, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1386. {602, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1387. {603, 1145, 1144, 1143, 1142, 1024, 1023, 1020, 1019, 1018, 1017, 1007, 1006, 1001, 0000, 0000, 0000, 0000, 0000},
  1388. {604, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1389. {605, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1390. {606, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1391. {607, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1392. {608, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1393. {609, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1394. {610, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1395. {611, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000}
  1396. };
  1397. new const EVF::ComponentTypes[][] = {
  1398. "Spoiler",
  1399. "Hood",
  1400. "Roof",
  1401. "Sideskirt",
  1402. "Lamps",
  1403. "Nitro",
  1404. "Exhaust",
  1405. "Wheels",
  1406. "Stereo",
  1407. "Hydraulics",
  1408. "Front Bumper",
  1409. "Rear Bumber",
  1410. "Right Vent",
  1411. "Left Vent"
  1412. };
  1413. new const EVF::ComponentNames[][] = {
  1414. "Pro",
  1415. "Win",
  1416. "Drag",
  1417. "Alpha",
  1418. "Champ Scoop",
  1419. "Fury Scoop",
  1420. "Roof Scoop",
  1421. "Right Sideskirt",
  1422. "5x Nitro",
  1423. "2x Nitro",
  1424. "10x Nitro",
  1425. "Race Scoop",
  1426. "Worx Scoop",
  1427. "Round Fog",
  1428. "Champ",
  1429. "Race",
  1430. "Worx",
  1431. "Left Sideskirt",
  1432. "Upswept",
  1433. "Twin",
  1434. "Large",
  1435. "Medium",
  1436. "Small",
  1437. "Fury",
  1438. "Square Fog",
  1439. "Offroad",
  1440. "Right Alien Sideskirt",
  1441. "Left Alien Sideskirt",
  1442. "Alien",
  1443. "X-Flow",
  1444. "Left X-Flow Sideskirt",
  1445. "Right X-Flow Sideskirt",
  1446. "Alien Roof Vent",
  1447. "X-Flow Roof Vent",
  1448. "Alien",
  1449. "X-Flow Roof Vent",
  1450. "Right Alien Sideskirt",
  1451. "X-Flow",
  1452. "Alien Roof Vent",
  1453. "Left X-Flow Sideskirt",
  1454. "Left Alien Sideskirt",
  1455. "Right X-Flow Sideskirt",
  1456. "Right Chrome Sideskirt",
  1457. "Slamin",
  1458. "Chrome",
  1459. "X-Flow",
  1460. "Alien",
  1461. "Right Alien Sideskirt",
  1462. "Right X-Flow Sideskirt",
  1463. "Alien",
  1464. "X-Flow",
  1465. "Left Alien Sideskirt",
  1466. "Left X-Flow Sideskirt",
  1467. "X-Flow",
  1468. "Alien",
  1469. "Alien",
  1470. "Right Alien Sideskirt",
  1471. "Right X-Flow Sideskirt",
  1472. "Alien",
  1473. "X-Flow",
  1474. "X-Flow",
  1475. "X-Flow",
  1476. "Left Alien Sideskirt",
  1477. "Left X-Flow Sideskirt",
  1478. "Alien",
  1479. "Alien",
  1480. "X-Flow",
  1481. "Alien",
  1482. "X-Flow",
  1483. "Right Alien Sideskirt",
  1484. "Right X-Flow Sideskirt",
  1485. "Left Alien Sideskirt",
  1486. "Left X-Flow Sideskirt",
  1487. "Shadow",
  1488. "Mega",
  1489. "Rimshine",
  1490. "Wires",
  1491. "Classic",
  1492. "Twist",
  1493. "Cutter",
  1494. "Switch",
  1495. "Grove",
  1496. "Import",
  1497. "Dollar",
  1498. "Trance",
  1499. "Atomic",
  1500. "Stereo",
  1501. "Hydraulics",
  1502. "Alien",
  1503. "X-Flow",
  1504. "Right Alien Sideskirt",
  1505. "X-Flow",
  1506. "Alien",
  1507. "Right X-Flow Sideskirt",
  1508. "Left Alien Sideskirt",
  1509. "Right X-Flow Sideskirt",
  1510. "Ahab",
  1511. "Virtual",
  1512. "Access",
  1513. "Left Chrome Sideskirt",
  1514. "Chrome Grill",
  1515. "Left Chrome Flames Sideskirt",
  1516. "Left Chrome Strip Sideskirt",
  1517. "Covertible",
  1518. "Chrome",
  1519. "Slamin",
  1520. "Right Chrome Arches",
  1521. "Left Chrome Strip Sideskirt",
  1522. "Right Chrome Strip Sideskirt",
  1523. "Chrome",
  1524. "Slamin",
  1525. "Little Sign?",
  1526. "Little Sign?",
  1527. "Chrome",
  1528. "Slamin",
  1529. "Chrome",
  1530. "Slamin",
  1531. "Chrome",
  1532. "Right Chrome Trim Sideskirt",
  1533. "Right Wheelcovers Sideskirt",
  1534. "Left Chrome Trim Sideskirt",
  1535. "Left Wheelcovers Sideskirt",
  1536. "Right Chrome Flames Sideskirt",
  1537. "Bullbar Chrome Bars",
  1538. "Left Chrome Arches Sideskirt",
  1539. "Bullbar Chrome Lights",
  1540. "Chrome Exhaust",
  1541. "Slamin Exhaust",
  1542. "Vinyl Hardtop",
  1543. "Chrome",
  1544. "Hardtop",
  1545. "Softtop",
  1546. "Slamin",
  1547. "Right Chrome Strip Sideskirt",
  1548. "Right Chrome Strip Sideskirt",
  1549. "Slamin",
  1550. "Chrome",
  1551. "Left Chrome Strip Sideskirt",
  1552. "Alien",
  1553. "X-Flow",
  1554. "X-Flow",
  1555. "Alien",
  1556. "Left Oval Vents",
  1557. "Right Oval Vents",
  1558. "Left Square Vents",
  1559. "Right Square Vents",
  1560. "X-Flow",
  1561. "Alien",
  1562. "X-Flow",
  1563. "Alien",
  1564. "Alien",
  1565. "X-Flow",
  1566. "X-Flow",
  1567. "Alien",
  1568. "Alien",
  1569. "Alien",
  1570. "X-Flow",
  1571. "X-Flow",
  1572. "X-Flow",
  1573. "Alien",
  1574. "Alien",
  1575. "X-Flow",
  1576. "Alien",
  1577. "X-Flow",
  1578. "Alien",
  1579. "X-Flow",
  1580. "Alien",
  1581. "X-Flow",
  1582. "Alien",
  1583. "Alien",
  1584. "X-Flow",
  1585. "Alien",
  1586. "X-Flow",
  1587. "X-Flow",
  1588. "Chrome",
  1589. "Slamin",
  1590. "Chrome",
  1591. "Slamin",
  1592. "Slamin",
  1593. "Chrome",
  1594. "Chrome",
  1595. "Slamin",
  1596. "Chrome",
  1597. "Slamin",
  1598. "Chrome",
  1599. "Slamin",
  1600. "Slamin",
  1601. "Chrome",
  1602. "Slamin",
  1603. "Chrome",
  1604. "Slamin",
  1605. "Chrome",
  1606. "Chrome",
  1607. "Slamin"
  1608. };
  1609. #if defined _3D_Tryg
  1610. #define EVF_WeaponDamage Tryg3D_WeaponDamage
  1611. #else
  1612. new const Float:EVF::WeaponDamage[] = {
  1613. 1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,82.5,0.0,1.0,9.9,46.2,0.0,8.25,13.2,46.2,3.3,3.3,4.95,6.6,8.25,
  1614. 9.9,9.9,6.6,24.75,41.25,82.5,82.5,1.0,46.2,82.5,0.0,0.33,0.33,0.0,0.0,0.0,0.0,0.0,2.64,9.9,330.0,82.5,1.0,1.0,165.0
  1615. };
  1616. #endif
  1617. #if !defined EVF_VehicleName
  1618. new const EVF::VehicleName[MAX_VEHICLE_MODELS][] = {
  1619. "Landstalker", "Bravura", "Buffalo", "Linerunner", "Perrenial", "Sentinel", "Dumper", "Firetruck", "Trashmaster", "Stretch",
  1620. "Manana", "Infernus", "Voodoo", "Pony", "Mule", "Cheetah", "Ambulance", "Leviathan", "Moonbeam", "Esperanto", "Taxi",
  1621. "Washington", "Bobcat", "Mr Whoopee", "BF Injection", "Hunter", "Premier", "Enforcer", "Securicar", "Banshee", "Predator",
  1622. "Bus", "Rhino", "Barracks", "Hotknife", "Trailer 1", "Previon", "Coach", "Cabbie", "Stallion", "Rumpo", "RC Bandit", "Romero",
  1623. "Packer", "Monster", "Admiral", "Squalo", "Seasparrow", "Pizzaboy", "Tram", "Trailer 2", "Turismo", "Speeder", "Reefer", "Tropic",
  1624. "Flatbed", "Yankee", "Caddy", "Solair", "Berkley's RC Van", "Skimmer", "PCJ-600", "Faggio", "Freeway", "RC Baron", "RC Raider",
  1625. "Glendale", "Oceanic", "Sanchez", "Sparrow", "Patriot", "Quad", "Coastguard", "Dinghy", "Hermes", "Sabre", "Rustler", "ZR-350",
  1626. "Walton", "Regina", "Comet", "BMX", "Burrito", "Camper", "Marquis", "Baggage", "Dozer", "Maverick", "News Chopper", "Rancher",
  1627. "FBI Rancher", "Virgo", "Greenwood", "Jetmax", "Hotring", "Sandking", "Blista Compact", "Police Maverick", "Boxville", "Benson",
  1628. "Mesa", "RC Goblin", "Hotring Racer A", "Hotring Racer B", "Bloodring Banger", "Rancher", "Super GT", "Elegant", "Journey",
  1629. "Bike", "Mountain Bike", "Beagle", "Cropdust", "Stunt", "Tanker", "Roadtrain", "Nebula", "Majestic", "Buccaneer", "Shamal",
  1630. "Hydra", "FCR-900", "NRG-500", "HPV1000", "Cement Truck", "Tow Truck", "Fortune", "Cadrona", "FBI Truck", "Willard", "Forklift",
  1631. "Tractor", "Combine", "Feltzer", "Remington", "Slamvan", "Blade", "Freight", "Streak", "Vortex", "Vincent", "Bullet", "Clover",
  1632. "Sadler", "Firetruck LA", "Hustler", "Intruder", "Primo", "Cargobob", "Tampa", "Sunrise", "Merit", "Utility", "Nevada", "Yosemite",
  1633. "Windsor", "Monster A", "Monster B", "Uranus", "Jester", "Sultan", "Stratum", "Elegy", "Raindance", "RC Tiger", "Flash", "Tahoma",
  1634. "Savanna", "Bandito", "Freight Flat", "Streak Carriage", "Kart", "Mower", "Duneride", "Sweeper", "Broadway", "Tornado", "AT-400",
  1635. "DFT-30", "Huntley", "Stafford", "BF-400", "Newsvan", "Tug", "Trailer 3", "Emperor", "Wayfarer", "Euros", "Hotdog", "Club",
  1636. "Freight Carriage", "Trailer 3", "Andromada", "Dodo", "RC Cam", "Launch", "Police Car (LSPD)", "Police Car (SFPD)",
  1637. "Police Car (LVPD)", "Police Ranger", "Picador", "S.W.A.T. Tank", "Alpha", "Phoenix", "Glendale", "Sadler", "Luggage Trailer A",
  1638. "Luggage Trailer B", "Stair Trailer", "Boxville", "Farm Plow", "Utility Trailer"
  1639. };
  1640. #endif
  1641. #if (defined _FoX_Foreach)
  1642. #define EVF_Foreach(%0) FoxForeach(%0,Character)
  1643. #elseif (defined _FOREACH_LOCAL_VERSION)
  1644. #define EVF_Foreach(%0) foreach(new %0 : Character)
  1645. #else
  1646. #define EVF_Foreach(%0) for(new %0 = 0, p_%0 = GetPlayerPoolSize(); %0 <= p_%0; %0++) if(IsPlayerConnected(%0))
  1647. #endif
  1648. #if (defined _FOREACH_LOCAL_VERSION && defined Vehicle@YSII_Sg)
  1649. #define EVF_ForeachVehicle(%0) foreach(new %0 : Vehicle)
  1650. #elseif (defined _FOREACH_LOCAL_VERSION && defined Vehicles@YSII_Sg)
  1651. #define EVF_ForeachVehicle(%0) foreach(new %0 : Vehicles)
  1652. #else
  1653. #define EVF_ForeachVehicle(%0) for(new %0 = 1, %0_upp = GetVehiclePoolSize(); %0 <= %0_upp; %0++) if(IsValidVehicle(%0))
  1654. #endif
  1655. #define SetVehiclePropertyValue(%0,%1,%2) EVF_VehicleProperty[(%0)][(%1)] = (%2)
  1656. #define GetVehiclePropertyValue(%0,%1) EVF_VehicleProperty[(%0)][(%1)]
  1657. #define EVF_GetActiveCount() GetSVarInt("ADM:EVF:ACTIVE")
  1658. #define IsValidVehicleModelID(%0) (400 <= (%0) <= 611)
  1659. #define SetVehicleInterior(%0,%1) LinkVehicleToInterior(%0,%1)
  1660. #define IsValidVehicleDoor(%0,%1) (!((%1) > EVF::VehicleDoors[(GetVehicleModel(%0)-400)]))
  1661. #define RemoveVehiclePaintjob(%0) ChangeVehiclePaintjob((%0),RESET_PAINTJOB_ID)
  1662. #define RestoreVehicleHorn(%0) SetVehiclePropertyValue((%0),e_VEHICLE_HORN,0)
  1663. #define GetVehicleModelSeats(%0) EVF::VehicleSeats[((%0)-400)]
  1664. #define GetVehicleSeats(%0) GetVehicleModelSeats(GetVehicleModel(%0))
  1665. #define GetVehicleModelName(%0) EVF::VehicleName[((%0)-400)]
  1666. #define GetVehicleName(%0) GetVehicleModelName(GetVehicleModel(%0))
  1667. #define GetVehicleModelTopSpeed(%0) EVF::TopSpeed[((%0)-400)]
  1668. #define GetVehicleTopSpeed(%0) GetVehicleModelTopSpeed(GetVehicleModel(%0))
  1669. #define GetVehicleModelDoorAmount(%0) EVF::VehicleDoors[((%0)-400)]
  1670. #define GetVehicleDoorAmount(%0) GetVehicleModelDoorAmount(GetVehicleModel(%0))
  1671. #define SetVehicleSpeedCap(%0,%1) SetVehiclePropertyValue((%0),e_VEHICLE_SPEED_CAP,(_:%1))
  1672. #define GetVehicleSpeedCap(%0) Float:GetVehiclePropertyValue((%0),e_VEHICLE_SPEED_CAP)
  1673. #define DisableVehicleSpeedCap(%0) SetVehicleSpeedCap((%0),0)
  1674. #define SetVehicleHorn(%0,%1) SetVehiclePropertyValue((%0),e_VEHICLE_HORN,(%1))
  1675. #define GetVehicleHorn(%0) GetVehiclePropertyValue((%0),e_VEHICLE_HORN)
  1676. #define GetVehicleFuel(%0) GetVehiclePropertyValue((%0),e_VEHICLE_FUEL)
  1677. #define SetVehicleFuel(%0,%1) SetVehiclePropertyValue((%0),e_VEHICLE_FUEL,(%1))
  1678. #define IsVehicleFuelToggled(%0) GetVehiclePropertyValue((%0),e_VEHICLE_FUEL_USE)
  1679. #define ToggleVehicleFuel(%0,%1) SetVehiclePropertyValue((%0),e_VEHICLE_FUEL_USE,(_:%1))
  1680. #define IsVehicleSticky(%0) GetVehiclePropertyValue((%0),e_VEHICLE_STICKY)
  1681. #define ToggleVehicleSticky(%0,%1) SetVehiclePropertyValue((%0),e_VEHICLE_STICKY,(_:%1))
  1682. #define IsUnoccupiedDamageToggled(%0) GetVehiclePropertyValue((%0),e_VEHICLE_UNO_DAMAGE)
  1683. #define ToggleUnoccupiedVehicleDamage(%0,%1) SetVehiclePropertyValue((%0),e_VEHICLE_UNO_DAMAGE,(_:%1))
  1684. #define IsPetrolCapDestroyToggled(%0) GetVehiclePropertyValue((%0),e_VEHICLE_CAP_DAMAGE)
  1685. #define ToggleVehiclePetrolCapDestroy(%0,%1) SetVehiclePropertyValue((%0),e_VEHICLE_CAP_DAMAGE,(_:%1))
  1686. #define GetVehicleBomb(%0) GetVehiclePropertyValue((%0),e_VEHICLE_BOMB)
  1687. #define IsVehicleBombed(%0) (GetVehicleBomb(%0) > 0)
  1688. #define RemoveVehicleBomb(%0) SetVehicleBomb((%0),0)
  1689. #define IsToggledVehicleBulletproof(%0) GetVehiclePropertyValue((%0),e_VEHICLE_BULLETPROOF)
  1690. #define ToggleVehicleBulletproof(%0,%1) SetVehiclePropertyValue((%0),e_VEHICLE_BULLETPROOF,(_:%1))
  1691. #if defined EVF_Streamer
  1692. #define EVF_IsCarBlinking(%0) (EVF::BlinkSide[(%0)] != EVF_CAR_BLINK_NONE)
  1693. #define EVF_ToggleVehicleBlinking(%0) EVF::VehicleBlinking = (%0)
  1694. #define EVF_IsToggledVehicleBlinking() EVF::VehicleBlinking
  1695. #endif
  1696. //Keys
  1697. #define EVF_KeyPressed(%0) (((newkeys & (%0)) == (%0)) && ((oldkeys & (%0)) != (%0)))
  1698. #define EVF_KeyReleased(%0) (((newkeys & (%0)) != (%0)) && ((oldkeys & (%0)) == (%0)))
  1699. #define EVF_KeyHolding(%0) ((newkeys & (%0)) == (%0))
  1700. //extra names:
  1701. #define GetVehicleDoorAmountByModelid GetVehicleModelDoorAmount
  1702. #define ResetVehiclePaintjob RemoveVehiclePaintjob
  1703. #define GetVehicleDriverID GetVehicleDriver
  1704. #define SetVehicleColor ChangeVehicleColor
  1705. #define MAX_VEHICLE_MODEL MAX_VEHICLE_MODELS
  1706. #define OnPlayerShootVehicle OnPlayerShotVehicle
  1707. forward OnVehicleCreated(vehicleid);
  1708. forward OnVehicleDestroyed(vehicleid);
  1709. forward OnTrailerHooked(playerid,vehicleid,trailerid);
  1710. forward OnTrailerUnhooked(playerid,vehicleid,trailerid);
  1711. forward OnVehicleBombDeactivate(vehicleid);
  1712. forward OnVehicleBombExplode(vehicleid);
  1713. forward OnPlayerShotVehicle(playerid,vehicleid,weaponid,Float:amount,bodypart);
  1714. forward OnPlayerEditVehicle(playerid,vehicleid,response,Float:fX,Float:fY,Float:fZ,Float:fRotZ);
  1715. forward OnPlayerEditVehicleObject(playerid,vehicleid,response,Float:x,Float:y,Float:z,Float:rx,Float:ry,Float:rz);
  1716. forward OnPlayerReachSpeedCapLimit(playerid,vehicleid,Float:speed);
  1717. forward OnVehicleBombActivate(vehicleid);
  1718. forward OnVehicleModEx(playerid,vehicleid,componentid,price,illegal);
  1719. forward OnVehicleFuelChange(vehicleid,newfuel,oldfuel);
  1720. #if defined OnVehiclePosChange
  1721. forward OnVehiclePosChange(vehicleid,Float:newx,Float:newy,Float:newz,Float:newangle,Float:oldx,Float:oldy,Float:oldz,Float:oldangle);
  1722. #endif
  1723. #if defined OnVehicleVelocityChange
  1724. forward OnVehicleVelocityChange(vehicleid,Float:newx,Float:newy,Float:newz,Float:oldx,Float:oldy,Float:oldz);
  1725. #endif
  1726. #if defined OnVehicleHealthChange
  1727. forward OnVehicleHealthChange(vehicleid,Float:newhealth,Float:oldhealth);
  1728. #endif
  1729. EVF::Function:: ResetVehicleProperties(vehicleid){
  1730. EVF::VehicleTrailerID[vehicleid] = INVALID_VEHICLE_ID;
  1731. for(new i = 0; i < _:(EVF::VehicleProperties); i++){
  1732. EVF::VehicleProperty[vehicleid][EVF::VehicleProperties:i] = 0;
  1733. }
  1734. }
  1735. EVF::Function:: GetComponentName(componentid,name[],len = sizeof(name)){
  1736. if(MIN_VEHICLE_COMPONENT_ID <= componentid <= MAX_VEHICLE_COMPONENT_ID){
  1737. componentid -= MIN_VEHICLE_COMPONENT_ID;
  1738. format(name,len,"%s",EVF::ComponentNames[componentid]);
  1739. return 1;
  1740. }
  1741. name[0] = '\0';
  1742. return 0;
  1743. }
  1744. EVF::Function:: GetComponentTypeName(component){
  1745. new slotid = GetVehicleComponentType(component), EVF::name[32];
  1746. if(slotid >= 0 && slotid <= 13){
  1747. format(EVF::name,sizeof(EVF::name),"%s",EVF::ComponentTypes[slotid]);
  1748. }
  1749. return EVF::name;
  1750. }
  1751. EVF::Function:: EVF::IsPlayerInModShop(playerid){
  1752. if(IsPlayerConnected(playerid)) return EVF::ModShopStatus[playerid];
  1753. return 0;
  1754. }
  1755. EVF::Function:: EVF::IsTrailer(vehicleid){
  1756. switch(GetVehicleModel(vehicleid)){
  1757. case 435, 450, 584, 591, 606: return 1;
  1758. }
  1759. return 0;
  1760. }
  1761. #if defined EVF_Streamer
  1762. EVF::Function:: EVF::DisableCarBlinking(vehicleid){
  1763. if(!IsValidVehicle(vehicleid)) return 0;
  1764. if(!EVF::IsCarBlinking(vehicleid)) return 0;
  1765. if(IsValidDynamicObject(EVF::Blink[vehicleid][0])) DestroyDynamicObject(EVF::Blink[vehicleid][0]);
  1766. if(IsValidDynamicObject(EVF::Blink[vehicleid][1])) DestroyDynamicObject(EVF::Blink[vehicleid][1]);
  1767. if(IsValidDynamicObject(EVF::Blink[vehicleid][2])) DestroyDynamicObject(EVF::Blink[vehicleid][2]);
  1768. if(IsValidDynamicObject(EVF::Blink[vehicleid][3])) DestroyDynamicObject(EVF::Blink[vehicleid][3]);
  1769. EVF::Blink[vehicleid][0] = EVF::Blink[vehicleid][1] = STREAMER_TAG_OBJECT INVALID_STREAMER_ID;
  1770. EVF::Blink[vehicleid][2] = EVF::Blink[vehicleid][3] = STREAMER_TAG_OBJECT INVALID_STREAMER_ID;
  1771. EVF::BlinkSide[vehicleid] = EVF_CAR_BLINK_NONE;
  1772. return 1;
  1773. }
  1774. EVF::Function:: EVF::SetCarBlinking(vehicleid,side,bool:skip=false){
  1775. if(!IsValidVehicle(vehicleid)) return 0;
  1776. if(EVF::IsCarBlinking(vehicleid) && !skip) return EVF::DisableCarBlinking(vehicleid);
  1777. new id = GetVehicleModel(vehicleid)-400, trailerid, STREAMER_TAG_OBJECT obj[4];
  1778. if(!skip) EVF::BlinkSide[vehicleid] = side;
  1779. GetVehicleZAngle(vehicleid,EVF::BlinkR[vehicleid]);
  1780. if(id > -1){
  1781. if(EVF::BlinkOffsetData[id][EVF::X] != 0.0){
  1782. switch(side){
  1783. case EVF_CAR_BLINK_LEFT: {
  1784. obj[0] = CreateDynamicObject(19294,0.0,0.0,-9000.0,0.0,0.0,0.0);
  1785. EVF::Blink[vehicleid][0] = obj[0];
  1786. }
  1787. case EVF_CAR_BLINK_RIGHT: {
  1788. obj[2] = CreateDynamicObject(19294,0.0,0.0,0.0,0.0,0.0,0.0);
  1789. EVF::Blink[vehicleid][2] = obj[2];
  1790. }
  1791. }
  1792. }
  1793. if((trailerid = GetVehicleTrailer(vehicleid)) != 0){
  1794. if(EVF::IsTrailer(trailerid)){
  1795. switch(side){
  1796. case EVF_CAR_BLINK_LEFT: {
  1797. obj[1] = CreateDynamicObject(19294,0.0,0.0,-9000.0,0.0,0.0,0.0);
  1798. EVF::Blink[vehicleid][1] = obj[1];
  1799. }
  1800. case EVF_CAR_BLINK_RIGHT: {
  1801. obj[3] = CreateDynamicObject(19294,0.0,0.0,0.0,0.0,0.0,0.0);
  1802. EVF::Blink[vehicleid][3] = obj[3];
  1803. }
  1804. }
  1805. }
  1806. } else {
  1807. if(EVF::BlinkOffsetData[id][EVF::rX] != 0.0){
  1808. switch(side){
  1809. case EVF_CAR_BLINK_LEFT: {
  1810. obj[1] = CreateDynamicObject(19294,0.0,0.0,0.0,0.0,0.0,0.0);
  1811. EVF::Blink[vehicleid][1] = obj[1];
  1812. }
  1813. case EVF_CAR_BLINK_RIGHT: {
  1814. obj[3] = CreateDynamicObject(19294,0.0,0.0,0.0,0.0,0.0,0.0);
  1815. EVF::Blink[vehicleid][3] = obj[3];
  1816. }
  1817. }
  1818. }
  1819. }
  1820. switch(side){
  1821. case EVF_CAR_BLINK_LEFT: {
  1822. if(obj[0] != STREAMER_TAG_OBJECT INVALID_STREAMER_ID){
  1823. AttachDynamicObjectToVehicle(obj[0],vehicleid,EVF::BlinkOffsetData[id][EVF::X],EVF::BlinkOffsetData[id][EVF::Y],EVF::BlinkOffsetData[id][EVF::Z],0.0,0.0,0.0);
  1824. }
  1825. if(trailerid != 0){
  1826. id = GetVehicleModel(trailerid)-400;
  1827. AttachDynamicObjectToVehicle(obj[1],trailerid,EVF::BlinkOffsetData[id][EVF::rX],EVF::BlinkOffsetData[id][EVF::rY],EVF::BlinkOffsetData[id][EVF::rZ],0.0,0.0,0.0);
  1828. } else {
  1829. if(obj[1] != STREAMER_TAG_OBJECT INVALID_STREAMER_ID){
  1830. AttachDynamicObjectToVehicle(obj[1],vehicleid,EVF::BlinkOffsetData[id][EVF::rX],EVF::BlinkOffsetData[id][EVF::rY],EVF::BlinkOffsetData[id][EVF::rZ],0.0,0.0,0.0);
  1831. }
  1832. }
  1833. }
  1834. case EVF_CAR_BLINK_RIGHT: {
  1835. if(obj[2] != STREAMER_TAG_OBJECT INVALID_STREAMER_ID){
  1836. AttachDynamicObjectToVehicle(obj[2],vehicleid,-EVF::BlinkOffsetData[id][EVF::X],EVF::BlinkOffsetData[id][EVF::Y],EVF::BlinkOffsetData[id][EVF::Z],0.0,0.0,0.0);
  1837. }
  1838. if(trailerid != 0){
  1839. id = GetVehicleModel(trailerid)-400;
  1840. AttachDynamicObjectToVehicle(obj[3],trailerid,-EVF::BlinkOffsetData[id][EVF::rX],EVF::BlinkOffsetData[id][EVF::rY],EVF::BlinkOffsetData[id][EVF::rZ],0.0,0.0,0.0);
  1841. } else {
  1842. if(obj[3] != STREAMER_TAG_OBJECT INVALID_STREAMER_ID){
  1843. AttachDynamicObjectToVehicle(obj[3],vehicleid,-EVF::BlinkOffsetData[id][EVF::rX],EVF::BlinkOffsetData[id][EVF::rY],EVF::BlinkOffsetData[id][EVF::rZ],0.0,0.0,0.0);
  1844. }
  1845. }
  1846. }
  1847. case EVF_CAR_BLINK_EMERGENCY: {
  1848. EVF::SetCarBlinking(vehicleid,EVF_CAR_BLINK_LEFT,true);
  1849. EVF::SetCarBlinking(vehicleid,EVF_CAR_BLINK_RIGHT,true);
  1850. }
  1851. }
  1852. }
  1853. return 1;
  1854. }
  1855. #endif
  1856. EVF::Function:: IsValidComponentForVehicle(vehicleid,componentid){
  1857. new modelid = GetVehicleModel(vehicleid);
  1858. // Check for nitrous, wheels, and hydraulics.
  1859. if((1008 <= componentid <= 1010) || (componentid == 1025) || (1073 <= componentid <= 1087) || (1096 <= componentid <= 1098)){
  1860. switch (modelid){
  1861. case 581, 523, 462, 521, 463, 522, 461, 448, 468, 586,
  1862. 509, 481, 510, 472, 473, 493, 595, 484, 430, 453,
  1863. 452, 446, 454, 590, 569, 537, 538, 570, 449: return false;
  1864. default: return true;
  1865. }
  1866. } else {
  1867. modelid -= 400;
  1868. for(new i = 0; i < sizeof(EVF::ValidComponent[]); i++){
  1869. if(EVF::ValidComponent[modelid][i] == componentid) return true;
  1870. }
  1871. }
  1872. return false;
  1873. }
  1874. EVF::Function:: GetVehicleComponentPrice(componentid){
  1875. for(new i = 0; i < sizeof(EVF::ComponentPrice); i++){
  1876. if(EVF::ComponentPrice[i][0] == componentid){
  1877. return EVF::ComponentPrice[i][1];
  1878. }
  1879. }
  1880. return 0;
  1881. }
  1882. #if defined EVF_Streamer
  1883. EVF::Function:: SetVehicleNeonLights(vehicleid,bool:enable = true,color = RED_NEON){
  1884. if(!IsValidVehicle(vehicleid)) return 0;
  1885. new modelid = GetVehicleModel(vehicleid);
  1886. if(!IsValidVehicleModelID(modelid)) return 0;
  1887. modelid -= 400;
  1888. if(IsValidDynamicObject(EVF::VehicleNeon[vehicleid][0])) DestroyDynamicObject(EVF::VehicleNeon[vehicleid][0]);
  1889. if(IsValidDynamicObject(EVF::VehicleNeon[vehicleid][1])) DestroyDynamicObject(EVF::VehicleNeon[vehicleid][1]);
  1890. EVF::VehicleNeon[vehicleid][0] = EVF::VehicleNeon[vehicleid][1] = STREAMER_TAG_OBJECT INVALID_STREAMER_ID;
  1891. if(!enable) return 1;
  1892. if(18647 <= color <= 18652){
  1893. EVF::VehicleNeon[vehicleid][0] = CreateDynamicObject(color,0.0,0.0,0.0,0.0,0.0,0.0);
  1894. EVF::VehicleNeon[vehicleid][1] = CreateDynamicObject(color,0.0,0.0,0.0,0.0,0.0,0.0);
  1895. AttachDynamicObjectToVehicle(EVF::VehicleNeon[vehicleid][0],vehicleid,EVF::NeonOffsetData[modelid][EVF::NeonX], EVF::NeonOffsetData[modelid][EVF::NeonY],EVF::NeonOffsetData[modelid][EVF::NeonZ],0.0,0.0,0.0);
  1896. AttachDynamicObjectToVehicle(EVF::VehicleNeon[vehicleid][1],vehicleid,-EVF::NeonOffsetData[modelid][EVF::NeonX], EVF::NeonOffsetData[modelid][EVF::NeonY],EVF::NeonOffsetData[modelid][EVF::NeonZ],0.0,0.0,0.0);
  1897. return 1;
  1898. }
  1899. return 0;
  1900. }
  1901. EVF::Function:: VehicleSupportsNeonLights(modelid){
  1902. if(!IsValidVehicleModelID(modelid)) return 0;
  1903. modelid -= 400;
  1904. return !(EVF::NeonOffsetData[modelid][EVF::NeonX] == 0.0 && EVF::NeonOffsetData[modelid][EVF::NeonY] == 0.0 && EVF::NeonOffsetData[modelid][EVF::NeonZ] == 0.0);
  1905. }
  1906. EVF::Function:: GetVehicleNeonLightsState(vehicleid){
  1907. if(!IsValidVehicle(vehicleid)) return 0;
  1908. return (IsValidDynamicObject(EVF::VehicleNeon[vehicleid][0]) && IsValidDynamicObject(EVF::VehicleNeon[vehicleid][1]));
  1909. }
  1910. #endif
  1911. //Detect YSF.inc
  1912. #if !defined _YSF_included
  1913. #define GetVehicleInterior(%0) GetVehiclePropertyValue((%0),e_VEHICLE_INTERIOR)
  1914. #define GetVehiclePaintjob(%0) GetVehiclePropertyValue((%0),e_VEHICLE_PAINTJOB)
  1915. EVF::Function:: GetVehicleColor(vehicleid,&color1,&color2){
  1916. if(IsValidVehicle(vehicleid)){
  1917. color1 = GetVehiclePropertyValue(vehicleid,e_VEHICLE_COLOR_1);
  1918. color2 = GetVehiclePropertyValue(vehicleid,e_VEHICLE_COLOR_2);
  1919. return 1;
  1920. }
  1921. return 0;
  1922. }
  1923. EVF::Function:: bool:IsVehicleOccupied(vehicleid){
  1924. EVF::Foreach(i){
  1925. if(IsPlayerInVehicle(i,vehicleid)){
  1926. return true;
  1927. }
  1928. }
  1929. return false;
  1930. }
  1931. #endif
  1932. #define EVF_GetVehicleInterior(%0) GetVehiclePropertyValue((%0),e_VEHICLE_INTERIOR)
  1933. #define EVF_GetVehiclePaintjob(%0) GetVehiclePropertyValue((%0),e_VEHICLE_PAINTJOB)
  1934. EVF::Function:: EVF::GetVehicleColor(vehicleid,&color1,&color2){
  1935. if(IsValidVehicle(vehicleid)){
  1936. color1 = GetVehiclePropertyValue(vehicleid,e_VEHICLE_COLOR_1);
  1937. color2 = GetVehiclePropertyValue(vehicleid,e_VEHICLE_COLOR_2);
  1938. return 1;
  1939. }
  1940. return 0;
  1941. }
  1942. EVF::Function:: bool:EVF::IsVehicleOccupied(vehicleid){
  1943. EVF::Foreach(i){
  1944. if(IsPlayerInVehicle(i,vehicleid)){
  1945. return true;
  1946. }
  1947. }
  1948. return false;
  1949. }
  1950. EVF::Function:: EVF::GetVehicleSpawnInfo(vehicleid,&Float:x,&Float:y,&Float:z,&Float:rotation,&worldid,&interiorid){
  1951. x = Float:GetVehiclePropertyValue(vehicleid,e_VEHICLE_SPAWN_X);
  1952. y = Float:GetVehiclePropertyValue(vehicleid,e_VEHICLE_SPAWN_Y);
  1953. z = Float:GetVehiclePropertyValue(vehicleid,e_VEHICLE_SPAWN_Z);
  1954. rotation = Float:GetVehiclePropertyValue(vehicleid,e_VEHICLE_SPAWN_A);
  1955. worldid = GetVehiclePropertyValue(vehicleid,e_VEHICLE_SPAWN_VW);
  1956. interiorid = GetVehiclePropertyValue(vehicleid,e_VEHICLE_SPAWN_INT);
  1957. return true;
  1958. }
  1959. EVF::Function:: EVF::SetVehicleSpawnInfo(vehicleid,Float:x,Float:y,Float:z,Float:rotation,worldid,interiorid){
  1960. SetVehiclePropertyValue(vehicleid,e_VEHICLE_SPAWN_X,_:x);
  1961. SetVehiclePropertyValue(vehicleid,e_VEHICLE_SPAWN_Y,_:y);
  1962. SetVehiclePropertyValue(vehicleid,e_VEHICLE_SPAWN_Z,_:z);
  1963. SetVehiclePropertyValue(vehicleid,e_VEHICLE_SPAWN_A,_:rotation);
  1964. SetVehiclePropertyValue(vehicleid,e_VEHICLE_SPAWN_VW,worldid);
  1965. SetVehiclePropertyValue(vehicleid,e_VEHICLE_SPAWN_INT,interiorid);
  1966. }
  1967. EVF::Function:: SetVehicleBomb(vehicleid,time = 1000){
  1968. if(IsVehicleBombed(vehicleid)){
  1969. SetVehicleParams(vehicleid,VEHICLE_TYPE_ALARM,0);
  1970. if(GetVehiclePropertyValue(vehicleid,e_VEHICLE_BOMB_TIMER) != -1){
  1971. KillTimer(GetVehiclePropertyValue(vehicleid,e_VEHICLE_BOMB_TIMER));
  1972. SetVehiclePropertyValue(vehicleid,e_VEHICLE_BOMB_TIMER,-1);
  1973. }
  1974. }
  1975. return SetVehiclePropertyValue(vehicleid,e_VEHICLE_BOMB,time);
  1976. }
  1977. EVF::Function:: IsVehicleBombActivated(vehicleid){
  1978. if(IsVehicleBombed(vehicleid)){
  1979. if(GetVehiclePropertyValue(vehicleid,e_VEHICLE_BOMB_TIMER) != -1){
  1980. return 1;
  1981. }
  1982. }
  1983. return 0;
  1984. }
  1985. EVF::Function:: EVF::UpdateVehicleDamage(vehicleid,type){
  1986. new panels, doors, lights, tires;
  1987. GetVehicleDamageStatus(vehicleid,panels,doors,lights,tires);
  1988. switch(type){
  1989. case VEHICLE_DAMAGE_PANELS: panels = 0x03331111;
  1990. case VEHICLE_DAMAGE_DOORS: doors = 0x04040404;
  1991. case VEHICLE_DAMAGE_LIGHTS: lights = 0x0000000F;
  1992. }
  1993. UpdateVehicleDamageStatus(vehicleid,panels,doors,lights,tires);
  1994. return 1;
  1995. }
  1996. EVF::Function:: EVF::UpdateVehicleDamageStatus(vehicleid,type,update){
  1997. new panels, doors, lights, tires;
  1998. GetVehicleDamageStatus(vehicleid,panels,doors,lights,tires);
  1999. switch(type){
  2000. case VEHICLE_DAMAGE_PANELS: return UpdateVehicleDamageStatus(vehicleid,update,doors,lights,tires);
  2001. case VEHICLE_DAMAGE_DOORS: return UpdateVehicleDamageStatus(vehicleid,panels,update,lights,tires);
  2002. case VEHICLE_DAMAGE_LIGHTS: return UpdateVehicleDamageStatus(vehicleid,panels,doors,update,tires);
  2003. case VEHICLE_DAMAGE_TIRES: return UpdateVehicleDamageStatus(vehicleid,panels,doors,lights,update);
  2004. }
  2005. return false;
  2006. }
  2007. EVF::Function:: EVF::GetVehicleDamageStatus(vehicleid,type){
  2008. new panels,doors,lights,tires;
  2009. GetVehicleDamageStatus(vehicleid,panels,doors,lights,tires);
  2010. switch(type){
  2011. case VEHICLE_DAMAGE_PANELS: return panels;
  2012. case VEHICLE_DAMAGE_DOORS: return doors;
  2013. case VEHICLE_DAMAGE_LIGHTS: return lights;
  2014. case VEHICLE_DAMAGE_TIRES: return tires;
  2015. }
  2016. return -1;
  2017. }
  2018. EVF::Function:: Float:EVF::GetVehicleSpeed(vehicleid){
  2019. new Float:x,Float:y,Float:z;
  2020. GetVehicleVelocity(vehicleid,x,y,z);
  2021. return floatmul(VectorSize(x,y,z),VEHICLE_SPEED_MULTIPLIER);
  2022. }
  2023. EVF::Function:: GetVehicleRandomColors(modelid,&color1,&color2){
  2024. if(!IsValidVehicleModelID(modelid)) return 0;
  2025. new index = 0;
  2026. color1 = color2 = 0;
  2027. modelid -= 400;
  2028. if(!EVF::CarColors[modelid][0]) return 0;
  2029. if(EVF::CarColors[modelid][0] == 2){
  2030. color1 = EVF::CarColors[modelid][1];
  2031. color2 = EVF::CarColors[modelid][2];
  2032. } else {
  2033. index = random(EVF::CarColors[modelid][0]) & -2;
  2034. color1 = EVF::CarColors[modelid][++index];
  2035. color2 = EVF::CarColors[modelid][++index];
  2036. }
  2037. return 1;
  2038. }
  2039. EVF::Function:: GetVehicleParams(vehicleid,EVF::ParamTypes:type){
  2040. new EVF::params[MAX_VEHICLE_PARAMS];
  2041. GetVehicleParamsEx(vehicleid,EVF::params[0],EVF::params[1],EVF::params[2],EVF::params[3],EVF::params[4],EVF::params[5],EVF::params[6]);
  2042. return (!(EVF::params[_:type] <= 0));
  2043. }
  2044. EVF::Function:: SetVehicleParams(vehicleid,EVF::ParamTypes:type,status,delay = 0){
  2045. new EVF::params[MAX_VEHICLE_PARAMS];
  2046. if(GetVehicleParamsEx(vehicleid,EVF::params[0],EVF::params[1],EVF::params[2],EVF::params[3],EVF::params[4],EVF::params[5],EVF::params[6])){
  2047. EVF::params[_:type] = status;
  2048. if(delay > 0){
  2049. SetTimerEx("EVF::SetVehicleParamsEx",delay,false,"iiiiiiii",vehicleid,EVF::params[0],EVF::params[1],EVF::params[2],EVF::params[3],EVF::params[4],EVF::params[5],EVF::params[6]);
  2050. } else {
  2051. SetVehicleParamsEx(vehicleid,EVF::params[0],EVF::params[1],EVF::params[2],EVF::params[3],EVF::params[4],EVF::params[5],EVF::params[6]);
  2052. }
  2053. return 1;
  2054. }
  2055. return 0;
  2056. }
  2057. EVF::Function:: ToggleVehicleDamageUpdate(vehicleid,type,toggle){
  2058. if(!toggle){
  2059. if(GetVehicleParams(vehicleid,VEHICLE_TYPE_ENGINE)){
  2060. SetVehicleParams(vehicleid,VEHICLE_TYPE_ENGINE,0);
  2061. }
  2062. }
  2063. switch(type){
  2064. case VEHICLE_DAMAGE_PANELS: return SetVehiclePropertyValue(vehicleid,e_VEHICLE_DAMAGE_PANELS,_:toggle);
  2065. case VEHICLE_DAMAGE_DOORS: return SetVehiclePropertyValue(vehicleid,e_VEHICLE_DAMAGE_DOORS,_:toggle);
  2066. case VEHICLE_DAMAGE_LIGHTS: return SetVehiclePropertyValue(vehicleid,e_VEHICLE_DAMAGE_LIGHTS,_:toggle);
  2067. case VEHICLE_DAMAGE_TIRES: return SetVehiclePropertyValue(vehicleid,e_VEHICLE_DAMAGE_TIRES,_:toggle);
  2068. }
  2069. return 0;
  2070. }
  2071. EVF::Function:: IsVehicleDamageToggled(vehicleid,type){
  2072. switch(type){
  2073. case VEHICLE_DAMAGE_PANELS: return GetVehiclePropertyValue(vehicleid,e_VEHICLE_DAMAGE_PANELS);
  2074. case VEHICLE_DAMAGE_DOORS: return GetVehiclePropertyValue(vehicleid,e_VEHICLE_DAMAGE_DOORS);
  2075. case VEHICLE_DAMAGE_LIGHTS: return GetVehiclePropertyValue(vehicleid,e_VEHICLE_DAMAGE_LIGHTS);
  2076. case VEHICLE_DAMAGE_TIRES: return GetVehiclePropertyValue(vehicleid,e_VEHICLE_DAMAGE_TIRES);
  2077. }
  2078. return 0;
  2079. }
  2080. EVF::Function:: GetNearestVehicleToPos(Float:x,Float:y,Float:z,worldid=-1,interiorid=-1,Float:maxdist=0.0,bool:fast=true,except_vid=0){
  2081. new Float:distance = -1.0, foundvid = INVALID_VEHICLE_ID, Float:px, Float:py, Float:pz, Float:tmpdistance;
  2082. EVF::ForeachVehicle(vehicleid){
  2083. if(except_vid == vehicleid) continue;
  2084. if(GetVehicleModel(vehicleid) == 590) continue;
  2085. if(worldid != -1 && GetVehicleVirtualWorld(vehicleid) != worldid) continue;
  2086. if(interiorid != -1 && GetVehicleInterior(vehicleid) != interiorid) continue;
  2087. GetVehiclePos(vehicleid,px,py,pz);
  2088. tmpdistance = GetDistanceBetweenPoints3D(x,y,z,px,py,pz);
  2089. if(maxdist > 0.0 && tmpdistance > maxdist) continue;
  2090. if(fast && (distance == -1.0 || tmpdistance < distance) && (maxdist == 0.0 || (tmpdistance < maxdist))) return vehicleid;
  2091. if(distance == -1.0 || tmpdistance < distance){
  2092. distance = tmpdistance;
  2093. foundvid = vehicleid;
  2094. }
  2095. }
  2096. return foundvid;
  2097. }
  2098. EVF::Function:: GetNearestVehicleToPlayer(playerid,Float:maxdist=0.0,bool:fast=false){
  2099. new Float:x,Float:y,Float:z;
  2100. GetPlayerPos(playerid,x,y,z);
  2101. return GetNearestVehicleToPos(x,y,z,GetPlayerVirtualWorld(playerid),GetPlayerInterior(playerid),maxdist,fast);
  2102. }
  2103. EVF::Function:: GetVehicleDriver(vehicleid){
  2104. EVF::Foreach(i){
  2105. if(GetPlayerState(i) == PLAYER_STATE_DRIVER && IsPlayerInVehicle(i,vehicleid)){
  2106. return i;
  2107. }
  2108. }
  2109. return INVALID_PLAYER_ID;
  2110. }
  2111. EVF::Function:: IsVehicleSeatOccupied(vehicleid,seatid){
  2112. if(!GetVehicleModel(vehicleid)) return 0;
  2113. EVF::Foreach(i){
  2114. if(IsPlayerInVehicle(i,vehicleid) && GetPlayerVehicleSeat(i) == seatid){
  2115. return 1;
  2116. }
  2117. }
  2118. return 0;
  2119. }
  2120. EVF::Function:: GetVehicleNextSeat(vehicleid,passenger = 1){
  2121. new seats = GetVehicleSeats(vehicleid);
  2122. if(seats > 1){
  2123. for(new i = passenger; i < seats; i++){
  2124. if(!IsVehicleSeatOccupied(vehicleid,i)){
  2125. return i;
  2126. }
  2127. }
  2128. }
  2129. return INVALID_SEAT_ID;
  2130. }
  2131. #if defined EVF_Streamer
  2132. EVF::Function:: STREAMER_TAG_OBJECT GetVehicleSlotAttachedObject(vehicleid,slot){
  2133. if(!IsValidDynamicObject(EVF::VehicleTempData[vehicleid][e_attached_object][slot])) return STREAMER_TAG_OBJECT INVALID_STREAMER_ID;
  2134. return EVF::VehicleTempData[vehicleid][e_attached_object][slot];
  2135. }
  2136. EVF::Function:: IsObjectAttachedToVehicle(STREAMER_TAG_OBJECT objectid,vehicleid){
  2137. for(new i = 0; i < MAX_VEHICLE_ATTACHED_OBJECTS; i++){
  2138. if(IsValidDynamicObject(EVF::VehicleTempData[vehicleid][e_attached_object][i])){
  2139. if(EVF::VehicleTempData[vehicleid][e_attached_object][i] == objectid) return 1;
  2140. }
  2141. }
  2142. return 0;
  2143. }
  2144. EVF::Function:: EditVehicle(playerid,vehicleid){
  2145. if(IsValidDynamicObject(STREAMER_TAG_OBJECT GetVehiclePropertyValue(vehicleid,e_VEHICLE_EDITOR))) return false;
  2146. new Float:pos[3];
  2147. GetVehiclePos(vehicleid,pos[0],pos[1],pos[2]);
  2148. SetVehiclePropertyValue(vehicleid,e_VEHICLE_EDITOR,_:CreateDynamicObject(19300,pos[0],pos[1],pos[2],0.0,0.0,0.0));
  2149. EditDynamicObject(playerid,STREAMER_TAG_OBJECT GetVehiclePropertyValue(vehicleid,e_VEHICLE_EDITOR));
  2150. EVF::PlayerTempData[playerid][e_editor_vehicle] = vehicleid;
  2151. EVF::PlayerTempData[playerid][e_editor_object] = STREAMER_TAG_OBJECT INVALID_STREAMER_ID;
  2152. return true;
  2153. }
  2154. EVF::Function:: EditVehicleObject(playerid,vehicleid,STREAMER_TAG_OBJECT objectid){
  2155. if(IsValidDynamicObject(STREAMER_TAG_OBJECT GetVehiclePropertyValue(vehicleid,e_VEHICLE_EDITOR))) return false;
  2156. if(!IsValidDynamicObject(objectid)) return false;
  2157. SetVehiclePropertyValue(vehicleid,e_VEHICLE_EDITOR,_:objectid);
  2158. new Float:pos[3];
  2159. GetVehiclePos(vehicleid,pos[0],pos[1],pos[2]);
  2160. new Float:angle;
  2161. GetVehicleZAngle(vehicleid,angle);
  2162. new model = Streamer_GetIntData(STREAMER_TYPE_OBJECT,objectid,E_STREAMER_MODEL_ID);
  2163. DestroyDynamicObject(objectid);
  2164. SetVehiclePropertyValue(vehicleid,e_VEHICLE_EDITOR,_:CreateDynamicObject(model,pos[0],pos[1],pos[2],angle,0.0,0.0));
  2165. EditDynamicObject(playerid,STREAMER_TAG_OBJECT GetVehiclePropertyValue(vehicleid,e_VEHICLE_EDITOR));
  2166. SetVehicleZAngle(vehicleid,0.0);
  2167. EVF::PlayerTempData[playerid][e_editor_vehicle] = vehicleid;
  2168. EVF::PlayerTempData[playerid][e_editor_object] = objectid;
  2169. return true;
  2170. }
  2171. #endif
  2172. EVF::Function:: TeleportVehicle(vehicleid,Float:x,Float:y,Float:z,Float:angle,worldid = -1,interiorid = -1){
  2173. EVF::Foreach(i){
  2174. if(GetPlayerVehicleID(i) == vehicleid){
  2175. if(worldid != -1){
  2176. SetPlayerVirtualWorld(i,worldid);
  2177. } else {
  2178. SetPlayerVirtualWorld(i,GetVehicleVirtualWorld(vehicleid));
  2179. }
  2180. if(interiorid != -1){
  2181. SetPlayerInterior(i,interiorid);
  2182. } else {
  2183. SetPlayerInterior(i,GetVehicleInterior(vehicleid));
  2184. }
  2185. }
  2186. }
  2187. if(worldid != -1) SetVehicleVirtualWorld(vehicleid,worldid);
  2188. if(interiorid != -1) SetVehicleInterior(vehicleid,interiorid);
  2189. SetVehiclePos(vehicleid,x,y,z);
  2190. SetVehicleZAngle(vehicleid,angle);
  2191. return 1;
  2192. }
  2193. EVF::Function:: GetVehiclePanels(vehicleid,&front_left,&front_right,&rear_left,&rear_right,&windshield,&front_bumper,&rear_bumper){
  2194. new panels,doors,lights,tires;
  2195. GetVehicleDamageStatus(vehicleid,panels,doors,lights,tires);
  2196. front_left = (panels & 0xF);
  2197. front_right = (panels >> 4) & 0xF;
  2198. rear_left = (panels >> 8) & 0xF;
  2199. rear_right = (panels >> 12) & 0xF;
  2200. windshield = (panels >> 16) & 0xF;
  2201. front_bumper = (panels >> 20) & 0xF;
  2202. rear_bumper = (panels >> 24) & 0xF;
  2203. }
  2204. EVF::Function:: SetVehiclePanels(vehicleid,front_left,front_right,rear_left,rear_right,windshield,front_bumper,rear_bumper){
  2205. new panels,doors,lights,tires;
  2206. GetVehicleDamageStatus(vehicleid,panels,doors,lights,tires);
  2207. panels = (front_left | (front_right << 4) | (rear_left << 8) | (rear_right << 12) | (windshield << 16) | (front_bumper << 20) | (rear_bumper << 24));
  2208. UpdateVehicleDamageStatus(vehicleid,panels,doors,lights,tires);
  2209. }
  2210. //Update by Freaksken
  2211. EVF::Function:: GetVehicleLights(vehicleid,&front_left_light,&front_right_light,&back_lights){
  2212. new panels,doors,lights,tires;
  2213. GetVehicleDamageStatus(vehicleid,panels,doors,lights,tires);
  2214. front_left_light = (lights & 0x1);
  2215. front_right_light = (lights >> 2 & 0x1);
  2216. back_lights = (lights >> 6 & 0x1);
  2217. }
  2218. //Update by Freaksken
  2219. EVF::Function:: SetVehicleLights(vehicleid,front_left_light,front_right_light,back_lights){
  2220. new panels,doors,lights,tires;
  2221. GetVehicleDamageStatus(vehicleid,panels,doors,lights,tires);
  2222. lights = (front_left_light | (front_right_light << 2) | (back_lights << 6));
  2223. UpdateVehicleDamageStatus(vehicleid,panels,doors,lights,tires);
  2224. }
  2225. EVF::Function:: GetVehicleDoors(vehicleid,&bonnet,&boot,&driver_door,&passenger_door){
  2226. new panels,doors,lights,tires;
  2227. GetVehicleDamageStatus(vehicleid,panels,doors,lights,tires);
  2228. bonnet = (doors & 0x7);
  2229. boot = ((doors >> 8) & 0x7);
  2230. driver_door = ((doors >> 16) & 0x7);
  2231. passenger_door = ((doors >> 24) & 0x7);
  2232. }
  2233. EVF::Function:: SetVehicleDoors(vehicleid,bonnet,boot,driver_door,passenger_door){
  2234. new panels,doors,lights,tires;
  2235. GetVehicleDamageStatus(vehicleid,panels,doors,lights,tires);
  2236. doors = (bonnet | (boot << 8) | (driver_door << 16) | (passenger_door << 24));
  2237. UpdateVehicleDamageStatus(vehicleid,panels,doors,lights,tires);
  2238. }
  2239. EVF::Function:: GetVehicleTires(vehicleid,&front_left,&front_right,&rear_left,&rear_right){
  2240. new panels,doors,lights,tires;
  2241. GetVehicleDamageStatus(vehicleid,panels,doors,lights,tires);
  2242. rear_right = (tires & 0x1);
  2243. front_right = (tires >> 1 & 0x1);
  2244. rear_left = (tires >> 2 & 0x1);
  2245. front_left = (tires >> 3 & 0x1);
  2246. }
  2247. EVF::Function:: SetVehicleTires(vehicleid,front_left,front_right,rear_left,rear_right){
  2248. new panels,doors,lights,tires;
  2249. GetVehicleDamageStatus(vehicleid,panels,doors,lights,tires);
  2250. tires = (rear_right | (front_right << 1) | (rear_left << 2) | (front_left << 3));
  2251. UpdateVehicleDamageStatus(vehicleid,panels,doors,lights,tires);
  2252. }
  2253. EVF::Function:: SwitchVehicleEngine(vehicleid,bool:engine_status){
  2254. new engine,lights,alarm,doors,bonnet,boot,objective;
  2255. GetVehicleParamsEx(vehicleid,engine,lights,alarm,doors,bonnet,boot,objective);
  2256. SetVehicleParamsEx(vehicleid,_:engine_status,lights,alarm,doors,bonnet,boot,objective);
  2257. }
  2258. EVF::Function:: SwitchVehicleLight(vehicleid,bool:light_status){
  2259. new engine,lights,alarm,doors,bonnet,boot,objective;
  2260. GetVehicleParamsEx(vehicleid,engine,lights,alarm,doors,bonnet,boot,objective);
  2261. SetVehicleParamsEx(vehicleid,engine,_:light_status,alarm,doors,bonnet,boot,objective);
  2262. }
  2263. EVF::Function:: SwitchVehicleAlarm(vehicleid,bool:alarm_status){
  2264. new engine,lights,alarm,doors,bonnet,boot,objective;
  2265. GetVehicleParamsEx(vehicleid,engine,lights,alarm,doors,bonnet,boot,objective);
  2266. SetVehicleParamsEx(vehicleid,engine,lights,_:alarm_status,doors,bonnet,boot,objective);
  2267. }
  2268. EVF::Function:: SwitchVehicleDoors(vehicleid,bool:doors_status){
  2269. new engine,lights,alarm,doors,bonnet,boot,objective;
  2270. GetVehicleParamsEx(vehicleid,engine,lights,alarm,doors,bonnet,boot,objective);
  2271. SetVehicleParamsEx(vehicleid,engine,lights,alarm,_:doors_status,bonnet,boot,objective);
  2272. }
  2273. EVF::Function:: SwitchVehicleBonnet(vehicleid,bool:bonnet_status){
  2274. new engine,lights,alarm,doors,bonnet,boot,objective;
  2275. GetVehicleParamsEx(vehicleid,engine,lights,alarm,doors,bonnet,boot,objective);
  2276. SetVehicleParamsEx(vehicleid,engine,lights,alarm,doors,_:bonnet_status,boot,objective);
  2277. }
  2278. EVF::Function:: SwitchVehicleBoot(vehicleid,bool:boot_status){
  2279. new engine,lights,alarm,doors,bonnet,boot,objective;
  2280. GetVehicleParamsEx(vehicleid,engine,lights,alarm,doors,bonnet,boot,objective);
  2281. SetVehicleParamsEx(vehicleid,engine,lights,alarm,doors,bonnet,_:boot_status,objective);
  2282. }
  2283. EVF::Function:: SwitchVehicleObjective(vehicleid,bool:objective_status){
  2284. new engine,lights,alarm,doors,bonnet,boot,objective;
  2285. GetVehicleParamsEx(vehicleid,engine,lights,alarm,doors,bonnet,boot,objective);
  2286. SetVehicleParamsEx(vehicleid,engine,lights,alarm,doors,bonnet,boot,_:objective_status);
  2287. }
  2288. EVF::Function:: GetVehicleWindowState(vehicleid,doorid){
  2289. new driver,passenger,backleft,backright;
  2290. GetVehicleParamsCarWindows(vehicleid,driver,passenger,backleft,backright);
  2291. switch(doorid){
  2292. case DOOR_DRIVER: return (driver > 0);
  2293. case DOOR_PASSENGER: return (passenger > 0);
  2294. case DOOR_BACKLEFF: return (backleft > 0);
  2295. case DOOR_BACKRIGHT: return (backright > 0);
  2296. }
  2297. return 0;
  2298. }
  2299. EVF::Function:: SetVehicleWindowState(vehicleid,doorid,window_state){
  2300. if(!IsValidVehicleDoor(vehicleid,doorid)) return 0;
  2301. new driver,passenger,backleft,backright;
  2302. driver = GetVehicleWindowState(vehicleid,DOOR_DRIVER);
  2303. passenger = GetVehicleWindowState(vehicleid,DOOR_PASSENGER);
  2304. backleft = GetVehicleWindowState(vehicleid,DOOR_BACKLEFF);
  2305. backright = GetVehicleWindowState(vehicleid,DOOR_BACKRIGHT);
  2306. switch(doorid){
  2307. case DOOR_DRIVER: SetVehicleParamsCarWindows(vehicleid,window_state,passenger,backleft,backright);
  2308. case DOOR_PASSENGER: SetVehicleParamsCarWindows(vehicleid,driver,window_state,backleft,backright);
  2309. case DOOR_BACKLEFF: SetVehicleParamsCarWindows(vehicleid,driver,passenger,window_state,backright);
  2310. case DOOR_BACKRIGHT: SetVehicleParamsCarWindows(vehicleid,driver,passenger,backleft,window_state);
  2311. }
  2312. return 1;
  2313. }
  2314. EVF::Function:: GetVehicleDoorState(vehicleid,doorid){
  2315. new driver,passenger,backleft,backright;
  2316. GetVehicleParamsCarDoors(vehicleid,driver,passenger,backleft,backright);
  2317. switch(doorid){
  2318. case DOOR_DRIVER: return (driver > 0);
  2319. case DOOR_PASSENGER: return (passenger > 0);
  2320. case DOOR_BACKLEFF: return (backleft > 0);
  2321. case DOOR_BACKRIGHT: return (backright > 0);
  2322. }
  2323. return 0;
  2324. }
  2325. EVF::Function:: SetVehicleDoorState(vehicleid,doorid,door_state){
  2326. if(!IsValidVehicleDoor(vehicleid,doorid)) return 0;
  2327. new driver,passenger,backleft,backright;
  2328. driver = GetVehicleDoorState(vehicleid,DOOR_DRIVER);
  2329. passenger = GetVehicleDoorState(vehicleid,DOOR_PASSENGER);
  2330. backleft = GetVehicleDoorState(vehicleid,DOOR_BACKLEFF);
  2331. backright = GetVehicleDoorState(vehicleid,DOOR_BACKRIGHT);
  2332. switch(doorid){
  2333. case DOOR_DRIVER: SetVehicleParamsCarDoors(vehicleid,door_state,passenger,backleft,backright);
  2334. case DOOR_PASSENGER: SetVehicleParamsCarDoors(vehicleid,driver,door_state,backleft,backright);
  2335. case DOOR_BACKLEFF: SetVehicleParamsCarDoors(vehicleid,driver,passenger,door_state,backright);
  2336. case DOOR_BACKRIGHT: SetVehicleParamsCarDoors(vehicleid,driver,passenger,backleft,door_state);
  2337. }
  2338. return 1;
  2339. }
  2340. EVF::Public:: OnVehicleTimeUpdate(){
  2341. new Float:EVF::Vec[4];
  2342. EVF::ForeachVehicle(vehicleid){
  2343. if(EVF::VehicleProperty[vehicleid][e_VEHICLE_STORED]){
  2344. GetVehiclePos(vehicleid,EVF::Vec[0],EVF::Vec[1],EVF::Vec[2]);
  2345. GetVehicleZAngle(vehicleid,EVF::Vec[3]);
  2346. if(IsVehicleSticky(vehicleid)){
  2347. if(VectorSize(EVF::Vec[0]-EVF::VehicleTempData[vehicleid][e_pos_x],EVF::Vec[1]-EVF::VehicleTempData[vehicleid][e_pos_y],EVF::Vec[2]-EVF::VehicleTempData[vehicleid][e_pos_z]) >= 2.0 || VectorSize(EVF::Vec[3]-EVF::VehicleTempData[vehicleid][e_pos_a],0.0,0.0) >= 1.0){
  2348. return TeleportVehicle(vehicleid,EVF::VehicleTempData[vehicleid][e_pos_x],EVF::VehicleTempData[vehicleid][e_pos_y],EVF::VehicleTempData[vehicleid][e_pos_z],EVF::VehicleTempData[vehicleid][e_pos_a],GetVehicleInterior(vehicleid),GetVehicleVirtualWorld(vehicleid));
  2349. }
  2350. }
  2351. #if defined OnVehiclePosChange
  2352. if(VectorSize(EVF::Vec[0]-EVF::VehicleTempData[vehicleid][e_pos_x],EVF::Vec[1]-EVF::VehicleTempData[vehicleid][e_pos_y],EVF::Vec[2]-EVF::VehicleTempData[vehicleid][e_pos_z]) >= 2.0){
  2353. if(CallRemoteFunction("OnVehiclePosChange","iffffffff",vehicleid,EVF::Vec[0],EVF::Vec[1],EVF::Vec[2],EVF::Vec[3],EVF::VehicleTempData[vehicleid][e_pos_x],EVF::VehicleTempData[vehicleid][e_pos_y],EVF::VehicleTempData[vehicleid][e_pos_z],EVF::VehicleTempData[vehicleid][e_pos_a])){
  2354. EVF::VehicleTempData[vehicleid][e_pos_x] = EVF::Vec[0];
  2355. EVF::VehicleTempData[vehicleid][e_pos_y] = EVF::Vec[1];
  2356. EVF::VehicleTempData[vehicleid][e_pos_z] = EVF::Vec[2];
  2357. EVF::VehicleTempData[vehicleid][e_pos_a] = EVF::Vec[3];
  2358. } else {
  2359. return TeleportVehicle(vehicleid,EVF::VehicleTempData[vehicleid][e_pos_x],EVF::VehicleTempData[vehicleid][e_pos_y],EVF::VehicleTempData[vehicleid][e_pos_z],EVF::VehicleTempData[vehicleid][e_pos_a],GetVehicleInterior(vehicleid),GetVehicleVirtualWorld(vehicleid));
  2360. }
  2361. }
  2362. #endif
  2363. GetVehicleVelocity(vehicleid,EVF::Vec[0],EVF::Vec[1],EVF::Vec[2]);
  2364. if(IsVehicleFuelToggled(vehicleid)){
  2365. //fuel system
  2366. new Float:vehicle_speed = EVF::GetVehicleSpeed(vehicleid);
  2367. //if vehicle out of fuel
  2368. if(GetVehicleFuel(vehicleid) <= 0){
  2369. SetVehicleParams(vehicleid,VEHICLE_TYPE_ENGINE,0);
  2370. new vehicle_driver = GetVehicleDriverID(vehicleid);
  2371. if(IsPlayerConnected(vehicle_driver)){
  2372. GameTextForPlayer(vehicle_driver,"~r~Vehicle out of fuel !",5000,3);
  2373. }
  2374. } else {
  2375. //if vehicle has some EVF::Vecitive fuel
  2376. EVF::VehicleTempData[vehicleid][e_uptime] += 1;
  2377. //if the vehicle speed is quiet high
  2378. new fuel_consumption_level = 0;
  2379. if(vehicle_speed == 0.0 && GetVehicleParams(vehicleid,VEHICLE_TYPE_ENGINE)){
  2380. fuel_consumption_level = MULTIPLIER_FUEL_SYSTEM;
  2381. } else if(vehicle_speed > 0.0){
  2382. for(new i = 20, j = floatround(GetVehicleTopSpeed(vehicleid)); i <= j; i += 20){
  2383. if(vehicle_speed > i){
  2384. fuel_consumption_level += MULTIPLIER_FUEL_SYSTEM;
  2385. }
  2386. }
  2387. }
  2388. EVF::VehicleTempData[vehicleid][e_uptime] += 1;
  2389. if(EVF::VehicleTempData[vehicleid][e_uptime] > 20){ // 250 ms * 20 = 5 seconds
  2390. EVF::VehicleTempData[vehicleid][e_uptime] = 0;
  2391. new old_fuel = GetVehicleFuel(vehicleid),
  2392. new_fuel = (old_fuel - fuel_consumption_level - 1);
  2393. if(new_fuel < 0) new_fuel = 0;
  2394. CallRemoteFunction("OnVehicleFuelChange","iii",vehicleid,new_fuel,old_fuel);
  2395. SetVehicleFuel(vehicleid,new_fuel);
  2396. }
  2397. }
  2398. }
  2399. #if defined OnVehicleVelocityChange
  2400. if(CallRemoteFunction("OnVehicleVelocityChange","iffffff",vehicleid,EVF::Vec[0],EVF::Vec[1],EVF::Vec[2],EVF::VehicleTempData[vehicleid][e_vel_x],EVF::VehicleTempData[vehicleid][e_vel_y],EVF::VehicleTempData[vehicleid][e_vel_z])){
  2401. EVF::VehicleTempData[vehicleid][e_vel_x] = EVF::Vec[0];
  2402. EVF::VehicleTempData[vehicleid][e_vel_y] = EVF::Vec[1];
  2403. EVF::VehicleTempData[vehicleid][e_vel_z] = EVF::Vec[2];
  2404. } else {
  2405. return SetVehicleVelocity(vehicleid,EVF::VehicleTempData[vehicleid][e_vel_x],EVF::VehicleTempData[vehicleid][e_vel_y],EVF::VehicleTempData[vehicleid][e_vel_z]);
  2406. }
  2407. #endif
  2408. GetVehicleHealth(vehicleid,EVF::Vec[0]);
  2409. #if defined OnVehicleHealthChange
  2410. if(EVF::Vec[0] != EVF::VehicleTempData[vehicleid][e_health]){
  2411. if(CallRemoteFunction("OnVehicleHealthChange","iff",vehicleid,EVF::Vec[0],EVF::VehicleTempData[vehicleid][e_health])){
  2412. EVF::VehicleTempData[vehicleid][e_health] = EVF::Vec[0];
  2413. } else {
  2414. return SetVehicleHealth(vehicleid,EVF::VehicleTempData[vehicleid][e_health]);
  2415. }
  2416. }
  2417. #endif
  2418. }
  2419. }
  2420. return 1;
  2421. }
  2422. EVF::Public:: EVF::SetVehicleParamsEx(vehicleid,engine,lights,alarm,doors,bonnet,boot,objective){
  2423. SetVehicleParamsEx(vehicleid,engine,lights,alarm,doors,bonnet,boot,objective);
  2424. }
  2425. EVF::Public:: EVF::OnVehicleBombActivate(playerid,vehicleid){
  2426. SetVehicleParams(vehicleid,VEHICLE_TYPE_ALARM,1);
  2427. SetVehiclePropertyValue(vehicleid,e_VEHICLE_BOMB_TIMER,SetTimerEx("EVF_OnVehicleBombExplode",1750,false,"ii",playerid,vehicleid));
  2428. return 1;
  2429. }
  2430. EVF::Public:: EVF::ImportVehicle(vehicleid,modelid,Float:x,Float:y,Float:z,Float:angle,color1,color2,worldid,interiorid,unoccupied_damage){
  2431. EVF::VehicleProperty[vehicleid][e_VEHICLE_SPAWN_X] = _:x;
  2432. EVF::VehicleProperty[vehicleid][e_VEHICLE_SPAWN_Y] = _:y;
  2433. EVF::VehicleProperty[vehicleid][e_VEHICLE_SPAWN_Z] = _:z;
  2434. EVF::VehicleProperty[vehicleid][e_VEHICLE_SPAWN_A] = _:angle;
  2435. EVF::VehicleProperty[vehicleid][e_VEHICLE_PAINTJOB] = RESET_PAINTJOB_ID;
  2436. EVF::VehicleProperty[vehicleid][e_VEHICLE_INTERIOR] = interiorid;
  2437. EVF::VehicleProperty[vehicleid][e_VEHICLE_COLOR_1] = color1;
  2438. EVF::VehicleProperty[vehicleid][e_VEHICLE_COLOR_2] = color2;
  2439. EVF::VehicleProperty[vehicleid][e_VEHICLE_HORN] = 0;
  2440. EVF::VehicleProperty[vehicleid][e_VEHICLE_SPAWN_VW] = worldid;
  2441. EVF::VehicleProperty[vehicleid][e_VEHICLE_SPAWN_INT] = interiorid;
  2442. EVF::VehicleProperty[vehicleid][e_VEHICLE_SPEED_CAP] = 0;
  2443. EVF::VehicleProperty[vehicleid][e_VEHICLE_FUEL_USE] = 0;
  2444. EVF::VehicleProperty[vehicleid][e_VEHICLE_FUEL] = 0;
  2445. EVF::VehicleProperty[vehicleid][e_VEHICLE_STICKY] = 0;
  2446. EVF::VehicleProperty[vehicleid][e_VEHICLE_UNO_DAMAGE] = ((unoccupied_damage)?(1):(0));
  2447. EVF::VehicleProperty[vehicleid][e_VEHICLE_CAP_DAMAGE] = 0;
  2448. EVF::VehicleProperty[vehicleid][e_VEHICLE_EDITOR] = 0;
  2449. EVF::VehicleProperty[vehicleid][e_VEHICLE_DAMAGE_PANELS] = 1;
  2450. EVF::VehicleProperty[vehicleid][e_VEHICLE_DAMAGE_DOORS] = 1;
  2451. EVF::VehicleProperty[vehicleid][e_VEHICLE_DAMAGE_LIGHTS] = 1;
  2452. EVF::VehicleProperty[vehicleid][e_VEHICLE_DAMAGE_TIRES] = 1;
  2453. EVF::VehicleProperty[vehicleid][e_VEHICLE_BOMB] = 0;
  2454. EVF::VehicleProperty[vehicleid][e_VEHICLE_BOMB_TIMER] = -1;
  2455. EVF::VehicleProperty[vehicleid][e_VEHICLE_BULLETPROOF] = 0;
  2456. EVF::VehicleTempData[vehicleid][e_pos_x] = x;
  2457. EVF::VehicleTempData[vehicleid][e_pos_y] = y;
  2458. EVF::VehicleTempData[vehicleid][e_pos_z] = z;
  2459. EVF::VehicleTempData[vehicleid][e_pos_a] = angle;
  2460. EVF::VehicleTempData[vehicleid][e_vel_x] = 0.0;
  2461. EVF::VehicleTempData[vehicleid][e_vel_y] = 0.0;
  2462. EVF::VehicleTempData[vehicleid][e_vel_z] = 0.0;
  2463. EVF::VehicleTempData[vehicleid][e_health] = 1000.0;
  2464. EVF::VehicleTempData[vehicleid][e_uptime] = 0;
  2465. SetVehiclePropertyValue(vehicleid,e_VEHICLE_STORED,1);
  2466. return 1;
  2467. }
  2468. EVF::Public:: EVF::RemoveVehicle(vehicleid){
  2469. SetVehiclePropertyValue(vehicleid,e_VEHICLE_STORED,0);
  2470. return 1;
  2471. }
  2472. EVF::Public:: EVF::OnVehicleBombExplode(playerid,vehicleid){
  2473. if(GetPlayerState(playerid) != PLAYER_STATE_DRIVER){
  2474. if(!CallRemoteFunction("OnVehicleBombDeactivate","i",vehicleid)){
  2475. return SetVehicleParams(vehicleid,VEHICLE_TYPE_ALARM,0);
  2476. }
  2477. }
  2478. CallRemoteFunction("OnVehicleBombExplode","i",vehicleid);
  2479. SetVehicleParams(vehicleid,VEHICLE_TYPE_ALARM,0);
  2480. new Float:pos[3];
  2481. GetVehiclePos(vehicleid,pos[0],pos[1],pos[2]);
  2482. #if defined _3D_Tryg
  2483. CreateDynamicExplosion(pos[0],pos[1],pos[2],3,30.0,GetVehicleVirtualWorld(vehicleid),GetVehicleInterior(vehicleid),-1,200.0);
  2484. #else
  2485. CreateExplosion(pos[0],pos[1],pos[2],3,30.0);
  2486. #endif
  2487. SetVehicleToRespawn(vehicleid);
  2488. if(GetPlayerVehicleID(playerid) == vehicleid){
  2489. SetPlayerHealth(playerid,0.0);
  2490. GameTextForPlayer(playerid,"~r~Bombed !",3500,3);
  2491. }
  2492. SetVehiclePropertyValue(vehicleid,e_VEHICLE_BOMB_TIMER,-1);
  2493. return 1;
  2494. }
  2495. //Hook: SetVehicleHealth
  2496. EVF::Function:: EVF::SetVehicleHealth(vehicleid,Float:health){
  2497. if(SetVehicleHealth(vehicleid,health)){
  2498. EVF::VehicleTempData[vehicleid][e_health] = health;
  2499. return 1;
  2500. }
  2501. return 0;
  2502. }
  2503. #if defined _ALS_SetVehicleHealth
  2504. #undef SetVehicleHealth
  2505. #else
  2506. #define _ALS_SetVehicleHealth
  2507. #endif
  2508. #define SetVehicleHealth EVF_SetVehicleHealth
  2509. //Hook: SetVehiclePos
  2510. EVF::Function:: EVF::SetVehiclePos(vehicleid,Float:x,Float:y,Float:z){
  2511. if(SetVehiclePos(vehicleid,Float:x,Float:y,Float:z)){
  2512. EVF::VehicleTempData[vehicleid][e_pos_x] = x;
  2513. EVF::VehicleTempData[vehicleid][e_pos_y] = y;
  2514. EVF::VehicleTempData[vehicleid][e_pos_z] = z;
  2515. return 1;
  2516. }
  2517. return 0;
  2518. }
  2519. #if defined _ALS_SetVehiclePos
  2520. #undef SetVehiclePos
  2521. #else
  2522. #define _ALS_SetVehiclePos
  2523. #endif
  2524. #define SetVehiclePos EVF_SetVehiclePos
  2525. //Hook: SetVehicleZAngle
  2526. EVF::Function:: EVF::SetVehicleZAngle(vehicleid,Float:angle){
  2527. if(SetVehicleZAngle(vehicleid,angle)){
  2528. EVF::VehicleTempData[vehicleid][e_pos_a] = angle;
  2529. return 1;
  2530. }
  2531. return 0;
  2532. }
  2533. #if defined _ALS_SetVehicleZAngle
  2534. #undef SetVehicleZAngle
  2535. #else
  2536. #define _ALS_SetVehicleZAngle
  2537. #endif
  2538. #define SetVehicleZAngle EVF_SetVehicleZAngle
  2539. //Hook: LinkVehicleToInterior
  2540. EVF::Function:: EVF::LinkVehicleToInterior(vehicleid,interiorid){
  2541. if(LinkVehicleToInterior(vehicleid,interiorid)){
  2542. SetVehiclePropertyValue(vehicleid,e_VEHICLE_INTERIOR,interiorid);
  2543. return 1;
  2544. }
  2545. return 0;
  2546. }
  2547. #if defined _ALS_LinkVehicleToInterior
  2548. #undef LinkVehicleToInterior
  2549. #else
  2550. #define _ALS_LinkVehicleToInterior
  2551. #endif
  2552. #define LinkVehicleToInterior EVF_LinkVehicleToInterior
  2553. //Hook: ChangeVehicleColor
  2554. EVF::Function:: EVF::ChangeVehicleColor(vehicleid,color1,color2){
  2555. new randcolor1, randcolor2;
  2556. if(GetVehicleRandomColors(GetVehicleModel(vehicleid),randcolor1,randcolor2)){
  2557. if(color1 == -1) color1 = randcolor1;
  2558. if(color2 == -1) color2 = randcolor2;
  2559. }
  2560. if(ChangeVehicleColor(vehicleid,color1,color2)){
  2561. SetVehiclePropertyValue(vehicleid,e_VEHICLE_COLOR_1,color1);
  2562. SetVehiclePropertyValue(vehicleid,e_VEHICLE_COLOR_2,color2);
  2563. return 1;
  2564. }
  2565. return 0;
  2566. }
  2567. #if defined _ALS_ChangeVehicleColor
  2568. #undef ChangeVehicleColor
  2569. #else
  2570. #define _ALS_ChangeVehicleColor
  2571. #endif
  2572. #define ChangeVehicleColor EVF_ChangeVehicleColor
  2573. //Hook: ChangeVehiclePaintjob
  2574. EVF::Function:: EVF::ChangeVehiclePaintjob(vehicleid,paintjobid){
  2575. if(ChangeVehiclePaintjob(vehicleid,paintjobid)){
  2576. SetVehiclePropertyValue(vehicleid,e_VEHICLE_PAINTJOB,paintjobid);
  2577. if(paintjobid == RESET_PAINTJOB_ID){
  2578. new color1,color2;
  2579. if(EVF::GetVehicleColor(vehicleid,color1,color2)){
  2580. ChangeVehicleColor(vehicleid,color1,color2);
  2581. }
  2582. }
  2583. return 1;
  2584. }
  2585. return 0;
  2586. }
  2587. #if defined _ALS_ChangeVehiclePaintjob
  2588. #undef ChangeVehiclePaintjob
  2589. #else
  2590. #define _ALS_ChangeVehiclePaintjob
  2591. #endif
  2592. #define ChangeVehiclePaintjob EVF_ChangeVehiclePaintjob
  2593. //Hook: OnVehicleRespray
  2594. public OnVehicleRespray(playerid,vehicleid,color1,color2){
  2595. SetVehiclePropertyValue(vehicleid,e_VEHICLE_COLOR_1,color1);
  2596. SetVehiclePropertyValue(vehicleid,e_VEHICLE_COLOR_2,color2);
  2597. #if defined EVF_OnVehicleRespray
  2598. EVF::OnVehicleRespray(playerid,vehicleid,color1,color2);
  2599. #endif
  2600. return 1;
  2601. }
  2602. #if defined _ALS_OnVehicleRespray
  2603. #undef OnVehicleRespray
  2604. #else
  2605. #define _ALS_OnVehicleRespray
  2606. #endif
  2607. #define OnVehicleRespray EVF_OnVehicleRespray
  2608. #if defined EVF_OnVehicleRespray
  2609. forward EVF_OnVehicleRespray(playerid,vehicleid,color1,color2);
  2610. #endif
  2611. //Hook: OnVehiclePaintjob
  2612. public OnVehiclePaintjob(playerid,vehicleid,paintjobid){
  2613. SetVehiclePropertyValue(vehicleid,e_VEHICLE_PAINTJOB,paintjobid);
  2614. #if defined EVF_OnVehiclePaintjob
  2615. EVF::OnVehiclePaintjob(playerid,vehicleid,paintjobid);
  2616. #endif
  2617. return 1;
  2618. }
  2619. #if defined _ALS_OnVehiclePaintjob
  2620. #undef OnVehiclePaintjob
  2621. #else
  2622. #define _ALS_OnVehiclePaintjob
  2623. #endif
  2624. #define OnVehiclePaintjob EVF_OnVehiclePaintjob
  2625. #if defined EVF_OnVehiclePaintjob
  2626. forward EVF_OnVehiclePaintjob(playerid,vehicleid,paintjobid);
  2627. #endif
  2628. //Hook: CreateVehicle
  2629. EVF::Function:: EVF::CreateVehicle(modelid,Float:x,Float:y,Float:z,Float:angle,color1,color2,respawn_delay,addsiren = 0,worldid = 0,interiorid = 0,bool:unoccupied_damage = false){
  2630. if(!IsValidVehicleModelID(modelid)) return INVALID_VEHICLE_ID;
  2631. new vehicleid = INVALID_VEHICLE_ID, randcolor1, randcolor2;
  2632. if(GetVehicleRandomColors(modelid,randcolor1,randcolor2)){
  2633. if(color1 == -1) color1 = randcolor1;
  2634. if(color2 == -1) color2 = randcolor2;
  2635. }
  2636. switch(modelid){
  2637. case 569, 570, 537, 538: vehicleid = AddStaticVehicleEx(modelid,x,y,z,angle,color1,color2,respawn_delay,addsiren);
  2638. default: vehicleid = CreateVehicle(modelid,x,y,z,angle,color1,color2,respawn_delay,addsiren);
  2639. }
  2640. if(vehicleid == INVALID_VEHICLE_ID || !IsValidVehicle(vehicleid)){
  2641. printf("[ADM] Error: Your server have reached MAX_VEHICLES limit (%i).",MAX_VEHICLES);
  2642. return INVALID_VEHICLE_ID;
  2643. }
  2644. ResetVehicleProperties(vehicleid);
  2645. #if defined EVF_Streamer
  2646. for(new i = 0; i < MAX_VEHICLE_ATTACHED_OBJECTS; i++){
  2647. EVF::VehicleTempData[vehicleid][e_attached_object][i] = STREAMER_TAG_OBJECT INVALID_STREAMER_ID;
  2648. }
  2649. #endif
  2650. EVF::VehicleTempData[vehicleid][e_pos_x] = x;
  2651. EVF::VehicleTempData[vehicleid][e_pos_y] = y;
  2652. EVF::VehicleTempData[vehicleid][e_pos_z] = z;
  2653. EVF::VehicleTempData[vehicleid][e_pos_a] = angle;
  2654. EVF::VehicleTempData[vehicleid][e_vel_x] = 0.0;
  2655. EVF::VehicleTempData[vehicleid][e_vel_y] = 0.0;
  2656. EVF::VehicleTempData[vehicleid][e_vel_z] = 0.0;
  2657. EVF::VehicleTempData[vehicleid][e_health] = 1000.0;
  2658. EVF::VehicleTempData[vehicleid][e_uptime] = 0;
  2659. LinkVehicleToInterior(vehicleid,interiorid);
  2660. SetVehicleVirtualWorld(vehicleid,worldid);
  2661. SetVehicleHorn(vehicleid,0);
  2662. SetVehicleFuel(vehicleid,DEFAULT_VEHICLE_FUEL);
  2663. SetVehicleSpeedCap(vehicleid,0.0);
  2664. ToggleUnoccupiedVehicleDamage(vehicleid,unoccupied_damage);
  2665. ToggleVehicleSticky(vehicleid,0);
  2666. ToggleVehiclePetrolCapDestroy(vehicleid,0);
  2667. ToggleVehicleFuel(vehicleid,0);
  2668. SetVehiclePropertyValue(vehicleid,e_VEHICLE_COLOR_1,color1);
  2669. SetVehiclePropertyValue(vehicleid,e_VEHICLE_COLOR_2,color2);
  2670. SetVehiclePropertyValue(vehicleid,e_VEHICLE_PAINTJOB,RESET_PAINTJOB_ID);
  2671. SetVehiclePropertyValue(vehicleid,e_VEHICLE_SPAWN_X,_:x);
  2672. SetVehiclePropertyValue(vehicleid,e_VEHICLE_SPAWN_Y,_:y);
  2673. SetVehiclePropertyValue(vehicleid,e_VEHICLE_SPAWN_Z,_:z);
  2674. SetVehiclePropertyValue(vehicleid,e_VEHICLE_SPAWN_A,_:angle);
  2675. SetVehiclePropertyValue(vehicleid,e_VEHICLE_SPAWN_VW,worldid);
  2676. SetVehiclePropertyValue(vehicleid,e_VEHICLE_SPAWN_INT,interiorid);
  2677. SetVehiclePropertyValue(vehicleid,e_VEHICLE_EDITOR,0);
  2678. SetVehiclePropertyValue(vehicleid,e_VEHICLE_BOMB,0);
  2679. SetVehiclePropertyValue(vehicleid,e_VEHICLE_BOMB_TIMER,-1);
  2680. SetVehiclePropertyValue(vehicleid,e_VEHICLE_BULLETPROOF,0);
  2681. SetVehiclePropertyValue(vehicleid,e_VEHICLE_STORED,1);
  2682. for(new i = 0; i < 4; i++) ToggleVehicleDamageUpdate(vehicleid,i,1);
  2683. CallRemoteFunction("OnVehicleCreated","i",vehicleid);
  2684. return vehicleid;
  2685. }
  2686. #if defined _ALS_CreateVehicle
  2687. #undef CreateVehicle
  2688. #else
  2689. #define _ALS_CreateVehicle
  2690. #endif
  2691. #define CreateVehicle EVF_CreateVehicle
  2692. //Hook: AddStaticVehicle
  2693. EVF::Function:: EVF::AddStaticVehicle(modelid,Float:spawn_x,Float:spawn_y,Float:spawn_z,Float:z_angle,color1,color2){
  2694. return EVF::CreateVehicle(modelid,spawn_x,spawn_y,spawn_z,z_angle,color1,color2,-1);
  2695. }
  2696. #if defined _ALS_AddStaticVehicle
  2697. #undef AddStaticVehicle
  2698. #else
  2699. #define _ALS_AddStaticVehicle
  2700. #endif
  2701. #define AddStaticVehicle EVF_AddStaticVehicle
  2702. //Hook: AddStaticVehicleEx
  2703. EVF::Function:: EVF::AddStaticVehicleEx(modelid,Float:spawn_x,Float:spawn_y,Float:spawn_z,Float:z_angle,color1,color2,respawn_delay,addsiren=0){
  2704. return EVF::CreateVehicle(modelid,spawn_x,spawn_y,spawn_z,z_angle,color1,color2,respawn_delay,addsiren);
  2705. }
  2706. #if defined _ALS_AddStaticVehicleEx
  2707. #undef AddStaticVehicleEx
  2708. #else
  2709. #define _ALS_AddStaticVehicleEx
  2710. #endif
  2711. #define AddStaticVehicleEx EVF_CreateVehicle
  2712. //Hook: DestroyVehicle
  2713. EVF::Function:: EVF::DestroyVehicle(vehicleid){
  2714. if(!IsValidVehicle(vehicleid)) return 0;
  2715. EVF::Foreach(i){
  2716. if(EVF::PlayerTempData[i][e_editor_vehicle] == GetVehiclePropertyValue(vehicleid,e_VEHICLE_EDITOR)){
  2717. CancelEdit(i);
  2718. }
  2719. }
  2720. #if defined EVF_Streamer
  2721. new objectid = GetVehiclePropertyValue(vehicleid,e_VEHICLE_EDITOR);
  2722. DestroyDynamicObject(STREAMER_TAG_OBJECT objectid);
  2723. for(new i = 0; i < MAX_VEHICLE_ATTACHED_OBJECTS; i++){
  2724. if(IsValidDynamicObject(EVF::VehicleTempData[vehicleid][e_attached_object][i])){
  2725. DestroyDynamicObject(EVF::VehicleTempData[vehicleid][e_attached_object][i]);
  2726. EVF::VehicleTempData[vehicleid][e_attached_object][i] = STREAMER_TAG_OBJECT INVALID_STREAMER_ID;
  2727. }
  2728. }
  2729. #endif
  2730. SetVehicleNeonLights(vehicleid,false);
  2731. EVF::VehicleTempData[vehicleid][e_uptime] = 0;
  2732. CallRemoteFunction("OnVehicleDestroyed","i",vehicleid);
  2733. ResetVehicleProperties(vehicleid);
  2734. return DestroyVehicle(vehicleid);
  2735. }
  2736. #if defined _ALS_DestroyVehicle
  2737. #undef DestroyVehicle
  2738. #else
  2739. #define _ALS_DestroyVehicle
  2740. #endif
  2741. #define DestroyVehicle EVF_DestroyVehicle
  2742. //Hook: OnPlayerWeaponShot
  2743. public OnPlayerWeaponShot(playerid,weaponid,hittype,hitid,Float:fX,Float:fY,Float:fZ){
  2744. if(hittype == BULLET_HIT_TYPE_VEHICLE){
  2745. if(IsToggledVehicleBulletproof(hitid)) return 0;
  2746. new Float:fHealth, bodypart = _:VEHICLE_BODYPART_UNKNOWN, Float:fDamage = EVF::WeaponDamage[GetPlayerWeapon(playerid)];
  2747. GetVehicleHealth(hitid,fHealth);
  2748. if(fHealth > 249.0){
  2749. new fModelid = GetVehicleModel(hitid), Float:fOffSet[3], fUpdate;
  2750. if(IsUnoccupiedDamageToggled(hitid)){
  2751. //front wheels
  2752. GetVehicleModelInfo(fModelid,VEHICLE_MODEL_INFO_WHEELSFRONT,fOffSet[0],fOffSet[1],fOffSet[2]);
  2753. if(VectorSize(fX+fOffSet[0],fY-fOffSet[1],fZ-fOffSet[2]) <= 0.4){
  2754. //left
  2755. fUpdate = EVF::GetVehicleDamageStatus(hitid,VEHICLE_DAMAGE_TIRES) + 8;
  2756. if(fUpdate > 15){
  2757. EVF::UpdateVehicleDamageStatus(hitid,VEHICLE_DAMAGE_TIRES,fUpdate);
  2758. }
  2759. bodypart = _:VEHICLE_BODYPART_FL_WHEEL;
  2760. } else if(VectorSize(fX-fOffSet[0],fY-fOffSet[1],fZ-fOffSet[2]) <= 0.4){
  2761. //right
  2762. fUpdate = EVF::GetVehicleDamageStatus(hitid,VEHICLE_DAMAGE_TIRES) + 2;
  2763. if(fUpdate > 15){
  2764. EVF::UpdateVehicleDamageStatus(hitid,VEHICLE_DAMAGE_TIRES,fUpdate);
  2765. }
  2766. bodypart = _:VEHICLE_BODYPART_FR_WHEEL;
  2767. } else {
  2768. //back wheels
  2769. GetVehicleModelInfo(fModelid,VEHICLE_MODEL_INFO_WHEELSREAR,fOffSet[0],fOffSet[1],fOffSet[2]);
  2770. if(VectorSize(fX+fOffSet[0],fY-fOffSet[1],fZ-fOffSet[2]) <= 0.4){
  2771. //left
  2772. fUpdate = EVF::GetVehicleDamageStatus(hitid,VEHICLE_DAMAGE_TIRES) + 4;
  2773. if(fUpdate > 15){
  2774. EVF::UpdateVehicleDamageStatus(hitid,VEHICLE_DAMAGE_TIRES,fUpdate);
  2775. }
  2776. bodypart = _:VEHICLE_BODYPART_BL_WHEEL;
  2777. } else if(VectorSize(fX-fOffSet[0],fY-fOffSet[1],fZ-fOffSet[2]) <= 0.4){
  2778. //right
  2779. fUpdate = EVF::GetVehicleDamageStatus(hitid,VEHICLE_DAMAGE_TIRES) + 1;
  2780. if(fUpdate > 15){
  2781. EVF::UpdateVehicleDamageStatus(hitid,VEHICLE_DAMAGE_TIRES,fUpdate);
  2782. }
  2783. bodypart = _:VEHICLE_BODYPART_BR_WHEEL;
  2784. }
  2785. }
  2786. }
  2787. if(!bodypart){
  2788. //petrolcap
  2789. GetVehicleModelInfo(fModelid,VEHICLE_MODEL_INFO_PETROLCAP,fOffSet[0],fOffSet[1],fOffSet[2]);
  2790. if(VectorSize(fX-fOffSet[0],fY-fOffSet[1],fZ-fOffSet[2]) <= 0.2){
  2791. if(IsPetrolCapDestroyToggled(hitid)){
  2792. if(IsUnoccupiedDamageToggled(hitid) || IsVehicleOccupied(hitid)){
  2793. bodypart = _:VEHICLE_BODYPART_PETROLCAP;
  2794. new Float:pos[3];
  2795. GetVehiclePos(hitid,pos[0],pos[1],pos[2]);
  2796. #if defined _3D_Tryg
  2797. CreateDynamicExplosion(pos[0],pos[1],pos[2],3,25.0,GetVehicleVirtualWorld(hitid),GetVehicleInterior(hitid),-1,200.0);
  2798. #else
  2799. CreateExplosion(pos[0],pos[1],pos[2],3,25.0);
  2800. #endif
  2801. return SetVehicleToRespawn(hitid);
  2802. }
  2803. } else {
  2804. fHealth -= fDamage;
  2805. SetVehicleHealth(hitid,fHealth);
  2806. switch(floatround(fHealth)){
  2807. case 251..399: return EVF::UpdateVehicleDamage(hitid,VEHICLE_DAMAGE_DOORS);
  2808. case 400..599: return EVF::UpdateVehicleDamage(hitid,VEHICLE_DAMAGE_PANELS);
  2809. case 600..700: return EVF::UpdateVehicleDamage(hitid,VEHICLE_DAMAGE_LIGHTS);
  2810. }
  2811. }
  2812. }
  2813. }
  2814. if(!bodypart){
  2815. if(IsUnoccupiedDamageToggled(hitid)){
  2816. fHealth -= fDamage;
  2817. SetVehicleHealth(hitid,fHealth);
  2818. switch(floatround(fHealth)){
  2819. case 251..399: return EVF::UpdateVehicleDamage(hitid,VEHICLE_DAMAGE_DOORS);
  2820. case 400..599: return EVF::UpdateVehicleDamage(hitid,VEHICLE_DAMAGE_PANELS);
  2821. case 600..700: return EVF::UpdateVehicleDamage(hitid,VEHICLE_DAMAGE_LIGHTS);
  2822. }
  2823. }
  2824. }
  2825. }
  2826. CallRemoteFunction("OnPlayerShotVehicle","dddfd",playerid,hitid,weaponid,fDamage,bodypart);
  2827. }
  2828. #if defined EVF_OnPlayerWeaponShot
  2829. EVF::OnPlayerWeaponShot(playerid,weaponid,hittype,hitid,fX,fY,fZ);
  2830. #endif
  2831. return 1;
  2832. }
  2833. #if defined _ALS_OnPlayerWeaponShot
  2834. #undef OnPlayerWeaponShot
  2835. #else
  2836. #define _ALS_OnPlayerWeaponShot
  2837. #endif
  2838. #define OnPlayerWeaponShot EVF_OnPlayerWeaponShot
  2839. #if defined EVF_OnPlayerWeaponShot
  2840. forward EVF_OnPlayerWeaponShot(playerid,weaponid,hittype,hitid,Float:fX,Float:fY,Float:fZ);
  2841. #endif
  2842. //Hook: OnPlayerConnect
  2843. public OnPlayerConnect(playerid){
  2844. EVF::ModShopStatus[playerid] = false;
  2845. #if defined EVF_OnPlayerConnect
  2846. return EVF::OnPlayerConnect(playerid);
  2847. #else
  2848. return 1;
  2849. #endif
  2850. }
  2851. #if defined _ALS_OnPlayerConnect
  2852. #undef OnPlayerConnect
  2853. #else
  2854. #define _ALS_OnPlayerConnect
  2855. #endif
  2856. #define OnPlayerConnect EVF_OnPlayerConnect
  2857. #if defined EVF_OnPlayerConnect
  2858. forward EVF_OnPlayerConnect(playerid);
  2859. #endif
  2860. //Hook: OnEnterExitModShop
  2861. public OnEnterExitModShop(playerid,enterexit,interiorid){
  2862. EVF::ModShopStatus[playerid] = enterexit;
  2863. #if defined EVF_OnEnterExitModShop
  2864. return EVF::OnEnterExitModShop(playerid, enterexit, interiorid);
  2865. #else
  2866. return 1;
  2867. #endif
  2868. }
  2869. #if defined _ALS_OnEnterExitModShop
  2870. #undef OnEnterExitModShop
  2871. #else
  2872. #define _ALS_OnEnterExitModShop
  2873. #endif
  2874. #define OnEnterExitModShop EVF_OnEnterExitModShop
  2875. #if defined EVF_OnEnterExitModShop
  2876. forward EVF_OnEnterExitModShop(playerid, enterexit, interiorid);
  2877. #endif
  2878. //Hook: OnVehicleMod
  2879. public OnVehicleMod(playerid,vehicleid,componentid){
  2880. if(!IsValidComponentForVehicle(vehicleid,componentid) || !EVF::ModShopStatus[playerid] || GetPlayerState(playerid) == PLAYER_STATE_PASSENGER){
  2881. CallRemoteFunction("OnVehicleModEx","iiiii",playerid,vehicleid,componentid,GetVehicleComponentPrice(componentid),true);
  2882. return 0;
  2883. }
  2884. CallRemoteFunction("OnVehicleModEx","iiiii",playerid,vehicleid,componentid,GetVehicleComponentPrice(componentid),false);
  2885. #if defined EVF_OnVehicleMod
  2886. return EVF::OnVehicleMod(playerid,vehicleid,componentid);
  2887. #else
  2888. return 1;
  2889. #endif
  2890. }
  2891. #if defined _ALS_OnVehicleMod
  2892. #undef OnVehicleMod
  2893. #else
  2894. #define _ALS_OnVehicleMod
  2895. #endif
  2896. #define OnVehicleMod EVF_OnVehicleMod
  2897. #if defined EVF_OnVehicleMod
  2898. forward EVF_OnVehicleMod(playerid, vehicleid, componentid);
  2899. #endif
  2900. #if defined EVF_Streamer
  2901. EVF::Function:: EVF::AttachObjectToVehicle(STREAMER_TAG_OBJECT objectid,vehicleid,Float:OffsetX,Float:OffsetY,Float:OffsetZ,Float:RotX,Float:RotY,Float:RotZ){
  2902. for(new i = 0; i < MAX_VEHICLE_ATTACHED_OBJECTS; i++){
  2903. if(!IsValidDynamicObject(EVF::VehicleTempData[vehicleid][e_attached_object][i])){
  2904. if(AttachDynamicObjectToVehicle(objectid,vehicleid,OffsetX,OffsetY,OffsetZ,RotX,RotY,RotZ)){
  2905. EVF::VehicleTempData[vehicleid][e_attached_object][i] = objectid;
  2906. return true;
  2907. }
  2908. }
  2909. }
  2910. return false;
  2911. }
  2912. #if defined _ALS_AttachDynamicObjectToV
  2913. #undef AttachDynamicObjectToVehicle
  2914. #else
  2915. #define _ALS_AttachDynamicObjectToV
  2916. #endif
  2917. #define AttachDynamicObjectToVehicle EVF_AttachObjectToVehicle
  2918. //Hook: OnPlayerEditDynamicObject
  2919. public OnPlayerEditDynamicObject(playerid,STREAMER_TAG_OBJECT objectid,response,Float:x,Float:y,Float:z,Float:rx,Float:ry,Float:rz){
  2920. if(IsValidVehicle(EVF::PlayerTempData[playerid][e_editor_vehicle])){
  2921. if(EVF::PlayerTempData[playerid][e_editor_object] == STREAMER_TAG_OBJECT INVALID_STREAMER_ID){
  2922. if(GetVehiclePropertyValue(EVF::PlayerTempData[playerid][e_editor_vehicle],e_VEHICLE_EDITOR) == _:objectid){
  2923. SetVehiclePos(EVF::PlayerTempData[playerid][e_editor_vehicle],x,y,z);
  2924. SetVehicleZAngle(EVF::PlayerTempData[playerid][e_editor_vehicle],rz);
  2925. CallLocalFunction("OnPlayerEditVehicle","iiiffff",playerid,EVF::PlayerTempData[playerid][e_editor_vehicle],response,x,y,z,rz);
  2926. switch(response){
  2927. case EDIT_RESPONSE_CANCEL, EDIT_RESPONSE_FINAL:{
  2928. DestroyDynamicObject(objectid);
  2929. SetVehiclePropertyValue(EVF::PlayerTempData[playerid][e_editor_vehicle],e_VEHICLE_EDITOR,INVALID_STREAMER_ID);
  2930. SetVehicleVelocity(EVF::PlayerTempData[playerid][e_editor_vehicle],0.0,0.0,0.0);
  2931. EVF::PlayerTempData[playerid][e_editor_vehicle] = INVALID_VEHICLE_ID;
  2932. EVF::PlayerTempData[playerid][e_editor_object] = STREAMER_TAG_OBJECT INVALID_STREAMER_ID;
  2933. }
  2934. }
  2935. }
  2936. } else {
  2937. if(GetVehiclePropertyValue(EVF::PlayerTempData[playerid][e_editor_vehicle],e_VEHICLE_EDITOR) == _:objectid){
  2938. switch(response){
  2939. case EDIT_RESPONSE_CANCEL, EDIT_RESPONSE_FINAL:{
  2940. new Float:pos[4];
  2941. GetVehiclePos(EVF::PlayerTempData[playerid][e_editor_vehicle],pos[0],pos[1],pos[2]);
  2942. GetVehicleZAngle(EVF::PlayerTempData[playerid][e_editor_vehicle],pos[3]);
  2943. new Float:new_pos[4];
  2944. new_pos[0] = x - pos[0];
  2945. new_pos[1] = y - pos[1];
  2946. new_pos[2] = z - pos[2];
  2947. new_pos[3] = rz - pos[3];
  2948. new Float:final_pos[2];
  2949. final_pos[0] = (new_pos[0] * floatcos(new_pos[3],degrees)) + (new_pos[1] * floatsin(new_pos[3],degrees));
  2950. final_pos[1] = (new_pos[1] * floatcos(new_pos[3],degrees)) - (new_pos[0] * floatsin(new_pos[3],degrees));
  2951. AttachDynamicObjectToVehicle(EVF::PlayerTempData[playerid][e_editor_object],EVF::PlayerTempData[playerid][e_editor_vehicle],final_pos[0],final_pos[1],new_pos[2],rx,ry,new_pos[3]);
  2952. SetVehiclePropertyValue(EVF::PlayerTempData[playerid][e_editor_vehicle],e_VEHICLE_EDITOR,0);
  2953. EVF::PlayerTempData[playerid][e_editor_vehicle] = INVALID_VEHICLE_ID;
  2954. EVF::PlayerTempData[playerid][e_editor_object] = STREAMER_TAG_OBJECT INVALID_STREAMER_ID;
  2955. return CallLocalFunction("OnPlayerEditVehicleObject","iiiffffff",playerid,EVF::PlayerTempData[playerid][e_editor_vehicle],response,final_pos[0],final_pos[1],new_pos[2],rx,ry,new_pos[3]);
  2956. }
  2957. }
  2958. CallLocalFunction("OnPlayerEditVehicleObject","iiiffffff",playerid,EVF::PlayerTempData[playerid][e_editor_vehicle],response,x,y,z,rx,ry,rz);
  2959. }
  2960. }
  2961. }
  2962. #if defined EVF_OnPlayerEditDynamicObject
  2963. EVF::OnPlayerEditDynamicObject(playerid,objectid,response,x,y,z,rx,ry,rz);
  2964. #endif
  2965. return 1;
  2966. }
  2967. #if defined _ALS_OnPlayerEditDynamicObject
  2968. #undef OnPlayerEditDynamicObject
  2969. #else
  2970. #define _ALS_OnPlayerEditDynamicObject
  2971. #endif
  2972. #define OnPlayerEditDynamicObject EVF_OnPlayerEditDynamicObject
  2973. #if defined EVF_OnPlayerEditDynamicObject
  2974. forward EVF_OnPlayerEditDynamicObject(playerid,STREAMER_TAG_OBJECT objectid,response,Float:x,Float:y,Float:z,Float:rx,Float:ry,Float:rz);
  2975. #endif
  2976. #endif
  2977. //Hook: OnPlayerUpdate
  2978. public OnPlayerUpdate(playerid){
  2979. if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER){
  2980. new vehicleid = GetPlayerVehicleID(playerid), Float:speedcap = GetVehicleSpeedCap(vehicleid);
  2981. if(speedcap != 0.0){
  2982. new Float:vel[3], Float:speed;
  2983. GetVehicleVelocity(vehicleid,vel[0],vel[1],vel[2]);
  2984. speed = EVF::GetVehicleSpeed(vehicleid);
  2985. if(speed > speedcap && speed > 0.0){
  2986. CallRemoteFunction("OnPlayerReachSpeedCapLimit","iif",playerid,vehicleid,speed);
  2987. vel[0] = (vel[0] / speed) * speedcap;
  2988. vel[1] = (vel[1] / speed) * speedcap;
  2989. vel[2] = (vel[2] / speed) * speedcap;
  2990. SetVehicleVelocity(vehicleid,vel[0],vel[1],vel[2]);
  2991. }
  2992. }
  2993. new trailerid = GetVehicleTrailer(vehicleid);
  2994. if(EVF::VehicleTrailerID[vehicleid] != trailerid){
  2995. if(trailerid != 0){
  2996. CallRemoteFunction("OnTrailerHooked","iii",playerid,vehicleid,trailerid);
  2997. #if defined EVF_Streamer
  2998. EVF::SetCarBlinking(trailerid,EVF::BlinkSide[vehicleid]);
  2999. #endif
  3000. } else {
  3001. if(EVF::VehicleTrailerID[vehicleid] != INVALID_VEHICLE_ID){
  3002. CallRemoteFunction("OnTrailerUnhooked","iii",playerid,vehicleid,EVF::VehicleTrailerID[vehicleid]);
  3003. #if defined EVF_Streamer
  3004. if(GetPlayerVehicleSeat(playerid) == 0){
  3005. EVF::DisableCarBlinking(EVF::VehicleTrailerID[vehicleid]);
  3006. }
  3007. #endif
  3008. }
  3009. }
  3010. EVF::VehicleTrailerID[vehicleid] = trailerid;
  3011. }
  3012. }
  3013. #if defined EVF_OnPlayerUpdate
  3014. EVF::OnPlayerUpdate(playerid);
  3015. #endif
  3016. return 1;
  3017. }
  3018. #if defined EVF_OnPlayerUpdate
  3019. forward EVF_OnPlayerUpdate(playerid);
  3020. #endif
  3021. #if defined _ALS_OnPlayerUpdate
  3022. #undef OnPlayerUpdate
  3023. #else
  3024. #define _ALS_OnPlayerUpdate
  3025. #endif
  3026. #define OnPlayerUpdate EVF_OnPlayerUpdate
  3027. //Hook: OnPlayerStateChange
  3028. public OnPlayerStateChange(playerid,newstate,oldstate){
  3029. if(newstate == PLAYER_STATE_DRIVER){
  3030. new vehicleid = GetPlayerVehicleID(playerid);
  3031. if(IsVehicleBombed(vehicleid)){
  3032. if(!IsVehicleBombActivated(vehicleid)){
  3033. CallRemoteFunction("OnVehicleBombActivate","i",vehicleid);
  3034. new interval = (GetVehicleBomb(vehicleid) - 1750);
  3035. if(interval < 1750){
  3036. SetVehicleParams(vehicleid,VEHICLE_TYPE_ALARM,1);
  3037. SetVehiclePropertyValue(vehicleid,e_VEHICLE_BOMB_TIMER,SetTimerEx("EVF_OnVehicleBombExplode",GetVehicleBomb(vehicleid),false,"ii",playerid,vehicleid));
  3038. } else {
  3039. SetVehiclePropertyValue(vehicleid,e_VEHICLE_BOMB_TIMER,SetTimerEx("EVF_OnVehicleBombActivate",interval,false,"ii",playerid,vehicleid));
  3040. }
  3041. }
  3042. }
  3043. if(IsVehicleSticky(vehicleid)){
  3044. SetVehicleParams(vehicleid,VEHICLE_TYPE_ENGINE,0);
  3045. }
  3046. }
  3047. if(oldstate == PLAYER_STATE_DRIVER){
  3048. new vehicleid = GetPlayerVehicleID(playerid);
  3049. if(IsVehicleSticky(vehicleid)){
  3050. SetVehicleParams(vehicleid,VEHICLE_TYPE_ENGINE,1);
  3051. }
  3052. #if defined EVF_Streamer
  3053. EVF::DisableCarBlinking(vehicleid);
  3054. new trailerid = GetVehicleTrailer(vehicleid);
  3055. if(IsValidVehicle(trailerid)) EVF::DisableCarBlinking(trailerid);
  3056. #endif
  3057. }
  3058. #if defined EVF_OnPlayerStateChange
  3059. EVF::OnPlayerStateChange(playerid,newstate,oldstate);
  3060. #endif
  3061. return 1;
  3062. }
  3063. #if defined EVF_OnPlayerStateChange
  3064. forward EVF_OnPlayerStateChange(playerid,newstate,oldstate);
  3065. #endif
  3066. #if defined _ALS_OnPlayerStateChange
  3067. #undef OnPlayerStateChange
  3068. #else
  3069. #define _ALS_OnPlayerStateChange
  3070. #endif
  3071. #define OnPlayerStateChange EVF_OnPlayerStateChange
  3072. //Hook: OnPlayerKeyStateChange
  3073. public OnPlayerKeyStateChange(playerid, newkeys, oldkeys){
  3074. if(newkeys & KEY_CROUCH){
  3075. if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER){
  3076. new horn = GetVehicleHorn(GetPlayerVehicleID(playerid));
  3077. if(horn != 0){
  3078. new Float:pos[3];
  3079. GetPlayerPos(playerid,pos[0],pos[1],pos[2]);
  3080. EVF::Foreach(i){
  3081. if(IsPlayerInRangeOfPoint(i,35.0,pos[0],pos[1],pos[2])){
  3082. PlayerPlaySound(playerid,horn,pos[0],pos[1],pos[2]);
  3083. }
  3084. }
  3085. }
  3086. }
  3087. }
  3088. #if defined EVF_Streamer
  3089. if(EVF::IsToggledVehicleBlinking()){
  3090. new vehicleid = GetPlayerVehicleID(playerid);
  3091. if(IsValidVehicle(vehicleid)){
  3092. if(GetPlayerVehicleSeat(playerid) == 0){
  3093. if(EVF::KeyPressed(KEY_LOOK_BEHIND)){
  3094. if(!EVF::IsCarBlinking(vehicleid)){
  3095. EVF::SetCarBlinking(vehicleid,EVF_CAR_BLINK_EMERGENCY);
  3096. } else {
  3097. EVF::DisableCarBlinking(vehicleid);
  3098. }
  3099. }
  3100. if(EVF::KeyPressed(KEY_LOOK_LEFT)){
  3101. if(!EVF::IsCarBlinking(vehicleid)){
  3102. EVF::SetCarBlinking(vehicleid,EVF_CAR_BLINK_LEFT);
  3103. } else {
  3104. EVF::DisableCarBlinking(vehicleid);
  3105. }
  3106. } else if(EVF::KeyPressed(KEY_LOOK_RIGHT)){
  3107. if(!EVF::IsCarBlinking(vehicleid)){
  3108. EVF::SetCarBlinking(vehicleid,EVF_CAR_BLINK_RIGHT);
  3109. } else {
  3110. EVF::DisableCarBlinking(vehicleid);
  3111. }
  3112. }
  3113. if(EVF::IsCarBlinking(vehicleid)){
  3114. new Float:tmp_a, Float:tmp_b = EVF::BlinkR[vehicleid];
  3115. GetVehicleZAngle(vehicleid,tmp_a);
  3116. switch(EVF::BlinkSide[vehicleid]){
  3117. case EVF_CAR_BLINK_LEFT: {
  3118. tmp_b += 55.0;
  3119. if(tmp_b > 360.0) tmp_b -= 360.0;
  3120. if(tmp_a < tmp_b-180.0) tmp_a = tmp_a+360.0;
  3121. if(tmp_b < tmp_a-180.0) tmp_b = tmp_b+360.0;
  3122. if(tmp_a > tmp_b){
  3123. EVF::DisableCarBlinking(vehicleid);
  3124. }
  3125. }
  3126. case EVF_CAR_BLINK_RIGHT: {
  3127. tmp_b -= 55.0;
  3128. if(tmp_b < 0.0) tmp_b = 360.0 + tmp_b;
  3129. if(tmp_a < tmp_b-180.0) tmp_a = tmp_a+360.0;
  3130. if(tmp_b < tmp_a-180.0) tmp_b = tmp_b+360.0;
  3131. if(tmp_a < tmp_b){
  3132. EVF::DisableCarBlinking(vehicleid);
  3133. }
  3134. }
  3135. }
  3136. }
  3137. }
  3138. }
  3139. }
  3140. #endif
  3141. #if defined EVF_OnPlayerKeyStateChange
  3142. EVF::OnPlayerKeyStateChange(playerid, newkeys, oldkeys);
  3143. #endif
  3144. return 1;
  3145. }
  3146. #if defined EVF_OnPlayerKeyStateChange
  3147. forward EVF_OnPlayerKeyStateChange(playerid, newkeys, oldkeys);
  3148. #endif
  3149. #if defined _ALS_OnPlayerKeyStateChange
  3150. #undef OnPlayerKeyStateChange
  3151. #else
  3152. #define _ALS_OnPlayerKeyStateChange
  3153. #endif
  3154. #define OnPlayerKeyStateChange EVF_OnPlayerKeyStateChange
  3155. //Hook: OnVehicleSpawn
  3156. public OnVehicleSpawn(vehicleid){
  3157. SetVehiclePropertyValue(vehicleid,e_VEHICLE_PAINTJOB,RESET_PAINTJOB_ID);
  3158. new color1,color2;
  3159. if(EVF::GetVehicleColor(vehicleid,color1,color2)){
  3160. ChangeVehicleColor(vehicleid,color1,color2);
  3161. }
  3162. #if defined EVF_Streamer
  3163. EVF::DisableCarBlinking(vehicleid);
  3164. #endif
  3165. new Float:pos[3];
  3166. GetVehiclePos(vehicleid,pos[0],pos[1],pos[2]);
  3167. new Float:angle;
  3168. GetVehicleZAngle(vehicleid,angle);
  3169. new Float:vehicle_pos[3],Float:vehicle_angle,vehicle_worldid,vehicle_interiorid;
  3170. EVF::GetVehicleSpawnInfo(vehicleid,vehicle_pos[0],vehicle_pos[1],vehicle_pos[2],vehicle_angle,vehicle_worldid,vehicle_interiorid);
  3171. if(vehicle_pos[0] != 0.0 && vehicle_pos[1] != 0.0 && vehicle_pos[2] != 0.0){
  3172. if(pos[0] != vehicle_pos[0] || pos[1] != vehicle_pos[1] || pos[2] != vehicle_pos[2] || angle != vehicle_angle || vehicle_worldid != GetVehicleVirtualWorld(vehicleid) || vehicle_interiorid != GetVehicleInterior(vehicleid)){
  3173. TeleportVehicle(vehicleid,vehicle_pos[0],vehicle_pos[1],vehicle_pos[2],vehicle_angle,vehicle_worldid,vehicle_interiorid);
  3174. }
  3175. }
  3176. #if defined EVF_OnVehicleSpawn
  3177. EVF::OnVehicleSpawn(vehicleid);
  3178. #endif
  3179. return 1;
  3180. }
  3181. #if defined EVF_OnVehicleSpawn
  3182. forward EVF_OnVehicleSpawn(vehicleid);
  3183. #endif
  3184. #if defined _ALS_OnVehicleSpawn
  3185. #undef OnVehicleSpawn
  3186. #else
  3187. #define _ALS_OnVehicleSpawn
  3188. #endif
  3189. #define OnVehicleSpawn EVF_OnVehicleSpawn
  3190. //Hook: OnVehicleDeath
  3191. /*public OnVehicleDeath(vehicleid,killerid){
  3192. #if defined EVF_Streamer
  3193. EVF::DisableCarBlinking(vehicleid);
  3194. #endif
  3195. #if defined EVF_OnVehicleDeath
  3196. EVF::OnVehicleDeath(vehicleid,killerid);
  3197. #endif
  3198. return 1;
  3199. }
  3200. #if defined EVF_OnVehicleDeath
  3201. forward EVF_OnVehicleDeath(vehicleid,killerid);
  3202. #endif
  3203. #if defined _ALS_OnVehicleDeath
  3204. #undef OnVehicleDeath
  3205. #else
  3206. #define _ALS_OnVehicleDeath
  3207. #endif
  3208. #define OnVehicleDeath EVF_OnVehicleDeath
  3209. */
  3210. EVF::Public:: EVF::OnRequestResponse(index, response_code, data[]){
  3211. if(response_code == 200){
  3212. if(isnull(data)) return 0;
  3213. new EVF::version[16], EVF::ver, EVF::file_ver = EVF_Version;
  3214. strmid(EVF::version,data,0,strlen(data));
  3215. EVF::ver = strval(EVF::version);
  3216. if(EVF::ver > EVF::file_ver){
  3217. print(" ");
  3218. printf("[ADM] Info: Please update your EVF include to v%d.%d.%d from here:",(EVF::ver / 10000),((EVF::ver % 10000) / 100),((EVF::ver % 10000) % 100));
  3219. print("http://8.ct8.pl/d/EVF.inc");
  3220. print(" ");
  3221. }
  3222. }
  3223. return 1;
  3224. }
  3225. new EVF::UpdateTimer = -1;
  3226. EVF::Function:: EVF::Init(){
  3227. SetSVarInt("ADM:EVF:ACTIVE",EVF::GetActiveCount()+1);
  3228. //Welcome to EVF
  3229. new EVF::ver_name[16];
  3230. format(EVF::ver_name,sizeof(EVF::ver_name),"%d.%d.%d",(EVF_Version / 10000),((EVF_Version % 10000) / 100),((EVF_Version % 10000) % 100));
  3231. if(GetSVarInt("ADM:EVF:INIT") == 0){
  3232. SetSVarInt("ADM:EVF:INIT",1);
  3233. printf("[ADM] Info: Load EVF v%s for SA:MP %s by Abyss Morgan",EVF::ver_name,EVF_SAMP_Version);
  3234. }
  3235. if(GetSVarInt("ADM:EVF:VERCHECK") == 0){
  3236. SetSVarInt("ADM:EVF:VERCHECK",1);
  3237. new EVF::send_data[50];
  3238. format(EVF::send_data,sizeof(EVF::send_data),"8.ct8.pl/evf/check.php?version=%d",EVF_Version);
  3239. HTTP(0,HTTP_GET,EVF::send_data,"","EVF_OnRequestResponse");
  3240. }
  3241. EVF::UpdateTimer = SetTimerEx("OnVehicleTimeUpdate",VEHICLE_UPDATE_INTERVAL,true,"");
  3242. }
  3243. EVF::Function:: EVF::Exit(){
  3244. SetSVarInt("ADM:EVF:ACTIVE",EVF::GetActiveCount()-1);
  3245. //Goodbye EVF
  3246. new EVF::ver_name[16];
  3247. format(EVF::ver_name,sizeof(EVF::ver_name),"%d.%d.%d",(EVF_Version / 10000),((EVF_Version % 10000) / 100),((EVF_Version % 10000) % 100));
  3248. if(EVF::GetActiveCount() == 0){
  3249. SetSVarInt("ADM:EVF:INIT",0);
  3250. printf("[ADM] Info: Unload EVF v%s for SA:MP %s by Abyss Morgan",EVF::ver_name,EVF_SAMP_Version);
  3251. }
  3252. if(EVF::UpdateTimer != -1) KillTimer(EVF::UpdateTimer);
  3253. }
  3254. new bool:CRC_EVFInit = true,
  3255. bool:CRC_EVFExit = true;
  3256. //Hook: OnFilterScriptInit
  3257. public OnFilterScriptInit(){
  3258. if(CRC_EVFInit){
  3259. CRC_EVFInit = false;
  3260. EVF::Init();
  3261. }
  3262. #if defined EVF_OnFilterScriptInit
  3263. EVF::OnFilterScriptInit();
  3264. #endif
  3265. return 1;
  3266. }
  3267. #if defined _ALS_OnFilterScriptInit
  3268. #undef OnFilterScriptInit
  3269. #else
  3270. #define _ALS_OnFilterScriptInit
  3271. #endif
  3272. #define OnFilterScriptInit EVF_OnFilterScriptInit
  3273. #if defined EVF_OnFilterScriptInit
  3274. forward EVF_OnFilterScriptInit();
  3275. #endif
  3276. //Hook: OnGameModeInit
  3277. public OnGameModeInit(){
  3278. if(CRC_EVFInit){
  3279. CRC_EVFInit = false;
  3280. EVF::Init();
  3281. }
  3282. #if defined EVF_OnGameModeInit
  3283. EVF::OnGameModeInit();
  3284. #endif
  3285. return 1;
  3286. }
  3287. #if defined _ALS_OnGameModeInit
  3288. #undef OnGameModeInit
  3289. #else
  3290. #define _ALS_OnGameModeInit
  3291. #endif
  3292. #define OnGameModeInit EVF_OnGameModeInit
  3293. #if defined EVF_OnGameModeInit
  3294. forward EVF_OnGameModeInit();
  3295. #endif
  3296. //Hook: OnFilterScriptExit
  3297. public OnFilterScriptExit(){
  3298. if(CRC_EVFExit){
  3299. CRC_EVFExit = false;
  3300. EVF::Exit();
  3301. }
  3302. #if defined EVF_OnFilterScriptExit
  3303. EVF::OnFilterScriptExit();
  3304. #endif
  3305. return 1;
  3306. }
  3307. #if defined _ALS_OnFilterScriptExit
  3308. #undef OnFilterScriptExit
  3309. #else
  3310. #define _ALS_OnFilterScriptExit
  3311. #endif
  3312. #define OnFilterScriptExit EVF_OnFilterScriptExit
  3313. #if defined EVF_OnFilterScriptExit
  3314. forward EVF_OnFilterScriptExit();
  3315. #endif
  3316. //Hook: OnGameModeExit
  3317. public OnGameModeExit(){
  3318. if(CRC_EVFExit){
  3319. CRC_EVFExit = false;
  3320. EVF::Exit();
  3321. }
  3322. #if defined EVF_OnGameModeExit
  3323. EVF::OnGameModeExit();
  3324. #endif
  3325. return 1;
  3326. }
  3327. #if defined _ALS_OnGameModeExit
  3328. #undef OnGameModeExit
  3329. #else
  3330. #define _ALS_OnGameModeExit
  3331. #endif
  3332. #define OnGameModeExit EVF_OnGameModeExit
  3333. #if defined EVF_OnGameModeExit
  3334. forward EVF_OnGameModeExit();
  3335. #endif
  3336. #pragma unused EVF_VehicleName
  3337. #pragma unused EVF_TopSpeed
  3338. #pragma unused EVF_PlayerTempData
  3339. #pragma unused EVF_NeonOffsetData
  3340. #if !defined _3D_Tryg
  3341. #pragma unused EVF_WeaponDamage
  3342. #endif
  3343. //EOF