EVF.inc 152 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136
  1. /**********************************************************************************************************************************
  2. * *
  3. * )( Extended Vehicle Functions )( *
  4. * *
  5. * Copyright © 2017 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/SAM *
  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.1.1 *
  16. * SA:MP Version: 0.3.7 (REQUIRE) *
  17. * Streamer Version: 2.9.1 *
  18. * *
  19. * Functions: *
  20. * bool:IsValidVehicleModelID(modelid); *
  21. * GetVehiclePanels(vehicleid,&front_left,&front_right,&rear_left,&rear_right,&windshield,&front_bumper,&rear_bumper); *
  22. * SetVehiclePanels(vehicleid,front_left,front_right,rear_left,rear_right,windshield,front_bumper,rear_bumper); *
  23. * GetVehicleLights(vehicleid,&front_left_light,&front_right_light,&back_lights); *
  24. * SetVehicleLights(vehicleid,front_left_light,front_right_light,back_lights); *
  25. * GetVehicleDoors(vehicleid,&bonnet,&boot,&driver_door,&passenger_door); *
  26. * SetVehicleDoors(vehicleid,bonnet,boot,driver_door,passenger_door); *
  27. * GetVehicleTires(vehicleid,&front_left,&front_right,&rear_left,&rear_right); *
  28. * SetVehicleTires(vehicleid,front_left,front_right,rear_left,rear_right); *
  29. * GetVehicleWindowState(vehicleid,doorid); *
  30. * SetVehicleWindowState(vehicleid,doorid,window_state); *
  31. * GetVehicleDoorState(vehicleid,doorid); *
  32. * SetVehicleDoorState(vehicleid,doorid,door_state); *
  33. * bool:IsValidVehicleDoor(vehicleid,doorid); *
  34. * GetVehicleModelDoorAmount(modelid); *
  35. * GetVehicleDoorAmount(vehicleid); *
  36. * SwitchVehicleEngine(vehicleid,bool:engine_status); *
  37. * SwitchVehicleLight(vehicleid,bool:light_status); *
  38. * SwitchVehicleAlarm(vehicleid,bool:alarm_status); *
  39. * SwitchVehicleDoors(vehicleid,bool:doors_status); *
  40. * SwitchVehicleBonnet(vehicleid,bool:bonnet_status); *
  41. * SwitchVehicleBoot(vehicleid,bool:boot_status); *
  42. * SwitchVehicleObjective(vehicleid,bool:objective_status); *
  43. * GetVehicleParams(vehicleid,type); *
  44. * SetVehicleParams(vehicleid,type,status,delay = 0); *
  45. * GetVehicleRandomColors(modelid,&color1,&color2); *
  46. * GetNearestVehicle(vehicleid); *
  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. * EVF::IsPlayerInModShop(playerid); *
  94. * IsValidComponentForVehicle(vehicleid,componentid); *
  95. * GetVehicleComponentPrice(componentid); *
  96. * GetVehicleName(vehicleid); *
  97. * GetVehicleModelName(modelid); *
  98. * *
  99. * Remote functions: *
  100. * EVF_ImportVehicle(vehicleid,modelid,Float:x,Float:y,Float:z,Float:angle,color1,color2,worldid,interiorid,unoccupied_damage); *
  101. * EVF_RemoveVehicle(vehicleid); *
  102. * *
  103. * Compatible with YSF Functions: *
  104. * GetVehicleColor(vehicleid,&color1,&color2); *
  105. * GetVehiclePaintjob(vehicleid); *
  106. * GetVehicleInterior(vehicleid); *
  107. * EVF::GetVehicleSpawnInfo(vehicleid,&Float:x,&Float:y,&Float:z,&Float:rotation,&worldid,&interiorid); *
  108. * EVF::SetVehicleSpawnInfo(vehicleid,Float:x,Float:y,Float:z,Float:rotation,worldid,interiorid); *
  109. * IsVehicleOccupied(vehicleid); *
  110. * *
  111. * Callbacks: *
  112. * OnVehicleCreated(vehicleid); //Called when a vehicle is created. *
  113. * OnVehicleDestroyed(vehicleid); //Called when a vehicle is deleted. *
  114. * OnTrailerHooked(playerid,vehicleid,trailerid); //Called when a trailer is hooked. *
  115. * OnTrailerUnhooked(playerid,vehicleid,trailerid); //Called when a trailer is unhooked. *
  116. * OnPlayerShotVehicle(playerid,vehicleid,weaponid,Float:amount,bodypart); //Called when a player shoots at a vehicle. *
  117. * OnVehiclePosChange(vehicleid,Float:newx,Float:newy,Float:newz,Float:newangle,Float:oldx,Float:oldy,Float:oldz,Float:oldangle); *
  118. * OnVehicleVelocityChange(vehicleid,Float:newx,Float:newy,Float:newz,Float:oldx,Float:oldy,Float:oldz); *
  119. * OnVehicleHealthChange(vehicleid,Float:newhealth,Float:oldhealth); *
  120. * OnVehicleFuelChange(vehicleid,newfuel,oldfuel); *
  121. * OnVehicleBombDeactivate(vehicleid); *
  122. * OnVehicleBombExplode(vehicleid); *
  123. * OnPlayerEditVehicle(playerid,vehicleid,response,Float:fX,Float:fY,Float:fZ,Float:fRotZ); *
  124. * OnPlayerEditVehicleObject(playerid,vehicleid,response,Float:x,Float:y,Float:z,Float:rx,Float:ry,Float:rz); *
  125. * OnPlayerReachSpeedCapLimit(playerid,vehicleid,Float:speed); *
  126. * OnVehicleBombActivate(vehicleid); *
  127. * OnVehicleModEx(playerid,vehicleid,componentid,price,illegal); *
  128. * *
  129. * Definitions: *
  130. * INVALID_SEAT_ID *
  131. * INVALID_PAINTJOB_ID *
  132. * VEHICLE_UPDATE_INTERVAL *
  133. * MAX_VEHICLE_ATTACHED_OBJECTS *
  134. * RESET_PAINTJOB_ID *
  135. * MAX_VEHICLE_PARAMS *
  136. * MAX_VEHICLE_MODELS *
  137. * DEFAULT_VEHICLE_FUEL *
  138. * VEHICLE_SPEED_MULTIPLIER *
  139. * MULTIPLIER_FUEL_SYSTEM *
  140. * *
  141. * BONNET_HEALTHY_CLOSED *
  142. * BONNET_HEALTHY_OPENED *
  143. * BONNET_DAMAGED_CLOSED *
  144. * BONNET_DAMAGED_OPENED *
  145. * BONNET_MISSING *
  146. * *
  147. * BOOT_HEALTHY_CLOSED *
  148. * BOOT_HEALTHY_OPENED *
  149. * BOOT_DAMAGED_CLOSED *
  150. * BOOT_DAMAGED_OPENED *
  151. * BOOT_MISSING *
  152. * *
  153. * DOOR_HEALTHY_CLOSED *
  154. * DOOR_HEALTHY_OPENED *
  155. * DOOR_DAMAGED_CLOSED *
  156. * DOOR_DAMAGED_OPENED *
  157. * DOOR_MISSING *
  158. * *
  159. * BUMPER_HEALTHY *
  160. * BUMPER_CRUSHED *
  161. * BUMPER_HANGING *
  162. * BUMPER_MISSING *
  163. * *
  164. * WINDSHIELD_HEALTHY *
  165. * WINDSHIELD_DAMAGED *
  166. * WINDSHIELD_MISSING *
  167. * *
  168. * LIGHT_ENABLE *
  169. * LIGHT_DISABLE *
  170. * *
  171. * TIRE_HEALTHY *
  172. * TIRE_DAMAGED *
  173. * *
  174. * DOOR_DRIVER *
  175. * DOOR_PASSENGER *
  176. * DOOR_BACKLEFF *
  177. * DOOR_BACKRIGHT *
  178. * *
  179. * VEHICLE_DAMAGE_PANELS *
  180. * VEHICLE_DAMAGE_DOORS *
  181. * VEHICLE_DAMAGE_LIGHTS *
  182. * VEHICLE_DAMAGE_TIRES *
  183. * *
  184. * RED_NEON *
  185. * BLUE_NEON *
  186. * GREEN_NEON *
  187. * YELLOW_NEON *
  188. * PINK_NEON *
  189. * WHITE_NEON *
  190. * *
  191. * MIN_VEHICLE_COMPONENT_ID *
  192. * MAX_VEHICLE_COMPONENT_ID *
  193. * *
  194. * Enums: *
  195. * enum 'EVF::VehicleProperties' *
  196. * # e_VEHICLE_PAINTJOB *
  197. * # e_VEHICLE_INTERIOR *
  198. * # e_VEHICLE_COLOR_1 *
  199. * # e_VEHICLE_COLOR_2 *
  200. * # e_VEHICLE_HORN *
  201. * # e_VEHICLE_SPAWN_X *
  202. * # e_VEHICLE_SPAWN_Y *
  203. * # e_VEHICLE_SPAWN_Z *
  204. * # e_VEHICLE_SPAWN_A *
  205. * # e_VEHICLE_SPAWN_VW *
  206. * # e_VEHICLE_SPAWN_INT *
  207. * # e_VEHICLE_SPEED_CAP *
  208. * # e_VEHICLE_FUEL_USE *
  209. * # e_VEHICLE_FUEL *
  210. * # e_VEHICLE_STICKY *
  211. * # e_VEHICLE_UNO_DAMAGE *
  212. * # e_VEHICLE_CAP_DAMAGE *
  213. * # e_VEHICLE_EDITOR *
  214. * # e_VEHICLE_DAMAGE_PANELS *
  215. * # e_VEHICLE_DAMAGE_DOORS *
  216. * # e_VEHICLE_DAMAGE_LIGHTS *
  217. * # e_VEHICLE_DAMAGE_TIRES *
  218. * # e_VEHICLE_BOMB *
  219. * # e_VEHICLE_BOMB_TIMER *
  220. * # e_VEHICLE_BULLETPROOF *
  221. * # e_VEHICLE_STORED *
  222. * *
  223. * enum 'EVF::VehicleBodyPart' *
  224. * # VEHICLE_BODYPART_UNKNOWN *
  225. * # VEHICLE_BODYPART_FL_WHEEL - Front Left *
  226. * # VEHICLE_BODYPART_FR_WHEEL - Front Right *
  227. * # VEHICLE_BODYPART_BL_WHEEL - Back Left *
  228. * # VEHICLE_BODYPART_BR_WHEEL - Back Right *
  229. * # VEHICLE_BODYPART_PETROLCAP *
  230. * *
  231. * enum 'EVF::ParamTypes' *
  232. * # VEHICLE_TYPE_ENGINE *
  233. * # VEHICLE_TYPE_LIGHTS *
  234. * # VEHICLE_TYPE_ALARM *
  235. * # VEHICLE_TYPE_DOORS *
  236. * # VEHICLE_TYPE_BONNET *
  237. * # VEHICLE_TYPE_BOOT *
  238. * # VEHICLE_TYPE_OBJECTIVE *
  239. * *
  240. **********************************************************************************************************************************/
  241. /*
  242. //Check Version EVF.inc
  243. #if !defined _EVF_include
  244. #error [ADM] You need EVF.inc v3.1.1
  245. #elseif !defined EVF_Version
  246. #error [ADM] Update you EVF.inc to v3.1.1
  247. #elseif (EVF_Version < 30101)
  248. #error [ADM] Update you EVF.inc to v3.1.1
  249. #endif
  250. */
  251. #if defined _EVF_include
  252. #endinput
  253. #endif
  254. #define _EVF_include
  255. #if (!defined GetPlayerPoolSize || !defined GetSVarInt)
  256. #error [ADM] This include requires SA:MP version 0.3.7 (github.com/AbyssMorgan/SA-MP/blob/master/samp/include)
  257. #endif
  258. #if defined _Vehicle_Ex
  259. #error [ADM] Please remove deprecated file VehicleEx.inc (already implemented)
  260. #endif
  261. #if defined gVehiclePetrolCapOffsets
  262. #error [ADM] Please remove deprecated file vehicleplus.inc (already implemented)
  263. #endif
  264. #if ((defined g_anltv_VehicleData) && (defined SetVehicleNeonLights))
  265. #error [ADM] Please remove deprecated file SetVehicleNeonLights.inc (already implemented)
  266. #endif
  267. //Update Checker
  268. #if !defined HTTP
  269. #tryinclude <a_http>
  270. #endif
  271. #if !defined HTTP
  272. #error [ADM] Please include a_http.inc before EVF.inc
  273. #endif
  274. #define EVF_Version (30101) //a.b.c 10000*a+100*b+c
  275. #define EVF_SAMP_Version "0.3.7"
  276. #define EVF_Function:: stock
  277. #define EVF_Public::%0(%1) forward %0(%1); public %0(%1)
  278. #define EVF:: EVF_
  279. //Detect Streamer Plugin
  280. #if ((defined Streamer_AppendArrayData) && (defined INVALID_STREAMER_ID))
  281. #define EVF_Streamer
  282. #endif
  283. #if !defined IsValidVehicle
  284. native IsValidVehicle(vehicleid);
  285. #endif
  286. #if !defined isnull
  287. #define isnull(%1) ((!(%1[0])) || (((%1[0]) == '\1') && (!(%1[1]))))
  288. #endif
  289. #if !defined INVALID_SEAT_ID
  290. #define INVALID_SEAT_ID -1
  291. #endif
  292. #if !defined INVALID_PAINTJOB_ID
  293. #define INVALID_PAINTJOB_ID -1
  294. #endif
  295. #if !defined MAX_VEHICLE_ATTACHED_OBJECTS
  296. #define MAX_VEHICLE_ATTACHED_OBJECTS 30
  297. #endif
  298. #if !defined VEHICLE_UPDATE_INTERVAL
  299. #define VEHICLE_UPDATE_INTERVAL 250
  300. #endif
  301. #if !defined VEHICLE_SPEED_MULTIPLIER
  302. #define VEHICLE_SPEED_MULTIPLIER 170.0
  303. #endif
  304. #if !defined MULTIPLIER_FUEL_SYSTEM
  305. #define MULTIPLIER_FUEL_SYSTEM 1
  306. #endif
  307. #define RESET_PAINTJOB_ID 3
  308. #define MAX_VEHICLE_PARAMS 7
  309. #define MAX_VEHICLE_MODELS 212
  310. #define DEFAULT_VEHICLE_FUEL 1000
  311. #define MAX_VEHICLE_FUEL DEFAULT_VEHICLE_FUEL
  312. #define BONNET_HEALTHY_CLOSED 0
  313. #define BONNET_HEALTHY_OPENED 1
  314. #define BONNET_DAMAGED_CLOSED 2
  315. #define BONNET_DAMAGED_OPENED 3
  316. #define BONNET_MISSING 4
  317. #define BOOT_HEALTHY_CLOSED 0
  318. #define BOOT_HEALTHY_OPENED 1
  319. #define BOOT_DAMAGED_CLOSED 2
  320. #define BOOT_DAMAGED_OPENED 3
  321. #define BOOT_MISSING 4
  322. #define DOOR_HEALTHY_CLOSED 0
  323. #define DOOR_HEALTHY_OPENED 1
  324. #define DOOR_DAMAGED_CLOSED 2
  325. #define DOOR_DAMAGED_OPENED 3
  326. #define DOOR_MISSING 4
  327. #define BUMPER_HEALTHY 0
  328. #define BUMPER_CRUSHED 1
  329. #define BUMPER_HANGING 2
  330. #define BUMPER_MISSING 3
  331. #define WINDSHIELD_HEALTHY 0
  332. #define WINDSHIELD_DAMAGED 1
  333. #define WINDSHIELD_MISSING 2
  334. #define LIGHT_ENABLE 0
  335. #define LIGHT_DISABLE 1
  336. #define TIRE_HEALTHY 0
  337. #define TIRE_DAMAGED 1
  338. #define DOOR_DRIVER 1
  339. #define DOOR_PASSENGER 2
  340. #define DOOR_BACKLEFF 3
  341. #define DOOR_BACKRIGHT 4
  342. #define VEHICLE_DAMAGE_PANELS 0
  343. #define VEHICLE_DAMAGE_DOORS 1
  344. #define VEHICLE_DAMAGE_LIGHTS 2
  345. #define VEHICLE_DAMAGE_TIRES 3
  346. #define RED_NEON 18647
  347. #define BLUE_NEON 18648
  348. #define GREEN_NEON 18649
  349. #define YELLOW_NEON 18650
  350. #define PINK_NEON 18651
  351. #define WHITE_NEON 18652
  352. #define MIN_VEHICLE_COMPONENT_ID 1000
  353. #define MAX_VEHICLE_COMPONENT_ID 1193
  354. enum EVF::VehicleProperties {
  355. e_VEHICLE_PAINTJOB,
  356. e_VEHICLE_INTERIOR,
  357. e_VEHICLE_COLOR_1,
  358. e_VEHICLE_COLOR_2,
  359. e_VEHICLE_HORN,
  360. e_VEHICLE_SPAWN_X,
  361. e_VEHICLE_SPAWN_Y,
  362. e_VEHICLE_SPAWN_Z,
  363. e_VEHICLE_SPAWN_A,
  364. e_VEHICLE_SPAWN_VW,
  365. e_VEHICLE_SPAWN_INT,
  366. e_VEHICLE_SPEED_CAP,
  367. e_VEHICLE_FUEL_USE,
  368. e_VEHICLE_FUEL,
  369. e_VEHICLE_STICKY,
  370. e_VEHICLE_UNO_DAMAGE,
  371. e_VEHICLE_CAP_DAMAGE,
  372. e_VEHICLE_EDITOR,
  373. e_VEHICLE_DAMAGE_PANELS,
  374. e_VEHICLE_DAMAGE_DOORS,
  375. e_VEHICLE_DAMAGE_LIGHTS,
  376. e_VEHICLE_DAMAGE_TIRES,
  377. e_VEHICLE_BOMB,
  378. e_VEHICLE_BOMB_TIMER,
  379. e_VEHICLE_BULLETPROOF,
  380. e_VEHICLE_STORED
  381. };
  382. enum EVF::VehicleBodyPart {
  383. VEHICLE_BODYPART_UNKNOWN,
  384. VEHICLE_BODYPART_FL_WHEEL, //front left
  385. VEHICLE_BODYPART_FR_WHEEL, //front right
  386. VEHICLE_BODYPART_BL_WHEEL, //back left
  387. VEHICLE_BODYPART_BR_WHEEL, //back right
  388. VEHICLE_BODYPART_PETROLCAP
  389. };
  390. enum EVF::ParamTypes {
  391. VEHICLE_TYPE_ENGINE,
  392. VEHICLE_TYPE_LIGHTS,
  393. VEHICLE_TYPE_ALARM,
  394. VEHICLE_TYPE_DOORS,
  395. VEHICLE_TYPE_BONNET,
  396. VEHICLE_TYPE_BOOT,
  397. VEHICLE_TYPE_OBJECTIVE
  398. };
  399. enum EVF::VehicleData {
  400. #if defined EVF_Streamer
  401. STREAMER_TAG_OBJECT e_attached_object[MAX_VEHICLE_ATTACHED_OBJECTS],
  402. #endif
  403. Float:e_vel_x,
  404. Float:e_vel_y,
  405. Float:e_vel_z,
  406. Float:e_pos_x,
  407. Float:e_pos_y,
  408. Float:e_pos_z,
  409. Float:e_pos_a,
  410. Float:e_health,
  411. e_uptime
  412. };
  413. enum EVF::PlayerData {
  414. e_editor_vehicle
  415. #if defined EVF_Streamer
  416. ,
  417. STREAMER_TAG_OBJECT e_editor_object
  418. #endif
  419. };
  420. enum EVF::NeonOffset {
  421. Float:EVF::NeonX,
  422. Float:EVF::NeonY,
  423. Float:EVF::NeonZ
  424. };
  425. new EVF::VehicleProperty[MAX_VEHICLES][EVF::VehicleProperties];
  426. new const EVF::NeonOffsetData[MAX_VEHICLE_MODELS][EVF::NeonOffset] = {
  427. {-0.924999,0.009999,-0.674999},
  428. {-0.979999,0.074999,-0.489999},
  429. {-1.034999,-0.029999,-0.579999},
  430. {-0.884999,1.834998,-1.099999},
  431. {-0.839999,-0.064999,-0.419999},
  432. {-0.914999,0.000000,-0.534999},
  433. {-1.129999,0.354999,-1.219999},
  434. {-1.214999,0.125000,-0.759999},
  435. {-0.664999,0.709999,-0.889999},
  436. {-0.914999,-0.294999,-0.474999},
  437. {-0.879999,0.000000,-0.389999},
  438. {-0.969999,0.004999,-0.559999},
  439. {-0.994999,-0.154999,-0.569999},
  440. {-0.919999,-0.069999,-0.719999},
  441. {-0.759999,-0.469999,-0.524999},
  442. {-0.949999,-0.009999,-0.524999},
  443. {-1.259999,-0.604999,-0.664999},
  444. {-2.255004,0.859999,-0.124999},
  445. {-1.004999,0.089999,-0.829999},
  446. {-0.934999,-0.009999,-0.584999},
  447. {-0.954999,-0.009999,-0.444999},
  448. {-0.929999,-0.029999,-0.589999},
  449. {-0.889999,0.009999,-0.609999},
  450. {-0.999999,0.164999,-0.714999},
  451. {-0.739999,0.039999,-0.234999},
  452. {-0.639999,2.475009,-0.789999},
  453. {-0.969999,0.000000,-0.464999},
  454. {-1.124999,-0.714999,-0.734999},
  455. {-1.124999,0.054999,-0.759999},
  456. {-0.844999,0.004999,-0.474999},
  457. {0.0,0.0,0.0},
  458. {-1.304998,2.300005,-0.714999},
  459. {0.0,0.0,0.0},
  460. {-0.579999,0.994999,-0.874999},
  461. {0.0,0.0,0.0},
  462. {0.0,0.0,0.0},
  463. {-0.859999,-0.024999,-0.489999},
  464. {-1.314998,2.245003,-0.724999},
  465. {-0.969999,-0.034999,-0.674999},
  466. {-0.884999,0.034999,-0.644999},
  467. {-0.914999,-0.045000,-0.899999},
  468. {0.0,0.0,0.0},
  469. {-1.004999,-0.074999,-0.604999},
  470. {-0.809999,2.770015,-1.174999},
  471. {-1.064999,0.000000,0.135000},
  472. {-0.949999,0.000000,-0.519999},
  473. {0.0,0.0,0.0},
  474. {-1.004999,0.259999,-0.769999},
  475. {0.0,0.0,0.0},
  476. {0.0,0.0,0.0},
  477. {0.0,0.0,0.0},
  478. {-0.984999,-0.194999,-0.519999},
  479. {0.0,0.0,0.0},
  480. {0.0,0.0,0.0},
  481. {0.0,0.0,0.0},
  482. {-0.579999,0.979999,-0.859999},
  483. {-0.764999,-0.179999,-0.464999},
  484. {0.0,0.0,0.0},
  485. {-0.959999,-0.039999,-0.594999},
  486. {-0.919999,-0.069999,-0.719999},
  487. {-1.399998,0.554999,-1.819998},
  488. {0.0,0.0,0.0},
  489. {0.0,0.0,0.0},
  490. {0.0,0.0,0.0},
  491. {0.0,0.0,0.0},
  492. {0.0,0.0,0.0},
  493. {-0.989999,-0.064999,-0.489999},
  494. {-0.989999,-0.044999,-0.484999},
  495. {0.0,0.0,0.0},
  496. {0.0,0.0,0.0},
  497. {-1.119999,-0.149999,-0.359999},
  498. {0.0,0.0,0.0},
  499. {0.0,0.0,0.0},
  500. {0.0,0.0,0.0},
  501. {-0.994999,-0.064999,-0.544999},
  502. {-0.904999,-0.054999,-0.549999},
  503. {0.0,0.0,0.0},
  504. {-0.979999,0.019999,-0.514999},
  505. {-0.804999,0.064999,-0.519999},
  506. {-0.854999,0.090000,-0.454999},
  507. {-0.879999,0.000000,-0.489999},
  508. {0.0,0.0,0.0},
  509. {-0.989999,0.000000,-0.759999},
  510. {-0.834999,-0.149999,-0.744999},
  511. {0.0,0.0,0.0},
  512. {-0.629999,0.164999,-0.374999},
  513. {0.0,0.0,0.0},
  514. {0.0,0.0,0.0},
  515. {0.0,0.0,0.0},
  516. {-1.019999,0.110000,-0.679999},
  517. {-1.054999,0.125000,-0.604999},
  518. {-0.874999,-0.009999,-0.569999},
  519. {-0.909999,0.000000,-0.459999},
  520. {0.0,0.0,0.0},
  521. {-0.909999,-0.199999,-0.639999},
  522. {-1.024999,0.184999,-0.809999},
  523. {-0.854999,0.029999,-0.469999},
  524. {0.0,0.0,0.0},
  525. {-1.149999,0.269999,-0.654999},
  526. {-0.969999,-1.404998,-0.199999},
  527. {-0.969999,0.189999,-0.574999},
  528. {0.0,0.0,0.0},
  529. {-0.909999,0.029999,-0.639999},
  530. {-0.909999,-0.184999,-0.639999},
  531. {-0.989999,-0.059999,-0.494999},
  532. {-1.019999,0.110000,-0.679999},
  533. {-0.904999,-0.249999,-0.509999},
  534. {-1.084999,-0.024999,-0.589999},
  535. {-1.334998,-0.424999,-0.979999},
  536. {0.0,0.0,0.0},
  537. {0.0,0.0,0.0},
  538. {0.0,0.0,0.0},
  539. {0.0,0.0,0.0},
  540. {0.0,0.0,0.0},
  541. {-0.969999,1.669998,-1.174999},
  542. {-1.454998,0.439999,-1.854998},
  543. {-0.989999,0.024999,-0.584999},
  544. {-0.959999,0.004999,-0.554999},
  545. {-1.049999,0.110000,-0.439999},
  546. {0.0,0.0,0.0},
  547. {0.0,0.0,0.0},
  548. {0.0,0.0,0.0},
  549. {0.0,0.0,0.0},
  550. {0.0,0.0,0.0},
  551. {-0.689999,1.489998,-1.319998},
  552. {-1.054999,0.499999,-0.329999},
  553. {-0.899999,0.000000,-0.564999},
  554. {-0.944999,0.154999,-0.419999},
  555. {-0.924999,0.059999,-0.529999},
  556. {-0.934999,-0.110000,-0.429999},
  557. {0.0,0.0,0.0},
  558. {-0.144999,0.314999,-0.444999},
  559. {0.0,0.0,0.0},
  560. {-0.924999,-0.034999,-0.479999},
  561. {-0.984999,0.164999,-0.564999},
  562. {-1.069999,-0.034999,-0.569999},
  563. {-0.954999,-0.019999,-0.579999},
  564. {0.0,0.0,0.0},
  565. {0.0,0.0,0.0},
  566. {-1.004999,-0.049999,-0.019999},
  567. {-1.024999,-0.090000,-0.639999},
  568. {-0.904999,0.000000,-0.414999},
  569. {-0.894999,0.014999,-0.539999},
  570. {-0.904999,0.009999,-0.409999},
  571. {-1.089999,0.000000,-0.709999},
  572. {-0.939999,-0.029999,-0.564999},
  573. {-1.039999,-0.100000,-0.474999},
  574. {-0.884999,0.059999,-0.479999},
  575. {-1.769998,1.484998,-1.774998},
  576. {-0.949999,0.105000,-0.439999},
  577. {-1.089999,-0.059999,-0.554999},
  578. {-0.964999,0.004999,-0.564999},
  579. {-1.034999,0.749999,-0.254999},
  580. {0.0,0.0,0.0},
  581. {-1.109999,0.009999,-0.534999},
  582. {-0.754999,0.000000,-0.464999},
  583. {-1.119999,0.000000,0.184999},
  584. {-1.129999,0.044999,0.074999},
  585. {-0.894999,-0.089999,-0.374999},
  586. {-0.964999,0.000000,-0.444999},
  587. {-1.004999,0.054999,-0.414999},
  588. {-0.919999,0.130000,-0.574999},
  589. {-0.909999,0.120000,-0.404999},
  590. {0.0,0.0,0.0},
  591. {0.0,0.0,0.0},
  592. {-0.824999,0.000000,-0.414999},
  593. {-0.989999,-0.049999,-0.479999},
  594. {-1.089999,0.309999,-0.609999},
  595. {-0.334999,0.100000,-0.374999},
  596. {0.0,0.0,0.0},
  597. {0.0,0.0,0.0},
  598. {0.0,0.0,0.0},
  599. {0.0,0.0,0.0},
  600. {0.0,0.0,0.0},
  601. {0.0,0.0,0.0},
  602. {-0.924999,0.004999,-0.334999},
  603. {-1.019999,-0.140000,-0.419999},
  604. {0.0,0.0,0.0},
  605. {-1.429998,-0.649999,-0.879999},
  606. {-1.014999,0.000000,-0.484999},
  607. {-1.089999,0.014999,-0.474999},
  608. {0.0,0.0,0.0},
  609. {-0.984999,-0.194999,-0.709999},
  610. {-0.674999,0.259999,0.130000},
  611. {0.0,0.0,0.0},
  612. {-1.019999,-0.009999,-0.354999},
  613. {0.0,0.0,0.0},
  614. {-1.009999,-0.064999,-0.534999},
  615. {-1.374998,0.000000,-0.664999},
  616. {-0.909999,0.000000,-0.359999},
  617. {0.0,0.0,0.0},
  618. {0.0,0.0,0.0},
  619. {0.0,0.0,0.0},
  620. {0.0,0.0,0.0},
  621. {0.0,0.0,0.0},
  622. {0.0,0.0,0.0},
  623. {-0.974999,0.000000,-0.469999},
  624. {-0.969999,0.000000,-0.464999},
  625. {-1.004999,-0.014999,-0.414999},
  626. {-1.019999,0.115000,-0.684999},
  627. {-0.959999,0.204999,-0.499999},
  628. {0.0,0.0,0.0},
  629. {-1.024999,0.000000,-0.549999},
  630. {-0.954999,0.034999,-0.629999},
  631. {-0.989999,-0.064999,-0.489999},
  632. {-0.904999,0.009999,-0.409999},
  633. {0.0,0.0,0.0},
  634. {0.0,0.0,0.0},
  635. {0.0,0.0,0.0},
  636. {-1.149999,0.269999,-0.654999},
  637. {0.0,0.0,0.0},
  638. {0.0,0.0,0.0}
  639. };
  640. new EVF::VehicleTrailerID[MAX_VEHICLES],
  641. EVF::VehicleTempData[MAX_VEHICLES][EVF::VehicleData],
  642. EVF::PlayerTempData[MAX_PLAYERS][EVF::PlayerData],
  643. EVF::ModShopStatus[MAX_PLAYERS];
  644. #if defined EVF_Streamer
  645. new STREAMER_TAG_OBJECT EVF::VehicleNeon[MAX_VEHICLES][2];
  646. #endif
  647. new const Float:EVF::TopSpeed[MAX_VEHICLE_MODELS] = {
  648. 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,
  649. 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,
  650. 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,
  651. 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,
  652. 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,
  653. 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,
  654. 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,
  655. 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,
  656. 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,
  657. 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,
  658. 151.0, 110.0, 169.0, 171.0, 148.0, 152.0, 0.0, 0.0, 0.0, 108.0, 0.0, 0.0
  659. };
  660. new const EVF::CarColors[][]={
  661. {16, 004, 001, 123, 001, 113, 001, 101, 001, 075, 001, 062, 001, 040, 001, 036, 001},
  662. {16, 041, 041, 047, 047, 052, 052, 066, 066, 074, 074, 087, 087, 091, 091, 113, 113},
  663. {16, 010, 010, 013, 013, 022, 022, 030, 030, 039, 039, 090, 090, 098, 098, 110, 110},
  664. {16, 036, 001, 037, 001, 030, 001, 028, 001, 025, 001, 040, 001, 101, 001, 113, 001},
  665. {16, 113, 039, 119, 050, 123, 092, 109, 100, 101, 101, 095, 105, 083, 110, 066, 025},
  666. {16, 011, 001, 024, 001, 036, 001, 040, 001, 075, 001, 091, 001, 123, 001, 004, 001},
  667. {2, 001, 001},
  668. {2, 003, 001},
  669. {2, 026, 026},
  670. {2, 001, 001},
  671. {16, 004, 001, 009, 001, 010, 001, 025, 001, 036, 001, 040, 001, 045, 001, 084, 001},
  672. {16, 012, 001, 064, 001, 123, 001, 116, 001, 112, 001, 106, 001, 080, 001, 075, 001},
  673. {16, 009, 001, 010, 008, 011, 001, 025, 008, 027, 001, 029, 008, 030, 001, 037, 008},
  674. {16, 087, 001, 088, 001, 091, 001, 105, 001, 109, 001, 119, 001, 004, 001, 025, 001},
  675. {16, 025, 001, 028, 001, 043, 001, 067, 001, 072, 001, 009, 001, 095, 001, 024, 001},
  676. {16, 020, 001, 025, 001, 036, 001, 040, 001, 062, 001, 075, 001, 092, 001, 000, 001},
  677. {2, 001, 003},
  678. {0, 000, 000},
  679. {16, 119, 119, 117, 227, 114, 114, 108, 108, 095, 095, 081, 081, 061, 061, 041, 041},
  680. {16, 045, 075, 047, 076, 033, 075, 013, 076, 054, 075, 069, 076, 059, 075, 087, 076},
  681. {2, 006, 001},
  682. {16, 004, 001, 013, 001, 025, 001, 030, 001, 036, 001, 040, 001, 075, 001, 095, 001},
  683. {14, 096, 025, 097, 025, 101, 025, 111, 031, 113, 036, 083, 057, 067, 059},
  684. {12, 001, 016, 001, 056, 001, 017, 001, 053, 001, 005, 001, 035},
  685. {16, 001, 000, 002, 002, 003, 002, 003, 006, 006, 016, 015, 030, 024, 053, 035, 061},
  686. {2, 043, 000},
  687. {16, 037, 037, 042, 042, 053, 053, 062, 062, 007, 007, 010, 010, 011, 011, 015, 015},
  688. {2, 000, 001},
  689. {2, 004, 075},
  690. {16, 012, 012, 013, 013, 014, 014, 001, 002, 002, 001, 001, 003, 003, 001, 010, 010},
  691. {2, 046, 026},
  692. {16, 071, 059, 075, 059, 092, 072, 047, 074, 055, 083, 059, 083, 071, 087, 082, 087},
  693. {2, 043, 000},
  694. {2, 043, 000},
  695. {14, 001, 001, 012, 012, 002, 002, 006, 006, 004, 004, 046, 046, 053, 053},
  696. {2, 001, 001},
  697. {14, 083, 001, 087, 001, 092, 001, 095, 001, 109, 001, 119, 045, 011, 001},
  698. {16, 054, 007, 079, 007, 087, 007, 095, 016, 098, 020, 105, 020, 123, 020, 125, 021},
  699. {2, 006, 076},
  700. {16, 057, 008, 008, 017, 043, 021, 054, 038, 067, 008, 037, 078, 065, 079, 025, 078},
  701. {16, 034, 034, 032, 032, 020, 020, 110, 110, 066, 066, 084, 084, 118, 118, 121, 121},
  702. {16, 002, 096, 079, 042, 082, 054, 067, 086, 126, 096, 070, 096, 110, 054, 067, 098},
  703. {16, 000, 000, 011, 105, 025, 109, 036, 000, 040, 036, 075, 036, 000, 036, 000, 109},
  704. {16, 004, 001, 020, 001, 024, 001, 025, 001, 036, 001, 040, 001, 054, 001, 084, 001},
  705. {12, 032, 036, 032, 042, 032, 053, 032, 066, 032, 014, 032, 032},
  706. {16, 034, 034, 035, 035, 037, 037, 039, 039, 041, 041, 043, 043, 045, 045, 047, 047},
  707. {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},
  708. {2, 075, 002},
  709. {2, 001, 003},
  710. {2, 001, 074},
  711. {2, 001, 001},
  712. {16, 123, 123, 125, 125, 036, 036, 016, 016, 018, 018, 046, 046, 061, 061, 075, 075},
  713. {16, 001, 003, 001, 005, 001, 016, 001, 022, 001, 035, 001, 044, 001, 053, 001, 057},
  714. {2, 056, 056},
  715. {2, 026, 026},
  716. {16, 084, 015, 084, 058, 084, 031, 032, 074, 043, 031, 001, 031, 077, 031, 032, 074},
  717. {16, 084, 063, 091, 063, 102, 065, 105, 072, 110, 093, 121, 093, 012, 095, 023, 001},
  718. {16, 058, 001, 002, 001, 063, 001, 018, 001, 032, 001, 045, 001, 013, 001, 034, 001},
  719. {16, 091, 001, 101, 001, 109, 001, 113, 001, 004, 001, 025, 001, 030, 001, 036, 001},
  720. {16, 026, 026, 028, 028, 044, 044, 051, 051, 057, 057, 072, 072, 106, 106, 112, 112},
  721. {16, 001, 003, 001, 009, 001, 018, 001, 030, 017, 023, 046, 023, 046, 032, 057, 034},
  722. {16, 036, 001, 037, 001, 043, 001, 053, 001, 061, 001, 075, 001, 079, 001, 088, 001},
  723. {16, 012, 012, 013, 013, 014, 014, 001, 002, 002, 001, 001, 003, 003, 001, 010, 010},
  724. {16, 079, 079, 084, 084, 007, 007, 011, 011, 019, 019, 022, 022, 036, 036, 053, 053},
  725. {2, 014, 075},
  726. {2, 014, 075},
  727. {16, 067, 076, 068, 076, 078, 076, 002, 076, 016, 076, 018, 076, 025, 076, 045, 088},
  728. {16, 051, 001, 058, 008, 060, 001, 068, 008, 002, 001, 013, 008, 022, 001, 036, 008},
  729. {8, 006, 006, 046, 046, 053, 053, 003, 003},
  730. {0, 000, 000},
  731. {2, 043, 000},
  732. {16, 120, 117, 103, 111, 120, 114, 074, 091, 120, 112, 074, 083, 120, 113, 066, 071},
  733. {4, 056, 015, 056, 053},
  734. {4, 056, 015, 056, 053},
  735. {16, 097, 001, 081, 001, 105, 001, 110, 001, 091, 001, 074, 001, 084, 001, 083, 001},
  736. {16, 002, 039, 009, 039, 017, 001, 021, 001, 033, 000, 037, 000, 041, 029, 056, 029},
  737. {16, 006, 007, 007, 006, 001, 006, 089, 091, 119, 117, 103, 102, 077, 087, 071, 077},
  738. {16, 092, 001, 094, 001, 101, 001, 121, 001, 000, 001, 022, 001, 036, 001, 075, 001},
  739. {16, 072, 001, 066, 001, 059, 001, 045, 001, 040, 001, 039, 001, 035, 001, 020, 001},
  740. {16, 027, 036, 059, 036, 060, 035, 055, 041, 054, 031, 049, 023, 045, 032, 040, 029},
  741. {14, 073, 045, 012, 012, 002, 002, 006, 006, 004, 004, 046, 046, 053, 053},
  742. {16, 001, 001, 003, 003, 006, 006, 046, 046, 065, 009, 014, 001, 012, 009, 026, 001},
  743. {16, 041, 041, 048, 048, 052, 052, 064, 064, 071, 071, 085, 085, 010, 010, 062, 062},
  744. {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},
  745. {8, 012, 035, 050, 032, 040, 026, 066, 036},
  746. {14, 001, 073, 001, 074, 001, 075, 001, 076, 001, 077, 001, 078, 001, 079},
  747. {2, 001, 001},
  748. {16, 026, 014, 029, 042, 026, 057, 054, 029, 026, 003, 003, 029, 012, 039, 074, 035},
  749. {4, 002, 026, 002, 029},
  750. {12, 013, 118, 014, 123, 120, 123, 112, 120, 084, 110, 076, 102},
  751. {2, 000, 000},
  752. {12, 040, 065, 071, 072, 052, 066, 064, 072, 030, 072, 060, 072},
  753. {16, 030, 026, 077, 026, 081, 027, 024, 055, 028, 056, 049, 059, 052, 069, 071, 107},
  754. {2, 036, 013},
  755. {16, 007, 094, 036, 088, 051, 075, 053, 075, 058, 067, 075, 067, 075, 061, 079, 062},
  756. {16, 123, 124, 119, 122, 118, 117, 116, 115, 114, 108, 101, 106, 088, 099, 005, 006},
  757. {16, 074, 072, 066, 072, 053, 056, 037, 019, 022, 022, 020, 020, 009, 014, 000, 000},
  758. {2, 000, 001},
  759. {16, 011, 123, 013, 120, 020, 117, 024, 112, 027, 107, 036, 105, 037, 107, 043, 093},
  760. {16, 109, 025, 109, 032, 112, 032, 010, 032, 030, 044, 032, 052, 084, 066, 084, 069},
  761. {16, 075, 084, 040, 084, 040, 110, 028, 119, 025, 119, 021, 119, 013, 119, 004, 119},
  762. {2, 014, 075},
  763. {16, 083, 066, 087, 074, 087, 075, 098, 083, 101, 100, 103, 101, 117, 116, 123, 036},
  764. {16, 036, 117, 036, 013, 042, 030, 042, 033, 054, 036, 075, 079, 092, 101, 098, 109},
  765. {16, 051, 039, 057, 038, 045, 029, 034, 009, 065, 009, 014, 001, 012, 009, 026, 001},
  766. {12, 013, 118, 014, 123, 120, 123, 112, 120, 084, 110, 076, 102},
  767. {10, 003, 003, 006, 006, 007, 007, 052, 052, 076, 076},
  768. {16, 037, 037, 042, 042, 053, 053, 062, 062, 007, 007, 010, 010, 011, 011, 015, 015},
  769. {2, 001, 001},
  770. {16, 007, 001, 074, 001, 061, 001, 016, 001, 025, 001, 030, 001, 036, 001, 053, 001},
  771. {16, 043, 043, 046, 046, 039, 039, 028, 028, 016, 016, 006, 006, 005, 005, 002, 002},
  772. {16, 003, 090, 004, 090, 007, 068, 008, 066, 012, 060, 027, 097, 034, 051, 037, 051},
  773. {16, 017, 039, 015, 123, 032, 112, 045, 088, 052, 071, 057, 067, 061, 096, 096, 096},
  774. {16, 038, 051, 021, 036, 021, 034, 030, 034, 054, 034, 055, 020, 048, 018, 051, 006},
  775. {16, 010, 001, 025, 001, 028, 001, 036, 001, 040, 001, 054, 001, 075, 001, 113, 001},
  776. {16, 013, 076, 024, 077, 063, 078, 042, 076, 054, 077, 039, 078, 011, 076, 062, 077},
  777. {16, 116, 001, 119, 001, 122, 001, 004, 001, 009, 001, 024, 001, 027, 001, 036, 001},
  778. {16, 037, 036, 036, 036, 040, 036, 043, 041, 047, 041, 051, 072, 054, 075, 055, 084},
  779. {16, 002, 039, 009, 039, 017, 001, 021, 001, 033, 000, 037, 000, 041, 029, 056, 029},
  780. {2, 001, 001},
  781. {0, 000, 000},
  782. {16, 074, 074, 075, 013, 087, 118, 092, 003, 115, 118, 025, 118, 036, 000, 118, 118},
  783. {16, 003, 003, 003, 008, 006, 025, 007, 079, 008, 082, 036, 105, 039, 106, 051, 118},
  784. {0, 000, 000},
  785. {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},
  786. {14, 001, 001, 017, 020, 018, 020, 022, 030, 036, 043, 044, 051, 052, 054},
  787. {16, 002, 039, 009, 039, 017, 001, 021, 001, 033, 000, 037, 000, 041, 029, 056, 029},
  788. {16, 052, 001, 053, 001, 066, 001, 075, 001, 076, 001, 081, 001, 095, 001, 109, 001},
  789. {0, 000, 000},
  790. {16, 037, 037, 042, 042, 053, 053, 062, 062, 007, 007, 010, 010, 011, 011, 015, 015},
  791. {16, 110, 001, 111, 001, 112, 001, 114, 001, 119, 001, 122, 001, 004, 001, 013, 001},
  792. {12, 002, 035, 036, 002, 051, 053, 091, 002, 011, 022, 040, 035},
  793. {0, 000, 000},
  794. {16, 073, 001, 074, 001, 075, 001, 077, 001, 079, 001, 083, 001, 084, 001, 091, 001},
  795. {16, 037, 037, 042, 042, 053, 053, 062, 062, 007, 007, 010, 010, 011, 011, 015, 015},
  796. {16, 003, 001, 028, 001, 031, 001, 055, 001, 066, 001, 097, 001, 123, 001, 118, 001},
  797. {16, 009, 001, 012, 001, 026, 096, 030, 096, 032, 001, 037, 001, 057, 096, 071, 096},
  798. {2, 001, 001},
  799. {2, 001, 001},
  800. {14, 096, 067, 086, 070, 079, 074, 070, 086, 061, 098, 075, 075, 075, 091},
  801. {16, 037, 037, 042, 042, 053, 053, 062, 062, 007, 007, 010, 010, 011, 011, 015, 015},
  802. {16, 051, 001, 058, 008, 060, 001, 068, 008, 002, 001, 013, 008, 022, 001, 036, 008},
  803. {16, 013, 118, 024, 118, 031, 093, 032, 092, 045, 092, 113, 092, 119, 113, 122, 113},
  804. {16, 076, 008, 032, 008, 043, 008, 067, 008, 011, 011, 008, 090, 002, 002, 083, 013},
  805. {2, 003, 001},
  806. {16, 050, 001, 047, 001, 044, 096, 040, 096, 039, 001, 030, 001, 028, 096, 009, 096},
  807. {16, 062, 037, 078, 038, 002, 062, 003, 087, 002, 078, 113, 078, 119, 062, 007, 078},
  808. {16, 122, 001, 123, 001, 125, 001, 010, 001, 024, 001, 037, 001, 055, 001, 066, 001},
  809. {2, 001, 001},
  810. {16, 074, 039, 072, 039, 075, 039, 079, 039, 083, 036, 084, 036, 089, 035, 091, 035},
  811. {16, 037, 037, 042, 042, 053, 053, 062, 062, 007, 007, 010, 010, 011, 011, 015, 015},
  812. {16, 067, 001, 072, 001, 075, 001, 083, 001, 091, 001, 101, 001, 109, 001, 020, 001},
  813. {6, 056, 056, 049, 049, 026, 124},
  814. {16, 038, 009, 055, 023, 061, 074, 071, 087, 091, 087, 098, 114, 102, 119, 111, 003},
  815. {16, 053, 032, 015, 032, 045, 032, 034, 030, 065, 032, 014, 032, 012, 032, 043, 032},
  816. {16, 051, 001, 058, 001, 060, 001, 068, 001, 002, 001, 013, 001, 022, 001, 036, 001},
  817. {2, 001, 001},
  818. {2, 001, 001},
  819. {16, 112, 001, 116, 001, 117, 001, 024, 001, 030, 001, 035, 001, 036, 001, 040, 001},
  820. {16, 051, 001, 058, 008, 060, 001, 068, 008, 002, 001, 013, 008, 022, 001, 036, 008},
  821. {16, 052, 039, 009, 039, 017, 001, 021, 001, 033, 000, 037, 000, 041, 029, 056, 029},
  822. {16, 057, 008, 008, 017, 043, 021, 054, 038, 067, 008, 037, 078, 065, 079, 025, 078},
  823. {16, 036, 001, 035, 001, 017, 001, 011, 001, 116, 001, 113, 001, 101, 001, 092, 001},
  824. {2, 001, 006},
  825. {0, 000, 000},
  826. {16, 037, 037, 042, 042, 053, 053, 062, 062, 007, 007, 010, 010, 011, 011, 015, 015},
  827. {16, 109, 001, 030, 008, 095, 001, 084, 008, 083, 001, 072, 008, 071, 001, 052, 008},
  828. {16, 097, 096, 088, 064, 090, 096, 093, 064, 097, 096, 099, 081, 102, 114, 114, 001},
  829. {16, 002, 039, 009, 039, 017, 001, 021, 001, 033, 000, 037, 000, 041, 029, 056, 029},
  830. {0, 000, 000},
  831. {2, 001, 001},
  832. {12, 002, 035, 036, 002, 051, 053, 091, 002, 011, 022, 040, 035},
  833. {16, 094, 001, 101, 001, 116, 001, 117, 001, 004, 001, 025, 001, 030, 001, 037, 001},
  834. {16, 091, 038, 115, 043, 085, 006, 079, 007, 078, 008, 077, 018, 079, 018, 086, 024},
  835. {2, 026, 026},
  836. {16, 012, 001, 019, 096, 031, 064, 025, 096, 038, 001, 051, 096, 057, 001, 066, 096},
  837. {16, 067, 001, 068, 096, 072, 001, 074, 008, 075, 096, 076, 008, 079, 001, 084, 096},
  838. {12, 001, 003, 008, 007, 008, 010, 008, 016, 023, 031, 040, 044},
  839. {2, 001, 001},
  840. {16, 037, 037, 042, 042, 053, 053, 062, 062, 007, 007, 010, 010, 011, 011, 015, 015},
  841. {18, 092, 092, 081, 081, 067, 067, 066, 066, 061, 061, 053, 053, 051, 051, 047, 047, 043, 043},
  842. {16, 054, 001, 058, 001, 066, 001, 072, 001, 075, 001, 087, 001, 101, 001, 036, 001},
  843. {16, 041, 010, 041, 020, 049, 011, 056, 123, 110, 113, 112, 116, 114, 118, 119, 101},
  844. {2, 001, 001},
  845. {2, 001, 001},
  846. {16, 037, 037, 042, 042, 053, 053, 062, 062, 007, 007, 010, 010, 011, 011, 015, 015},
  847. {16, 119, 001, 122, 001, 008, 001, 010, 001, 013, 001, 025, 001, 027, 001, 032, 001},
  848. {16, 036, 001, 040, 001, 043, 001, 053, 001, 072, 001, 075, 001, 095, 001, 101, 001},
  849. {2, 001, 001},
  850. {16, 037, 037, 031, 031, 023, 023, 022, 022, 007, 007, 124, 124, 114, 114, 112, 112},
  851. {0, 000, 000},
  852. {2, 001, 001},
  853. {2, 001, 001},
  854. {16, 051, 001, 058, 008, 060, 001, 068, 008, 002, 001, 013, 008, 022, 001, 036, 008},
  855. {0, 000, 000},
  856. {2, 112, 020},
  857. {2, 000, 001},
  858. {2, 000, 001},
  859. {2, 000, 001},
  860. {2, 000, 001},
  861. {16, 081, 008, 032, 008, 043, 008, 067, 008, 011, 011, 008, 090, 002, 002, 083, 013},
  862. {2, 001, 001},
  863. {16, 058, 001, 069, 001, 075, 077, 018, 001, 032, 001, 045, 045, 013, 001, 034, 001},
  864. {16, 058, 001, 069, 001, 075, 077, 018, 001, 032, 001, 045, 045, 013, 001, 034, 001},
  865. {16, 067, 076, 068, 076, 078, 076, 002, 076, 016, 076, 018, 076, 025, 076, 045, 088},
  866. {16, 061, 008, 032, 008, 043, 008, 067, 008, 011, 011, 008, 090, 002, 002, 083, 013},
  867. {0, 000, 000},
  868. {0, 000, 000},
  869. {2, 001, 001},
  870. {2, 036, 036},
  871. {0, 000, 000},
  872. {0, 000, 000}
  873. };
  874. new const EVF::VehicleSeats[MAX_VEHICLE_MODELS] = {
  875. 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,
  876. 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,
  877. 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,
  878. 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
  879. };
  880. new const EVF::VehicleDoors[MAX_VEHICLE_MODELS] = {
  881. 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,
  882. 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,
  883. 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,
  884. 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
  885. };
  886. static const EVF::ComponentPrice[][] = {
  887. {1005, 150}, {1004, 100}, {1012, 250}, {1011, 220},
  888. {1143, 150}, {1145, 100}, {1020, 250}, {1021, 200},
  889. {1022, 150}, {1019, 300}, {1018, 350}, {1013, 100},
  890. {1024, 50}, {1008, 500}, {1009, 200}, {1010, 1000},
  891. {1006, 80}, {1001, 550}, {1014, 400}, {1002, 200},
  892. {1023, 350}, {1015, 500}, {1016, 200}, {1003, 250},
  893. {1000, 400}, {1007, 500}, {1017, 500}, {1046, 710},
  894. {1045, 510}, {1153, 1200}, {1152, 910}, {1150, 1090},
  895. {1151, 840}, {1054, 210}, {1053, 130}, {1049, 810},
  896. {1050, 620}, {1047, 670}, {1048, 530}, {1065, 850},
  897. {1066, 750}, {1160, 1050}, {1173, 950}, {1159, 1050},
  898. {1161, 950}, {1067, 250}, {1068, 200}, {1162, 650},
  899. {1158, 550}, {1069, 550}, {1070, 450}, {1034, 790},
  900. {1037, 690}, {1171, 990}, {1172, 900}, {1149, 1000},
  901. {1148, 890}, {1038, 190}, {1035, 150}, {1147, 600},
  902. {1146, 490}, {1036, 500}, {1039, 390}, {1064, 830},
  903. {1059, 720}, {1155, 1030}, {1157, 930}, {1154, 1030},
  904. {1156, 920}, {1055, 230}, {1061, 180}, {1058, 620},
  905. {1060, 530}, {1056, 520}, {1057, 430}, {1028, 770},
  906. {1029, 680}, {1169, 970}, {1170, 880}, {1141, 980},
  907. {1140, 870}, {1032, 170}, {1033, 120}, {1138, 580},
  908. {1139, 470}, {1026, 480}, {1031, 370}, {1092, 750},
  909. {1089, 650}, {1166, 950}, {1165, 850}, {1168, 950},
  910. {1167, 850}, {1088, 150}, {1091, 100}, {1164, 550},
  911. {1163, 450}, {1090, 450}, {1093, 350}, {1128, 3340},
  912. {1103, 3250}, {1184, 2150}, {1183, 2040}, {1182, 2130},
  913. {1181, 2050}, {1104, 1610}, {1105, 1540}, {1108, 780},
  914. {1126, 3340}, {1127, 3250}, {1179, 2150}, {1185, 2040},
  915. {1180, 2130}, {1178, 2050}, {1122, 780}, {1106, 780},
  916. {1100, 940}, {1123, 860}, {1125, 1120}, {1130, 3380},
  917. {1131, 3290}, {1189, 2200}, {1188, 2080}, {1187, 2175},
  918. {1186, 2095}, {1129, 1650}, {1132, 1590}, {1133, 830},
  919. {1044, 500}, {1043, 500}, {1174, 1000}, {1175, 900},
  920. {1176, 1000}, {1177, 900}, {1042, 1000}, {1113, 3340},
  921. {1114, 3250}, {1117, 2040}, {1115, 2130}, {1116, 2050},
  922. {1109, 1610}, {1110, 1540}, {1118, 780}, {1119, 940},
  923. {1136, 1000}, {1135, 1500}, {1191, 1040}, {1190, 1200},
  924. {1192, 940}, {1193, 1100}, {1134, 800}, {1079, 1030},
  925. {1075, 980}, {1077, 1620}, {1083, 1560}, {1082, 820},
  926. {1085, 770}, {1074, 1030}, {1081, 1230}, {1080, 900},
  927. {1073, 1100}, {1078, 1200}, {1076, 1560}, {1084, 1350},
  928. {1025, 1000}, {1096, 1000}, {1097, 620}, {1098, 1140},
  929. {1086, 100}, {1087, 1500}
  930. };
  931. static const EVF::ValidComponent[][] = {
  932. {400, 1024, 1021, 1020, 1019, 1018, 1013, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  933. {401, 1145, 1144, 1143, 1142, 1020, 1019, 1017, 1013, 1007, 1006, 1005, 1004, 1003, 1001, 0000, 0000, 0000, 0000},
  934. {402, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  935. {403, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  936. {404, 1021, 1020, 1019, 1017, 1016, 1013, 1007, 1002, 1000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  937. {405, 1023, 1021, 1020, 1019, 1018, 1014, 1001, 1000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  938. {406, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  939. {407, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  940. {408, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  941. {409, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  942. {410, 1024, 1023, 1021, 1020, 1019, 1017, 1013, 1007, 1003, 1001, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  943. {411, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  944. {412, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  945. {413, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  946. {414, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  947. {415, 1023, 1019, 1018, 1017, 1007, 1003, 1001, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  948. {416, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  949. {417, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  950. {418, 1021, 1020, 1016, 1006, 1002, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  951. {419, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  952. {420, 1021, 1019, 1005, 1004, 1003, 1001, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  953. {421, 1023, 1021, 1020, 1019, 1018, 1016, 1014, 1000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  954. {422, 1021, 1020, 1019, 1017, 1013, 1007, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  955. {423, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  956. {424, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  957. {425, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  958. {426, 1021, 1019, 1006, 1005, 1004, 1003, 1001, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  959. {427, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  960. {428, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  961. {429, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  962. {430, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  963. {431, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  964. {432, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  965. {433, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  966. {434, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  967. {435, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  968. {436, 1022, 1021, 1020, 1019, 1017, 1013, 1007, 1006, 1003, 1001, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  969. {437, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  970. {438, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  971. {439, 1145, 1144, 1143, 1142, 1023, 1017, 1013, 1007, 1003, 1001, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  972. {440, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  973. {441, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  974. {442, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  975. {443, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  976. {444, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  977. {445, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  978. {446, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  979. {447, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  980. {448, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  981. {449, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  982. {450, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  983. {451, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  984. {452, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  985. {453, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  986. {454, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  987. {455, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  988. {456, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  989. {457, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  990. {458, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  991. {459, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  992. {460, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  993. {461, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  994. {462, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  995. {463, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  996. {464, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  997. {465, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  998. {466, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  999. {467, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1000. {468, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1001. {469, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1002. {470, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1003. {471, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1004. {472, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1005. {473, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1006. {474, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1007. {475, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1008. {476, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1009. {477, 1021, 1020, 1019, 1018, 1017, 1007, 1006, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1010. {478, 1024, 1022, 1021, 1020, 1013, 1012, 1005, 1004, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1011. {479, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1012. {480, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1013. {481, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1014. {482, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1015. {483, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1016. {484, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1017. {485, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1018. {486, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1019. {487, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1020. {488, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1021. {489, 1024, 1020, 1019, 1018, 1016, 1013, 1006, 1005, 1004, 1002, 1000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1022. {490, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1023. {491, 1145, 1144, 1143, 1142, 1023, 1021, 1020, 1019, 1018, 1017, 1014, 1007, 1003, 0000, 0000, 0000, 0000, 0000},
  1024. {492, 1016, 1006, 1005, 1004, 1000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1025. {493, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1026. {494, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1027. {495, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1028. {496, 1143, 1142, 1023, 1020, 1019, 1017, 1011, 1007, 1006, 1003, 1002, 1001, 0000, 0000, 0000, 0000, 0000, 0000},
  1029. {497, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1030. {498, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1031. {499, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1032. {500, 1024, 1021, 1020, 1019, 1013, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1033. {501, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1034. {502, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1035. {503, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1036. {504, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1037. {505, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1038. {506, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1039. {507, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1040. {508, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1041. {509, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1042. {510, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1043. {511, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1044. {512, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1045. {513, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1046. {514, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1047. {515, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1048. {516, 1021, 1020, 1019, 1018, 1017, 1016, 1015, 1007, 1004, 1002, 1000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1049. {517, 1145, 1144, 1143, 1142, 1023, 1020, 1019, 1018, 1017, 1016, 1007, 1003, 1002, 0000, 0000, 0000, 0000, 0000},
  1050. {518, 1145, 1144, 1143, 1142, 1023, 1020, 1018, 1017, 1013, 1007, 1006, 1005, 1003, 1001, 0000, 0000, 0000, 0000},
  1051. {519, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1052. {520, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1053. {521, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1054. {522, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1055. {523, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1056. {524, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1057. {525, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1058. {526, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1059. {527, 1021, 1020, 1018, 1017, 1015, 1014, 1007, 1001, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1060. {528, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1061. {529, 1023, 1020, 1019, 1018, 1017, 1012, 1011, 1007, 1006, 1003, 1001, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1062. {530, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1063. {531, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1064. {532, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1065. {533, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1066. {534, 1185, 1180, 1179, 1178, 1127, 1126, 1125, 1124, 1123, 1122, 1106, 1101, 1100, 0000, 0000, 0000, 0000, 0000},
  1067. {535, 1121, 1120, 1119, 1118, 1117, 1116, 1115, 1114, 1113, 1110, 1109, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1068. {536, 1184, 1183, 1182, 1181, 1128, 1108, 1107, 1105, 1104, 1103, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1069. {537, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1070. {538, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1071. {539, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1072. {540, 1145, 1144, 1143, 1142, 1024, 1023, 1020, 1019, 1018, 1017, 1007, 1006, 1004, 1001, 0000, 0000, 0000, 0000},
  1073. {541, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1074. {542, 1145, 1144, 1021, 1020, 1019, 1018, 1015, 1014, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1075. {543, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1076. {544, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1077. {545, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1078. {546, 1145, 1144, 1143, 1142, 1024, 1023, 1019, 1018, 1017, 1007, 1006, 1004, 1002, 1001, 0000, 0000, 0000, 0000},
  1079. {547, 1143, 1142, 1021, 1020, 1019, 1018, 1016, 1003, 1000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1080. {548, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1081. {549, 1145, 1144, 1143, 1142, 1023, 1020, 1019, 1018, 1017, 1012, 1011, 1007, 1003, 1001, 0000, 0000, 0000, 0000},
  1082. {550, 1145, 1144, 1143, 1142, 1023, 1020, 1019, 1018, 1006, 1005, 1004, 1003, 1001, 0000, 0000, 0000, 0000, 0000},
  1083. {551, 1023, 1021, 1020, 1019, 1018, 1016, 1006, 1005, 1003, 1002, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1084. {552, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1085. {553, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1086. {554, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1087. {555, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1088. {556, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1089. {557, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1090. {558, 1168, 1167, 1166, 1165, 1164, 1163, 1095, 1094, 1093, 1092, 1091, 1090, 1089, 1088, 0000, 0000, 0000, 0000},
  1091. {559, 1173, 1162, 1161, 1160, 1159, 1158, 1072, 1071, 1070, 1069, 1068, 1067, 1066, 1065, 0000, 0000, 0000, 0000},
  1092. {560, 1170, 1169, 1141, 1140, 1139, 1138, 1033, 1032, 1031, 1030, 1029, 1028, 1027, 1026, 0000, 0000, 0000, 0000},
  1093. {561, 1157, 1156, 1155, 1154, 1064, 1063, 1062, 1061, 1060, 1059, 1058, 1057, 1056, 1055, 0000, 0000, 0000, 0000},
  1094. {562, 1172, 1171, 1149, 1148, 1147, 1146, 1041, 1040, 1039, 1038, 1037, 1036, 1035, 1034, 0000, 0000, 0000, 0000},
  1095. {563, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1096. {564, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1097. {565, 1153, 1152, 1151, 1150, 1054, 1053, 1052, 1051, 1050, 1049, 1048, 1047, 1046, 1045, 0000, 0000, 0000, 0000},
  1098. {566, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1099. {567, 1189, 1188, 1187, 1186, 1133, 1132, 1131, 1130, 1129, 1102, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1100. {568, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1101. {569, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1102. {570, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1103. {571, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1104. {572, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1105. {573, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1106. {574, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1107. {575, 1177, 1176, 1175, 1174, 1099, 1044, 1043, 1042, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1108. {576, 1193, 1192, 1191, 1190, 1137, 1136, 1135, 1134, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1109. {577, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1110. {578, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1111. {579, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1112. {580, 1023, 1020, 1018, 1017, 1007, 1006, 1001, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1113. {581, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1114. {582, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1115. {583, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1116. {584, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1117. {585, 1145, 1144, 1143, 1142, 1020, 1019, 1018, 1013, 1006, 1001, 1023, 1003, 1007, 1017, 0000, 0000, 0000, 0000},
  1118. {586, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1119. {587, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1120. {588, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1121. {589, 1145, 1144, 1024, 1020, 1018, 1017, 1016, 1013, 1007, 1006, 1005, 1004, 1000, 0000, 0000, 0000, 0000, 0000},
  1122. {590, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1123. {591, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1124. {592, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1125. {593, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1126. {594, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1127. {595, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1128. {596, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1129. {597, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1130. {598, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1131. {599, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1132. {600, 1022, 1020, 1018, 1017, 1013, 1007, 1006, 1005, 1004, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1133. {601, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1134. {602, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1135. {603, 1145, 1144, 1143, 1142, 1024, 1023, 1020, 1019, 1018, 1017, 1007, 1006, 1001, 0000, 0000, 0000, 0000, 0000},
  1136. {604, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1137. {605, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1138. {606, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1139. {607, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1140. {608, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1141. {609, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1142. {610, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
  1143. {611, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000}
  1144. };
  1145. static const EVF::ComponentNames[][] = {
  1146. "Pro",
  1147. "Win",
  1148. "Drag",
  1149. "Alpha",
  1150. "Champ Scoop",
  1151. "Fury Scoop",
  1152. "Roof Scoop",
  1153. "Right Sideskirt",
  1154. "5x Nitrous",
  1155. "2 Nitrous",
  1156. "10 Nitrous",
  1157. "Race Scoop",
  1158. "Worx Scoop",
  1159. "Round Fog",
  1160. "Champ",
  1161. "Race",
  1162. "Worx",
  1163. "Left Sideskirt",
  1164. "Upswept",
  1165. "Twin",
  1166. "Large",
  1167. "Medium",
  1168. "Small",
  1169. "Fury",
  1170. "Square Fog",
  1171. "Offroad",
  1172. "Right Alien Sideskirt",
  1173. "Left Alien Sideskirt",
  1174. "Alien",
  1175. "X-Flow",
  1176. "Left X-Flow Sideskirt",
  1177. "Right X-Flow Sideskirt",
  1178. "Alien Roof Vent",
  1179. "X-Flow Roof Vent",
  1180. "Alien",
  1181. "X-Flow Roof Vent",
  1182. "Right Alien Sideskirt",
  1183. "X-Flow",
  1184. "Alien Roof Vent",
  1185. "Left X-Flow Sideskirt",
  1186. "Left Alien Sideskirt",
  1187. "Right X-Flow Sideskirt",
  1188. "Right Chrome Sideskirt",
  1189. "Slamin",
  1190. "Chrome",
  1191. "X-Flow",
  1192. "Alien",
  1193. "Right Alien Sideskirt",
  1194. "Right X-Flow Sideskirt",
  1195. "Alien",
  1196. "X-Flow",
  1197. "Left Alien Sideskirt",
  1198. "Left X-Flow Sideskirt",
  1199. "X-Flow",
  1200. "Alien",
  1201. "Alien",
  1202. "Right Alien Sideskirt",
  1203. "Right X-Flow Sideskirt",
  1204. "Alien",
  1205. "X-Flow",
  1206. "X-Flow",
  1207. "X-Flow",
  1208. "Left Alien Sideskirt",
  1209. "Left X-Flow Sideskirt",
  1210. "Alien",
  1211. "Alien",
  1212. "X-Flow",
  1213. "Alien",
  1214. "X-Flow",
  1215. "Right Alien Sideskirt",
  1216. "Right X-Flow Sideskirt",
  1217. "Left Alien Sideskirt",
  1218. "Left X-Flow Sideskirt",
  1219. "Shadow",
  1220. "Mega",
  1221. "Rimshine",
  1222. "Wires",
  1223. "Classic",
  1224. "Twist",
  1225. "Cutter",
  1226. "Switch",
  1227. "Grove",
  1228. "Import",
  1229. "Dollar",
  1230. "Trance",
  1231. "Atomic",
  1232. "Stereo",
  1233. "Hydraulics",
  1234. "Alien",
  1235. "X-Flow",
  1236. "Right Alien Sideskirt",
  1237. "X-Flow",
  1238. "Alien",
  1239. "Right X-Flow Sideskirt",
  1240. "Left Alien Sideskirt",
  1241. "Right X-Flow Sideskirt",
  1242. "Ahab",
  1243. "Virtual",
  1244. "Access",
  1245. "Left Chrome Sideskirt",
  1246. "Chrome Grill",
  1247. "Left Chrome Flames Sideskirt",
  1248. "Left Chrome Strip Sideskirt",
  1249. "Covertible",
  1250. "Chrome",
  1251. "Slamin",
  1252. "Right Chrome Arches",
  1253. "Left Chrome Strip Sideskirt",
  1254. "Right Chrome Strip Sideskirt",
  1255. "Chrome",
  1256. "Slamin",
  1257. "Little Sign?",
  1258. "Little Sign?",
  1259. "Chrome",
  1260. "Slamin",
  1261. "Chrome",
  1262. "Slamin",
  1263. "Chrome",
  1264. "Right Chrome Trim Sideskirt",
  1265. "Right Wheelcovers Sideskirt",
  1266. "Left Chrome Trim Sideskirt",
  1267. "Left Wheelcovers Sideskirt",
  1268. "Right Chrome Flames Sideskirt",
  1269. "Bullbar Chrome Bars",
  1270. "Left Chrome Arches Sideskirt",
  1271. "Bullbar Chrome Lights",
  1272. "Chrome Exhaust",
  1273. "Slamin Exhaust",
  1274. "Vinyl Hardtop",
  1275. "Chrome",
  1276. "Hardtop",
  1277. "Softtop",
  1278. "Slamin",
  1279. "Right Chrome Strip Sideskirt",
  1280. "Right Chrome Strip Sideskirt",
  1281. "Slamin",
  1282. "Chrome",
  1283. "Left Chrome Strip Sideskirt",
  1284. "Alien",
  1285. "X-Flow",
  1286. "X-Flow",
  1287. "Alien",
  1288. "Left Oval Vents",
  1289. "Right Oval Vents",
  1290. "Left Square Vents",
  1291. "Right Square Vents",
  1292. "X-Flow",
  1293. "Alien",
  1294. "X-Flow",
  1295. "Alien",
  1296. "Alien",
  1297. "X-Flow",
  1298. "X-Flow",
  1299. "Alien",
  1300. "Alien",
  1301. "Alien",
  1302. "X-Flow",
  1303. "X-Flow",
  1304. "X-Flow",
  1305. "Alien",
  1306. "Alien",
  1307. "X-Flow",
  1308. "Alien",
  1309. "X-Flow",
  1310. "Alien",
  1311. "X-Flow",
  1312. "Alien",
  1313. "X-Flow",
  1314. "Alien",
  1315. "Alien",
  1316. "X-Flow",
  1317. "Alien",
  1318. "X-Flow",
  1319. "X-Flow",
  1320. "Chrome",
  1321. "Slamin",
  1322. "Chrome",
  1323. "Slamin",
  1324. "Slamin",
  1325. "Chrome",
  1326. "Chrome",
  1327. "Slamin",
  1328. "Chrome",
  1329. "Slamin",
  1330. "Chrome",
  1331. "Slamin",
  1332. "Slamin",
  1333. "Chrome",
  1334. "Slamin",
  1335. "Chrome",
  1336. "Slamin",
  1337. "Chrome",
  1338. "Chrome",
  1339. "Slamin"
  1340. };
  1341. #if defined _3D_Tryg
  1342. #define EVF_WeaponDamage Tryg3D_WeaponDamage
  1343. #else
  1344. new const Float:EVF::WeaponDamage[] = {
  1345. 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,
  1346. 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
  1347. };
  1348. #endif
  1349. #if !defined EVF_VehicleName
  1350. new const EVF::VehicleName[MAX_VEHICLE_MODELS][] = {
  1351. "Landstalker", "Bravura", "Buffalo", "Linerunner", "Perrenial", "Sentinel", "Dumper", "Firetruck", "Trashmaster", "Stretch",
  1352. "Manana", "Infernus", "Voodoo", "Pony", "Mule", "Cheetah", "Ambulance", "Leviathan", "Moonbeam", "Esperanto", "Taxi",
  1353. "Washington", "Bobcat", "Mr Whoopee", "BF Injection", "Hunter", "Premier", "Enforcer", "Securicar", "Banshee", "Predator",
  1354. "Bus", "Rhino", "Barracks", "Hotknife", "Trailer 1", "Previon", "Coach", "Cabbie", "Stallion", "Rumpo", "RC Bandit", "Romero",
  1355. "Packer", "Monster", "Admiral", "Squalo", "Seasparrow", "Pizzaboy", "Tram", "Trailer 2", "Turismo", "Speeder", "Reefer", "Tropic",
  1356. "Flatbed", "Yankee", "Caddy", "Solair", "Berkley's RC Van", "Skimmer", "PCJ-600", "Faggio", "Freeway", "RC Baron", "RC Raider",
  1357. "Glendale", "Oceanic", "Sanchez", "Sparrow", "Patriot", "Quad", "Coastguard", "Dinghy", "Hermes", "Sabre", "Rustler", "ZR-350",
  1358. "Walton", "Regina", "Comet", "BMX", "Burrito", "Camper", "Marquis", "Baggage", "Dozer", "Maverick", "News Chopper", "Rancher",
  1359. "FBI Rancher", "Virgo", "Greenwood", "Jetmax", "Hotring", "Sandking", "Blista Compact", "Police Maverick", "Boxville", "Benson",
  1360. "Mesa", "RC Goblin", "Hotring Racer A", "Hotring Racer B", "Bloodring Banger", "Rancher", "Super GT", "Elegant", "Journey",
  1361. "Bike", "Mountain Bike", "Beagle", "Cropdust", "Stunt", "Tanker", "Roadtrain", "Nebula", "Majestic", "Buccaneer", "Shamal",
  1362. "Hydra", "FCR-900", "NRG-500", "HPV1000", "Cement Truck", "Tow Truck", "Fortune", "Cadrona", "FBI Truck", "Willard", "Forklift",
  1363. "Tractor", "Combine", "Feltzer", "Remington", "Slamvan", "Blade", "Freight", "Streak", "Vortex", "Vincent", "Bullet", "Clover",
  1364. "Sadler", "Firetruck LA", "Hustler", "Intruder", "Primo", "Cargobob", "Tampa", "Sunrise", "Merit", "Utility", "Nevada", "Yosemite",
  1365. "Windsor", "Monster A", "Monster B", "Uranus", "Jester", "Sultan", "Stratum", "Elegy", "Raindance", "RC Tiger", "Flash", "Tahoma",
  1366. "Savanna", "Bandito", "Freight Flat", "Streak Carriage", "Kart", "Mower", "Duneride", "Sweeper", "Broadway", "Tornado", "AT-400",
  1367. "DFT-30", "Huntley", "Stafford", "BF-400", "Newsvan", "Tug", "Trailer 3", "Emperor", "Wayfarer", "Euros", "Hotdog", "Club",
  1368. "Freight Carriage", "Trailer 3", "Andromada", "Dodo", "RC Cam", "Launch", "Police Car (LSPD)", "Police Car (SFPD)",
  1369. "Police Car (LVPD)", "Police Ranger", "Picador", "S.W.A.T. Tank", "Alpha", "Phoenix", "Glendale", "Sadler", "Luggage Trailer A",
  1370. "Luggage Trailer B", "Stair Trailer", "Boxville", "Farm Plow", "Utility Trailer"
  1371. };
  1372. #endif
  1373. #if (defined _FoX_Foreach)
  1374. #define EVF_Foreach(%0) FoxForeach(%0,Character)
  1375. #elseif (defined _FOREACH_LOCAL_VERSION)
  1376. #define EVF_Foreach(%0) foreach(new %0 : Character)
  1377. #else
  1378. #define EVF_Foreach(%0) for(new %0 = 0, p_%0 = GetPlayerPoolSize(); %0 <= p_%0; %0++) if(IsPlayerConnected(%0))
  1379. #endif
  1380. #if (defined _FOREACH_LOCAL_VERSION && defined Vehicle@YSII_Sg)
  1381. #define EVF_ForeachVehicle(%0) foreach(new %0 : Vehicle)
  1382. #elseif (defined _FOREACH_LOCAL_VERSION && defined Vehicles@YSII_Sg)
  1383. #define EVF_ForeachVehicle(%0) foreach(new %0 : Vehicles)
  1384. #else
  1385. #define EVF_ForeachVehicle(%0) for(new %0 = 1, %0_upp = GetVehiclePoolSize(); %0 <= %0_upp; %0++) if(IsValidVehicle(%0))
  1386. #endif
  1387. #define SetVehiclePropertyValue(%0,%1,%2) EVF_VehicleProperty[(%0)][(%1)] = (%2)
  1388. #define GetVehiclePropertyValue(%0,%1) EVF_VehicleProperty[(%0)][(%1)]
  1389. #define EVF_GetActiveCount() GetSVarInt("ADM:EVF:ACTIVE")
  1390. #define IsValidVehicleModelID(%0) (400 <= (%0) <= 611)
  1391. #define SetVehicleInterior(%0,%1) LinkVehicleToInterior(%0,%1)
  1392. #define IsValidVehicleDoor(%0,%1) !((%1) > EVF::VehicleDoors[(GetVehicleModel(%0)-400)])
  1393. #define RemoveVehiclePaintjob(%0) ChangeVehiclePaintjob((%0),RESET_PAINTJOB_ID)
  1394. #define RestoreVehicleHorn(%0) SetVehiclePropertyValue((%0),e_VEHICLE_HORN,0)
  1395. #define GetVehicleModelSeats(%0) EVF::VehicleSeats[((%0)-400)]
  1396. #define GetVehicleSeats(%0) GetVehicleModelSeats(GetVehicleModel(%0))
  1397. #define GetVehicleModelName(%0) EVF::VehicleName[((%0)-400)]
  1398. #define GetVehicleName(%0) GetVehicleModelName(GetVehicleModel(%0))
  1399. #define GetVehicleModelTopSpeed(%0) EVF::TopSpeed[((%0)-400)]
  1400. #define GetVehicleTopSpeed(%0) GetVehicleModelTopSpeed(GetVehicleModel(%0))
  1401. #define GetVehicleModelDoorAmount(%0) EVF::VehicleDoors[((%0)-400)]
  1402. #define GetVehicleDoorAmount(%0) GetVehicleModelDoorAmount(GetVehicleModel(%0))
  1403. #define SetVehicleSpeedCap(%0,%1) SetVehiclePropertyValue((%0),e_VEHICLE_SPEED_CAP,(_:%1))
  1404. #define GetVehicleSpeedCap(%0) Float:GetVehiclePropertyValue((%0),e_VEHICLE_SPEED_CAP)
  1405. #define DisableVehicleSpeedCap(%0) SetVehicleSpeedCap((%0),0)
  1406. #define SetVehicleHorn(%0,%1) SetVehiclePropertyValue((%0),e_VEHICLE_HORN,(%1))
  1407. #define GetVehicleHorn(%0) GetVehiclePropertyValue((%0),e_VEHICLE_HORN)
  1408. #define GetVehicleFuel(%0) GetVehiclePropertyValue((%0),e_VEHICLE_FUEL)
  1409. #define SetVehicleFuel(%0,%1) SetVehiclePropertyValue((%0),e_VEHICLE_FUEL,(%1))
  1410. #define IsVehicleFuelToggled(%0) GetVehiclePropertyValue((%0),e_VEHICLE_FUEL_USE)
  1411. #define ToggleVehicleFuel(%0,%1) SetVehiclePropertyValue((%0),e_VEHICLE_FUEL_USE,(_:%1))
  1412. #define IsVehicleSticky(%0) GetVehiclePropertyValue((%0),e_VEHICLE_STICKY)
  1413. #define ToggleVehicleSticky(%0,%1) SetVehiclePropertyValue((%0),e_VEHICLE_STICKY,(_:%1))
  1414. #define IsUnoccupiedDamageToggled(%0) GetVehiclePropertyValue((%0),e_VEHICLE_UNO_DAMAGE)
  1415. #define ToggleUnoccupiedVehicleDamage(%0,%1) SetVehiclePropertyValue((%0),e_VEHICLE_UNO_DAMAGE,(_:%1))
  1416. #define IsPetrolCapDestroyToggled(%0) GetVehiclePropertyValue((%0),e_VEHICLE_CAP_DAMAGE)
  1417. #define ToggleVehiclePetrolCapDestroy(%0,%1) SetVehiclePropertyValue((%0),e_VEHICLE_CAP_DAMAGE,(_:%1))
  1418. #define GetVehicleBomb(%0) GetVehiclePropertyValue((%0),e_VEHICLE_BOMB)
  1419. #define IsVehicleBombed(%0) (GetVehicleBomb(%0) > 0)
  1420. #define RemoveVehicleBomb(%0) SetVehicleBomb((%0),0)
  1421. #define IsToggledVehicleBulletproof(%0) GetVehiclePropertyValue((%0),e_VEHICLE_BULLETPROOF)
  1422. #define ToggleVehicleBulletproof(%0,%1) SetVehiclePropertyValue((%0),e_VEHICLE_BULLETPROOF,(_:%1))
  1423. //extra names:
  1424. #define GetVehicleDoorAmountByModelid GetVehicleModelDoorAmount
  1425. #define ResetVehiclePaintjob RemoveVehiclePaintjob
  1426. #define GetVehicleDriverID GetVehicleDriver
  1427. #define SetVehicleColor ChangeVehicleColor
  1428. #define MAX_VEHICLE_MODEL MAX_VEHICLE_MODELS
  1429. #define OnPlayerShootVehicle OnPlayerShotVehicle
  1430. forward OnVehicleCreated(vehicleid);
  1431. forward OnVehicleDestroyed(vehicleid);
  1432. forward OnTrailerHooked(playerid,vehicleid,trailerid);
  1433. forward OnTrailerUnhooked(playerid,vehicleid,trailerid);
  1434. forward OnVehicleBombDeactivate(vehicleid);
  1435. forward OnVehicleBombExplode(vehicleid);
  1436. forward OnPlayerShotVehicle(playerid,vehicleid,weaponid,Float:amount,bodypart);
  1437. forward OnPlayerEditVehicle(playerid,vehicleid,response,Float:fX,Float:fY,Float:fZ,Float:fRotZ);
  1438. forward OnPlayerEditVehicleObject(playerid,vehicleid,response,Float:x,Float:y,Float:z,Float:rx,Float:ry,Float:rz);
  1439. forward OnPlayerReachSpeedCapLimit(playerid,vehicleid,Float:speed);
  1440. forward OnVehicleBombActivate(vehicleid);
  1441. forward OnVehicleModEx(playerid,vehicleid,componentid,price,illegal);
  1442. forward OnVehicleFuelChange(vehicleid,newfuel,oldfuel);
  1443. #if defined OnVehiclePosChange
  1444. forward OnVehiclePosChange(vehicleid,Float:newx,Float:newy,Float:newz,Float:newangle,Float:oldx,Float:oldy,Float:oldz,Float:oldangle);
  1445. #endif
  1446. #if defined OnVehicleVelocityChange
  1447. forward OnVehicleVelocityChange(vehicleid,Float:newx,Float:newy,Float:newz,Float:oldx,Float:oldy,Float:oldz);
  1448. #endif
  1449. #if defined OnVehicleHealthChange
  1450. forward OnVehicleHealthChange(vehicleid,Float:newhealth,Float:oldhealth);
  1451. #endif
  1452. EVF::Function:: ResetVehicleProperties(vehicleid){
  1453. EVF::VehicleTrailerID[vehicleid] = INVALID_VEHICLE_ID;
  1454. for(new i = 0; i < _:(EVF::VehicleProperties); i++){
  1455. EVF::VehicleProperty[vehicleid][EVF::VehicleProperties:i] = 0;
  1456. }
  1457. }
  1458. EVF::Function:: GetComponentName(componentid,name[],len = sizeof(name)){
  1459. if(MIN_VEHICLE_COMPONENT_ID <= componentid <= MAX_VEHICLE_COMPONENT_ID){
  1460. componentid -= MIN_VEHICLE_COMPONENT_ID;
  1461. format(name,len,"%s",EVF::ComponentNames[componentid]);
  1462. return 1;
  1463. }
  1464. name[0] = '\0';
  1465. return 0;
  1466. }
  1467. EVF::Function:: EVF::IsPlayerInModShop(playerid){
  1468. if(IsPlayerConnected(playerid)) return EVF::ModShopStatus[playerid];
  1469. return 0;
  1470. }
  1471. EVF::Function:: IsValidComponentForVehicle(vehicleid,componentid){
  1472. new modelid = GetVehicleModel(vehicleid);
  1473. // Check for nitrous, wheels, and hydraulics.
  1474. if((1008 <= componentid <= 1010) || (componentid == 1025) || (1073 <= componentid <= 1087) || (1096 <= componentid <= 1098)){
  1475. switch (modelid){
  1476. case 581, 523, 462, 521, 463, 522, 461, 448, 468, 586,
  1477. 509, 481, 510, 472, 473, 493, 595, 484, 430, 453,
  1478. 452, 446, 454, 590, 569, 537, 538, 570, 449: return false;
  1479. default: return true;
  1480. }
  1481. } else {
  1482. modelid -= 400;
  1483. for(new i = 0; i < sizeof(EVF::ValidComponent[]); i++){
  1484. if(EVF::ValidComponent[modelid][i] == componentid) return true;
  1485. }
  1486. }
  1487. return false;
  1488. }
  1489. EVF::Function:: GetVehicleComponentPrice(componentid){
  1490. for(new i = 0; i < sizeof(EVF::ComponentPrice); i++){
  1491. if(EVF::ComponentPrice[i][0] == componentid){
  1492. return EVF::ComponentPrice[i][1];
  1493. }
  1494. }
  1495. return 0;
  1496. }
  1497. #if defined EVF_Streamer
  1498. EVF::Function:: SetVehicleNeonLights(vehicleid,bool:enable = true,color = RED_NEON){
  1499. if(!IsValidVehicle(vehicleid)) return 0;
  1500. new modelid = GetVehicleModel(vehicleid);
  1501. if(!IsValidVehicleModelID(modelid)) return 0;
  1502. modelid -= 400;
  1503. if(IsValidDynamicObject(EVF::VehicleNeon[vehicleid][0])) DestroyDynamicObject(EVF::VehicleNeon[vehicleid][0]);
  1504. if(IsValidDynamicObject(EVF::VehicleNeon[vehicleid][1])) DestroyDynamicObject(EVF::VehicleNeon[vehicleid][1]);
  1505. EVF::VehicleNeon[vehicleid][0] = EVF::VehicleNeon[vehicleid][1] = STREAMER_TAG_OBJECT INVALID_STREAMER_ID;
  1506. if(!enable) return 1;
  1507. if(18647 <= color <= 18652){
  1508. EVF::VehicleNeon[vehicleid][0] = CreateDynamicObject(color,0.0,0.0,0.0,0.0,0.0,0.0);
  1509. EVF::VehicleNeon[vehicleid][1] = CreateDynamicObject(color,0.0,0.0,0.0,0.0,0.0,0.0);
  1510. 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);
  1511. 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);
  1512. return 1;
  1513. }
  1514. return 0;
  1515. }
  1516. EVF::Function:: VehicleSupportsNeonLights(modelid){
  1517. if(!IsValidVehicleModelID(modelid)) return 0;
  1518. modelid -= 400;
  1519. return !(EVF::NeonOffsetData[modelid][EVF::NeonX] == 0.0 && EVF::NeonOffsetData[modelid][EVF::NeonY] == 0.0 && EVF::NeonOffsetData[modelid][EVF::NeonZ] == 0.0);
  1520. }
  1521. EVF::Function:: GetVehicleNeonLightsState(vehicleid){
  1522. if(!IsValidVehicle(vehicleid)) return 0;
  1523. return (IsValidDynamicObject(EVF::VehicleNeon[vehicleid][0]) && IsValidDynamicObject(EVF::VehicleNeon[vehicleid][1]));
  1524. }
  1525. #endif
  1526. //Detect YSF.inc
  1527. #if !defined _YSF_included
  1528. #define GetVehicleInterior(%0) GetVehiclePropertyValue((%0),e_VEHICLE_INTERIOR)
  1529. #define GetVehiclePaintjob(%0) GetVehiclePropertyValue((%0),e_VEHICLE_PAINTJOB)
  1530. EVF::Function:: GetVehicleColor(vehicleid,&color1,&color2){
  1531. if(IsValidVehicle(vehicleid)){
  1532. color1 = GetVehiclePropertyValue(vehicleid,e_VEHICLE_COLOR_1);
  1533. color2 = GetVehiclePropertyValue(vehicleid,e_VEHICLE_COLOR_2);
  1534. return 1;
  1535. }
  1536. return 0;
  1537. }
  1538. EVF::Function:: bool:IsVehicleOccupied(vehicleid){
  1539. EVF::Foreach(i){
  1540. if(IsPlayerInVehicle(i,vehicleid)){
  1541. return true;
  1542. }
  1543. }
  1544. return false;
  1545. }
  1546. #endif
  1547. #define EVF_GetVehicleInterior(%0) GetVehiclePropertyValue((%0),e_VEHICLE_INTERIOR)
  1548. #define EVF_GetVehiclePaintjob(%0) GetVehiclePropertyValue((%0),e_VEHICLE_PAINTJOB)
  1549. EVF::Function:: EVF::GetVehicleColor(vehicleid,&color1,&color2){
  1550. if(IsValidVehicle(vehicleid)){
  1551. color1 = GetVehiclePropertyValue(vehicleid,e_VEHICLE_COLOR_1);
  1552. color2 = GetVehiclePropertyValue(vehicleid,e_VEHICLE_COLOR_2);
  1553. return 1;
  1554. }
  1555. return 0;
  1556. }
  1557. EVF::Function:: bool:EVF::IsVehicleOccupied(vehicleid){
  1558. EVF::Foreach(i){
  1559. if(IsPlayerInVehicle(i,vehicleid)){
  1560. return true;
  1561. }
  1562. }
  1563. return false;
  1564. }
  1565. EVF::Function:: EVF::GetVehicleSpawnInfo(vehicleid,&Float:x,&Float:y,&Float:z,&Float:rotation,&worldid,&interiorid){
  1566. x = Float:GetVehiclePropertyValue(vehicleid,e_VEHICLE_SPAWN_X);
  1567. y = Float:GetVehiclePropertyValue(vehicleid,e_VEHICLE_SPAWN_Y);
  1568. z = Float:GetVehiclePropertyValue(vehicleid,e_VEHICLE_SPAWN_Z);
  1569. rotation = Float:GetVehiclePropertyValue(vehicleid,e_VEHICLE_SPAWN_A);
  1570. worldid = GetVehiclePropertyValue(vehicleid,e_VEHICLE_SPAWN_VW);
  1571. interiorid = GetVehiclePropertyValue(vehicleid,e_VEHICLE_SPAWN_INT);
  1572. return true;
  1573. }
  1574. EVF::Function:: EVF::SetVehicleSpawnInfo(vehicleid,Float:x,Float:y,Float:z,Float:rotation,worldid,interiorid){
  1575. SetVehiclePropertyValue(vehicleid,e_VEHICLE_SPAWN_X,_:x);
  1576. SetVehiclePropertyValue(vehicleid,e_VEHICLE_SPAWN_Y,_:y);
  1577. SetVehiclePropertyValue(vehicleid,e_VEHICLE_SPAWN_Z,_:z);
  1578. SetVehiclePropertyValue(vehicleid,e_VEHICLE_SPAWN_A,_:rotation);
  1579. SetVehiclePropertyValue(vehicleid,e_VEHICLE_SPAWN_VW,worldid);
  1580. SetVehiclePropertyValue(vehicleid,e_VEHICLE_SPAWN_INT,interiorid);
  1581. }
  1582. EVF::Function:: SetVehicleBomb(vehicleid,time = 1000){
  1583. if(IsVehicleBombed(vehicleid)){
  1584. SetVehicleParams(vehicleid,VEHICLE_TYPE_ALARM,0);
  1585. if(GetVehiclePropertyValue(vehicleid,e_VEHICLE_BOMB_TIMER) != -1){
  1586. KillTimer(GetVehiclePropertyValue(vehicleid,e_VEHICLE_BOMB_TIMER));
  1587. SetVehiclePropertyValue(vehicleid,e_VEHICLE_BOMB_TIMER,-1);
  1588. }
  1589. }
  1590. return SetVehiclePropertyValue(vehicleid,e_VEHICLE_BOMB,time);
  1591. }
  1592. EVF::Function:: IsVehicleBombActivated(vehicleid){
  1593. if(IsVehicleBombed(vehicleid)){
  1594. if(GetVehiclePropertyValue(vehicleid,e_VEHICLE_BOMB_TIMER) != -1){
  1595. return 1;
  1596. }
  1597. }
  1598. return 0;
  1599. }
  1600. EVF::Function:: EVF::UpdateVehicleDamage(vehicleid,type){
  1601. new panels, doors, lights, tires;
  1602. GetVehicleDamageStatus(vehicleid,panels,doors,lights,tires);
  1603. switch(type){
  1604. case VEHICLE_DAMAGE_PANELS: panels = 0x03331111;
  1605. case VEHICLE_DAMAGE_DOORS: doors = 0x04040404;
  1606. case VEHICLE_DAMAGE_LIGHTS: lights = 0x0000000F;
  1607. }
  1608. UpdateVehicleDamageStatus(vehicleid,panels,doors,lights,tires);
  1609. return 1;
  1610. }
  1611. EVF::Function:: EVF::UpdateVehicleDamageStatus(vehicleid,type,update){
  1612. new panels, doors, lights, tires;
  1613. GetVehicleDamageStatus(vehicleid,panels,doors,lights,tires);
  1614. switch(type){
  1615. case VEHICLE_DAMAGE_PANELS: return UpdateVehicleDamageStatus(vehicleid,update,doors,lights,tires);
  1616. case VEHICLE_DAMAGE_DOORS: return UpdateVehicleDamageStatus(vehicleid,panels,update,lights,tires);
  1617. case VEHICLE_DAMAGE_LIGHTS: return UpdateVehicleDamageStatus(vehicleid,panels,doors,update,tires);
  1618. case VEHICLE_DAMAGE_TIRES: return UpdateVehicleDamageStatus(vehicleid,panels,doors,lights,update);
  1619. }
  1620. return false;
  1621. }
  1622. EVF::Function:: EVF::GetVehicleDamageStatus(vehicleid,type){
  1623. new panels,doors,lights,tires;
  1624. GetVehicleDamageStatus(vehicleid,panels,doors,lights,tires);
  1625. switch(type){
  1626. case VEHICLE_DAMAGE_PANELS: return panels;
  1627. case VEHICLE_DAMAGE_DOORS: return doors;
  1628. case VEHICLE_DAMAGE_LIGHTS: return lights;
  1629. case VEHICLE_DAMAGE_TIRES: return tires;
  1630. }
  1631. return -1;
  1632. }
  1633. EVF::Function:: Float:EVF::GetVehicleSpeed(vehicleid){
  1634. new Float:x,Float:y,Float:z;
  1635. GetVehicleVelocity(vehicleid,x,y,z);
  1636. return floatmul(VectorSize(x,y,z),VEHICLE_SPEED_MULTIPLIER);
  1637. }
  1638. EVF::Function:: GetVehicleRandomColors(modelid,&color1,&color2){
  1639. if(!IsValidVehicleModelID(modelid)) return 0;
  1640. new index = 0;
  1641. color1 = color2 = 0;
  1642. modelid -= 400;
  1643. if(!EVF::CarColors[modelid][0]) return 0;
  1644. if(EVF::CarColors[modelid][0] == 2){
  1645. color1 = EVF::CarColors[modelid][1];
  1646. color2 = EVF::CarColors[modelid][2];
  1647. } else {
  1648. index = random(EVF::CarColors[modelid][0]) & -2;
  1649. color1 = EVF::CarColors[modelid][++index];
  1650. color2 = EVF::CarColors[modelid][++index];
  1651. }
  1652. return 1;
  1653. }
  1654. EVF::Function:: GetVehicleParams(vehicleid,EVF::ParamTypes:type){
  1655. new EVF::params[MAX_VEHICLE_PARAMS];
  1656. GetVehicleParamsEx(vehicleid,EVF::params[0],EVF::params[1],EVF::params[2],EVF::params[3],EVF::params[4],EVF::params[5],EVF::params[6]);
  1657. return (!(EVF::params[_:type] <= 0));
  1658. }
  1659. EVF::Function:: SetVehicleParams(vehicleid,EVF::ParamTypes:type,status,delay = 0){
  1660. new EVF::params[MAX_VEHICLE_PARAMS];
  1661. if(GetVehicleParamsEx(vehicleid,EVF::params[0],EVF::params[1],EVF::params[2],EVF::params[3],EVF::params[4],EVF::params[5],EVF::params[6])){
  1662. EVF::params[_:type] = status;
  1663. if(delay > 0){
  1664. 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]);
  1665. } else {
  1666. SetVehicleParamsEx(vehicleid,EVF::params[0],EVF::params[1],EVF::params[2],EVF::params[3],EVF::params[4],EVF::params[5],EVF::params[6]);
  1667. }
  1668. return 1;
  1669. }
  1670. return 0;
  1671. }
  1672. EVF::Function:: ToggleVehicleDamageUpdate(vehicleid,type,toggle){
  1673. if(!toggle){
  1674. if(GetVehicleParams(vehicleid,VEHICLE_TYPE_ENGINE)){
  1675. SetVehicleParams(vehicleid,VEHICLE_TYPE_ENGINE,0);
  1676. }
  1677. }
  1678. switch(type){
  1679. case VEHICLE_DAMAGE_PANELS: return SetVehiclePropertyValue(vehicleid,e_VEHICLE_DAMAGE_PANELS,_:toggle);
  1680. case VEHICLE_DAMAGE_DOORS: return SetVehiclePropertyValue(vehicleid,e_VEHICLE_DAMAGE_DOORS,_:toggle);
  1681. case VEHICLE_DAMAGE_LIGHTS: return SetVehiclePropertyValue(vehicleid,e_VEHICLE_DAMAGE_LIGHTS,_:toggle);
  1682. case VEHICLE_DAMAGE_TIRES: return SetVehiclePropertyValue(vehicleid,e_VEHICLE_DAMAGE_TIRES,_:toggle);
  1683. }
  1684. return 0;
  1685. }
  1686. EVF::Function:: IsVehicleDamageToggled(vehicleid,type){
  1687. switch(type){
  1688. case VEHICLE_DAMAGE_PANELS: return GetVehiclePropertyValue(vehicleid,e_VEHICLE_DAMAGE_PANELS);
  1689. case VEHICLE_DAMAGE_DOORS: return GetVehiclePropertyValue(vehicleid,e_VEHICLE_DAMAGE_DOORS);
  1690. case VEHICLE_DAMAGE_LIGHTS: return GetVehiclePropertyValue(vehicleid,e_VEHICLE_DAMAGE_LIGHTS);
  1691. case VEHICLE_DAMAGE_TIRES: return GetVehiclePropertyValue(vehicleid,e_VEHICLE_DAMAGE_TIRES);
  1692. }
  1693. return 0;
  1694. }
  1695. EVF::Function:: GetNearestVehicle(playerid){
  1696. new Float:fX, Float:fY, Float:fZ,
  1697. Float:fSX, Float:fSY, Float:fSZ,
  1698. Float:fRadius;
  1699. EVF::ForeachVehicle(i){
  1700. if(!IsVehicleStreamedIn(i,playerid)) continue;
  1701. GetVehiclePos(i,fX,fY,fZ);
  1702. GetVehicleModelInfo(GetVehicleModel(i),VEHICLE_MODEL_INFO_SIZE,fSX,fSY,fSZ);
  1703. fRadius = floatsqroot((fSX + fSX) + (fSY + fSY));
  1704. if(IsPlayerInRangeOfPoint(playerid,fRadius,fX,fY,fZ) && GetPlayerInterior(playerid) == GetVehicleInterior(i) && GetPlayerVirtualWorld(playerid) == GetVehicleVirtualWorld(i)){
  1705. return i;
  1706. }
  1707. }
  1708. return INVALID_VEHICLE_ID;
  1709. }
  1710. EVF::Function:: GetVehicleDriver(vehicleid){
  1711. EVF::Foreach(i){
  1712. if(GetPlayerState(i) == PLAYER_STATE_DRIVER && IsPlayerInVehicle(i,vehicleid)){
  1713. return i;
  1714. }
  1715. }
  1716. return INVALID_PLAYER_ID;
  1717. }
  1718. EVF::Function:: IsVehicleSeatOccupied(vehicleid,seatid){
  1719. if(!GetVehicleModel(vehicleid)) return 0;
  1720. EVF::Foreach(i){
  1721. if(IsPlayerInVehicle(i,vehicleid) && GetPlayerVehicleSeat(i) == seatid){
  1722. return 1;
  1723. }
  1724. }
  1725. return 0;
  1726. }
  1727. EVF::Function:: GetVehicleNextSeat(vehicleid,passenger = 1){
  1728. new seats = GetVehicleSeats(vehicleid);
  1729. if(seats > 1){
  1730. for(new i = passenger; i < seats; i++){
  1731. if(!IsVehicleSeatOccupied(vehicleid,i)){
  1732. return i;
  1733. }
  1734. }
  1735. }
  1736. return INVALID_SEAT_ID;
  1737. }
  1738. #if defined EVF_Streamer
  1739. EVF::Function:: STREAMER_TAG_OBJECT GetVehicleSlotAttachedObject(vehicleid,slot){
  1740. if(!IsValidDynamicObject(EVF::VehicleTempData[vehicleid][e_attached_object][slot])) return STREAMER_TAG_OBJECT INVALID_STREAMER_ID;
  1741. return EVF::VehicleTempData[vehicleid][e_attached_object][slot];
  1742. }
  1743. EVF::Function:: IsObjectAttachedToVehicle(STREAMER_TAG_OBJECT objectid,vehicleid){
  1744. for(new i = 0; i < MAX_VEHICLE_ATTACHED_OBJECTS; i++){
  1745. if(IsValidDynamicObject(EVF::VehicleTempData[vehicleid][e_attached_object][i])){
  1746. if(EVF::VehicleTempData[vehicleid][e_attached_object][i] == objectid) return 1;
  1747. }
  1748. }
  1749. return 0;
  1750. }
  1751. EVF::Function:: EditVehicle(playerid,vehicleid){
  1752. if(IsValidDynamicObject(STREAMER_TAG_OBJECT GetVehiclePropertyValue(vehicleid,e_VEHICLE_EDITOR))) return false;
  1753. new Float:pos[3];
  1754. GetVehiclePos(vehicleid,pos[0],pos[1],pos[2]);
  1755. SetVehiclePropertyValue(vehicleid,e_VEHICLE_EDITOR,_:CreateDynamicObject(19300,pos[0],pos[1],pos[2],0.0,0.0,0.0));
  1756. EditDynamicObject(playerid,STREAMER_TAG_OBJECT GetVehiclePropertyValue(vehicleid,e_VEHICLE_EDITOR));
  1757. EVF::PlayerTempData[playerid][e_editor_vehicle] = vehicleid;
  1758. EVF::PlayerTempData[playerid][e_editor_object] = STREAMER_TAG_OBJECT INVALID_STREAMER_ID;
  1759. return true;
  1760. }
  1761. EVF::Function:: EditVehicleObject(playerid,vehicleid,STREAMER_TAG_OBJECT objectid){
  1762. if(IsValidDynamicObject(STREAMER_TAG_OBJECT GetVehiclePropertyValue(vehicleid,e_VEHICLE_EDITOR))) return false;
  1763. if(!IsValidDynamicObject(objectid)) return false;
  1764. SetVehiclePropertyValue(vehicleid,e_VEHICLE_EDITOR,_:objectid);
  1765. new Float:pos[3];
  1766. GetVehiclePos(vehicleid,pos[0],pos[1],pos[2]);
  1767. new Float:angle;
  1768. GetVehicleZAngle(vehicleid,angle);
  1769. new model = Streamer_GetIntData(STREAMER_TYPE_OBJECT,objectid,E_STREAMER_MODEL_ID);
  1770. DestroyDynamicObject(objectid);
  1771. SetVehiclePropertyValue(vehicleid,e_VEHICLE_EDITOR,_:CreateDynamicObject(model,pos[0],pos[1],pos[2],angle,0.0,0.0));
  1772. EditDynamicObject(playerid,STREAMER_TAG_OBJECT GetVehiclePropertyValue(vehicleid,e_VEHICLE_EDITOR));
  1773. SetVehicleZAngle(vehicleid,0.0);
  1774. EVF::PlayerTempData[playerid][e_editor_vehicle] = vehicleid;
  1775. EVF::PlayerTempData[playerid][e_editor_object] = objectid;
  1776. return true;
  1777. }
  1778. #endif
  1779. EVF::Function:: TeleportVehicle(vehicleid,Float:x,Float:y,Float:z,Float:angle,worldid = -1,interiorid = -1){
  1780. EVF::Foreach(i){
  1781. if(GetPlayerVehicleID(i) == vehicleid){
  1782. if(worldid != -1){
  1783. SetPlayerVirtualWorld(i,worldid);
  1784. } else {
  1785. SetPlayerVirtualWorld(i,GetVehicleVirtualWorld(vehicleid));
  1786. }
  1787. if(interiorid != -1){
  1788. SetPlayerInterior(i,interiorid);
  1789. } else {
  1790. SetPlayerInterior(i,GetVehicleInterior(vehicleid));
  1791. }
  1792. }
  1793. }
  1794. if(worldid != -1) SetVehicleVirtualWorld(vehicleid,worldid);
  1795. if(interiorid != -1) SetVehicleInterior(vehicleid,interiorid);
  1796. SetVehiclePos(vehicleid,x,y,z);
  1797. SetVehicleZAngle(vehicleid,angle);
  1798. return 1;
  1799. }
  1800. EVF::Function:: GetVehiclePanels(vehicleid,&front_left,&front_right,&rear_left,&rear_right,&windshield,&front_bumper,&rear_bumper){
  1801. new panels,doors,lights,tires;
  1802. GetVehicleDamageStatus(vehicleid,panels,doors,lights,tires);
  1803. front_left = (panels & 0xF);
  1804. front_right = (panels >> 4) & 0xF;
  1805. rear_left = (panels >> 8) & 0xF;
  1806. rear_right = (panels >> 12) & 0xF;
  1807. windshield = (panels >> 16) & 0xF;
  1808. front_bumper = (panels >> 20) & 0xF;
  1809. rear_bumper = (panels >> 24) & 0xF;
  1810. }
  1811. EVF::Function:: SetVehiclePanels(vehicleid,front_left,front_right,rear_left,rear_right,windshield,front_bumper,rear_bumper){
  1812. new panels,doors,lights,tires;
  1813. GetVehicleDamageStatus(vehicleid,panels,doors,lights,tires);
  1814. panels = (front_left | (front_right << 4) | (rear_left << 8) | (rear_right << 12) | (windshield << 16) | (front_bumper << 20) | (rear_bumper << 24));
  1815. UpdateVehicleDamageStatus(vehicleid,panels,doors,lights,tires);
  1816. }
  1817. //Update by Freaksken
  1818. EVF::Function:: GetVehicleLights(vehicleid,&front_left_light,&front_right_light,&back_lights){
  1819. new panels,doors,lights,tires;
  1820. GetVehicleDamageStatus(vehicleid,panels,doors,lights,tires);
  1821. front_left_light = (lights & 0x1);
  1822. front_right_light = (lights >> 2 & 0x1);
  1823. back_lights = (lights >> 6 & 0x1);
  1824. }
  1825. //Update by Freaksken
  1826. EVF::Function:: SetVehicleLights(vehicleid,front_left_light,front_right_light,back_lights){
  1827. new panels,doors,lights,tires;
  1828. GetVehicleDamageStatus(vehicleid,panels,doors,lights,tires);
  1829. lights = (front_left_light | (front_right_light << 2) | (back_lights << 6));
  1830. UpdateVehicleDamageStatus(vehicleid,panels,doors,lights,tires);
  1831. }
  1832. EVF::Function:: GetVehicleDoors(vehicleid,&bonnet,&boot,&driver_door,&passenger_door){
  1833. new panels,doors,lights,tires;
  1834. GetVehicleDamageStatus(vehicleid,panels,doors,lights,tires);
  1835. bonnet = (doors & 0x7);
  1836. boot = ((doors >> 8) & 0x7);
  1837. driver_door = ((doors >> 16) & 0x7);
  1838. passenger_door = ((doors >> 24) & 0x7);
  1839. }
  1840. EVF::Function:: SetVehicleDoors(vehicleid,bonnet,boot,driver_door,passenger_door){
  1841. new panels,doors,lights,tires;
  1842. GetVehicleDamageStatus(vehicleid,panels,doors,lights,tires);
  1843. doors = (bonnet | (boot << 8) | (driver_door << 16) | (passenger_door << 24));
  1844. UpdateVehicleDamageStatus(vehicleid,panels,doors,lights,tires);
  1845. }
  1846. EVF::Function:: GetVehicleTires(vehicleid,&front_left,&front_right,&rear_left,&rear_right){
  1847. new panels,doors,lights,tires;
  1848. GetVehicleDamageStatus(vehicleid,panels,doors,lights,tires);
  1849. rear_right = (tires & 0x1);
  1850. front_right = (tires >> 1 & 0x1);
  1851. rear_left = (tires >> 2 & 0x1);
  1852. front_left = (tires >> 3 & 0x1);
  1853. }
  1854. EVF::Function:: SetVehicleTires(vehicleid,front_left,front_right,rear_left,rear_right){
  1855. new panels,doors,lights,tires;
  1856. GetVehicleDamageStatus(vehicleid,panels,doors,lights,tires);
  1857. tires = (rear_right | (front_right << 1) | (rear_left << 2) | (front_left << 3));
  1858. UpdateVehicleDamageStatus(vehicleid,panels,doors,lights,tires);
  1859. }
  1860. EVF::Function:: SwitchVehicleEngine(vehicleid,bool:engine_status){
  1861. new engine,lights,alarm,doors,bonnet,boot,objective;
  1862. GetVehicleParamsEx(vehicleid,engine,lights,alarm,doors,bonnet,boot,objective);
  1863. SetVehicleParamsEx(vehicleid,_:engine_status,lights,alarm,doors,bonnet,boot,objective);
  1864. }
  1865. EVF::Function:: SwitchVehicleLight(vehicleid,bool:light_status){
  1866. new engine,lights,alarm,doors,bonnet,boot,objective;
  1867. GetVehicleParamsEx(vehicleid,engine,lights,alarm,doors,bonnet,boot,objective);
  1868. SetVehicleParamsEx(vehicleid,engine,_:light_status,alarm,doors,bonnet,boot,objective);
  1869. }
  1870. EVF::Function:: SwitchVehicleAlarm(vehicleid,bool:alarm_status){
  1871. new engine,lights,alarm,doors,bonnet,boot,objective;
  1872. GetVehicleParamsEx(vehicleid,engine,lights,alarm,doors,bonnet,boot,objective);
  1873. SetVehicleParamsEx(vehicleid,engine,lights,_:alarm_status,doors,bonnet,boot,objective);
  1874. }
  1875. EVF::Function:: SwitchVehicleDoors(vehicleid,bool:doors_status){
  1876. new engine,lights,alarm,doors,bonnet,boot,objective;
  1877. GetVehicleParamsEx(vehicleid,engine,lights,alarm,doors,bonnet,boot,objective);
  1878. SetVehicleParamsEx(vehicleid,engine,lights,alarm,_:doors_status,bonnet,boot,objective);
  1879. }
  1880. EVF::Function:: SwitchVehicleBonnet(vehicleid,bool:bonnet_status){
  1881. new engine,lights,alarm,doors,bonnet,boot,objective;
  1882. GetVehicleParamsEx(vehicleid,engine,lights,alarm,doors,bonnet,boot,objective);
  1883. SetVehicleParamsEx(vehicleid,engine,lights,alarm,doors,_:bonnet_status,boot,objective);
  1884. }
  1885. EVF::Function:: SwitchVehicleBoot(vehicleid,bool:boot_status){
  1886. new engine,lights,alarm,doors,bonnet,boot,objective;
  1887. GetVehicleParamsEx(vehicleid,engine,lights,alarm,doors,bonnet,boot,objective);
  1888. SetVehicleParamsEx(vehicleid,engine,lights,alarm,doors,bonnet,_:boot_status,objective);
  1889. }
  1890. EVF::Function:: SwitchVehicleObjective(vehicleid,bool:objective_status){
  1891. new engine,lights,alarm,doors,bonnet,boot,objective;
  1892. GetVehicleParamsEx(vehicleid,engine,lights,alarm,doors,bonnet,boot,objective);
  1893. SetVehicleParamsEx(vehicleid,engine,lights,alarm,doors,bonnet,boot,_:objective_status);
  1894. }
  1895. EVF::Function:: GetVehicleWindowState(vehicleid,doorid){
  1896. new driver,passenger,backleft,backright;
  1897. GetVehicleParamsCarWindows(vehicleid,driver,passenger,backleft,backright);
  1898. switch(doorid){
  1899. case DOOR_DRIVER: return driver;
  1900. case DOOR_PASSENGER: return passenger;
  1901. case DOOR_BACKLEFF: return backleft;
  1902. case DOOR_BACKRIGHT: return backright;
  1903. }
  1904. return 0;
  1905. }
  1906. EVF::Function:: SetVehicleWindowState(vehicleid,doorid,window_state){
  1907. if(!IsValidVehicleDoor(vehicleid,doorid)) return 0;
  1908. new driver,passenger,backleft,backright;
  1909. GetVehicleParamsCarWindows(vehicleid,driver,passenger,backleft,backright);
  1910. switch(doorid){
  1911. case DOOR_DRIVER: SetVehicleParamsCarWindows(vehicleid,window_state,passenger,backleft,backright);
  1912. case DOOR_PASSENGER: SetVehicleParamsCarWindows(vehicleid,driver,window_state,backleft,backright);
  1913. case DOOR_BACKLEFF: SetVehicleParamsCarWindows(vehicleid,driver,passenger,window_state,backright);
  1914. case DOOR_BACKRIGHT: SetVehicleParamsCarWindows(vehicleid,driver,passenger,backleft,window_state);
  1915. }
  1916. return 1;
  1917. }
  1918. EVF::Function:: GetVehicleDoorState(vehicleid,doorid){
  1919. new driver,passenger,backleft,backright;
  1920. GetVehicleParamsCarDoors(vehicleid,driver,passenger,backleft,backright);
  1921. switch(doorid){
  1922. case DOOR_DRIVER: return driver;
  1923. case DOOR_PASSENGER: return passenger;
  1924. case DOOR_BACKLEFF: return backleft;
  1925. case DOOR_BACKRIGHT: return backright;
  1926. }
  1927. return 0;
  1928. }
  1929. EVF::Function:: SetVehicleDoorState(vehicleid,doorid,door_state){
  1930. if(!IsValidVehicleDoor(vehicleid,doorid)) return 0;
  1931. new driver,passenger,backleft,backright;
  1932. GetVehicleParamsCarDoors(vehicleid,driver,passenger,backleft,backright);
  1933. switch(doorid){
  1934. case DOOR_DRIVER: SetVehicleParamsCarDoors(vehicleid,door_state,passenger,backleft,backright);
  1935. case DOOR_PASSENGER: SetVehicleParamsCarDoors(vehicleid,driver,door_state,backleft,backright);
  1936. case DOOR_BACKLEFF: SetVehicleParamsCarDoors(vehicleid,driver,passenger,door_state,backright);
  1937. case DOOR_BACKRIGHT: SetVehicleParamsCarDoors(vehicleid,driver,passenger,backleft,door_state);
  1938. }
  1939. return 1;
  1940. }
  1941. EVF::Public:: OnVehicleTimeUpdate(){
  1942. new Float:EVF::Vec[4];
  1943. EVF::ForeachVehicle(vehicleid){
  1944. if(EVF::VehicleProperty[vehicleid][e_VEHICLE_STORED]){
  1945. GetVehiclePos(vehicleid,EVF::Vec[0],EVF::Vec[1],EVF::Vec[2]);
  1946. GetVehicleZAngle(vehicleid,EVF::Vec[3]);
  1947. if(IsVehicleSticky(vehicleid)){
  1948. 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){
  1949. 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));
  1950. }
  1951. }
  1952. #if defined OnVehiclePosChange
  1953. 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){
  1954. 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])){
  1955. EVF::VehicleTempData[vehicleid][e_pos_x] = EVF::Vec[0];
  1956. EVF::VehicleTempData[vehicleid][e_pos_y] = EVF::Vec[1];
  1957. EVF::VehicleTempData[vehicleid][e_pos_z] = EVF::Vec[2];
  1958. EVF::VehicleTempData[vehicleid][e_pos_a] = EVF::Vec[3];
  1959. } else {
  1960. 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));
  1961. }
  1962. }
  1963. #endif
  1964. GetVehicleVelocity(vehicleid,EVF::Vec[0],EVF::Vec[1],EVF::Vec[2]);
  1965. if(IsVehicleFuelToggled(vehicleid)){
  1966. //fuel system
  1967. new Float:vehicle_speed = EVF::GetVehicleSpeed(vehicleid);
  1968. //if vehicle out of fuel
  1969. if(GetVehicleFuel(vehicleid) <= 0){
  1970. SetVehicleParams(vehicleid,VEHICLE_TYPE_ENGINE,0);
  1971. new vehicle_driver = GetVehicleDriverID(vehicleid);
  1972. if(IsPlayerConnected(vehicle_driver)){
  1973. GameTextForPlayer(vehicle_driver,"~r~Vehicle out of fuel !",5000,3);
  1974. }
  1975. } else {
  1976. //if vehicle has some EVF::Vecitive fuel
  1977. EVF::VehicleTempData[vehicleid][e_uptime] += 1;
  1978. //if the vehicle speed is quiet high
  1979. new fuel_consumption_level = 0;
  1980. if(vehicle_speed == 0.0 && GetVehicleParams(vehicleid,VEHICLE_TYPE_ENGINE)){
  1981. fuel_consumption_level = MULTIPLIER_FUEL_SYSTEM;
  1982. } else if(vehicle_speed > 0.0){
  1983. for(new i = 20, j = floatround(GetVehicleTopSpeed(vehicleid)); i <= j; i += 20){
  1984. if(vehicle_speed > i){
  1985. fuel_consumption_level += MULTIPLIER_FUEL_SYSTEM;
  1986. }
  1987. }
  1988. }
  1989. EVF::VehicleTempData[vehicleid][e_uptime] += 1;
  1990. if(EVF::VehicleTempData[vehicleid][e_uptime] > 20){ // 250 ms * 20 = 5 seconds
  1991. EVF::VehicleTempData[vehicleid][e_uptime] = 0;
  1992. new old_fuel = GetVehicleFuel(vehicleid),
  1993. new_fuel = (old_fuel - fuel_consumption_level - 1);
  1994. if(new_fuel < 0) new_fuel = 0;
  1995. CallRemoteFunction("OnVehicleFuelChange","iii",vehicleid,new_fuel,old_fuel);
  1996. SetVehicleFuel(vehicleid,new_fuel);
  1997. }
  1998. }
  1999. #if defined OnVehicleVelocityChange
  2000. 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])){
  2001. EVF::VehicleTempData[vehicleid][e_vel_x] = EVF::Vec[0];
  2002. EVF::VehicleTempData[vehicleid][e_vel_y] = EVF::Vec[1];
  2003. EVF::VehicleTempData[vehicleid][e_vel_z] = EVF::Vec[2];
  2004. } else {
  2005. return SetVehicleVelocity(vehicleid,EVF::VehicleTempData[vehicleid][e_vel_x],EVF::VehicleTempData[vehicleid][e_vel_y],EVF::VehicleTempData[vehicleid][e_vel_z]);
  2006. }
  2007. #endif
  2008. }
  2009. GetVehicleHealth(vehicleid,EVF::Vec[0]);
  2010. #if defined OnVehicleHealthChange
  2011. if(EVF::Vec[0] != EVF::VehicleTempData[vehicleid][e_health]){
  2012. if(CallRemoteFunction("OnVehicleHealthChange","iff",vehicleid,EVF::Vec[0],EVF::VehicleTempData[vehicleid][e_health])){
  2013. EVF::VehicleTempData[vehicleid][e_health] = EVF::Vec[0];
  2014. } else {
  2015. return SetVehicleHealth(vehicleid,EVF::VehicleTempData[vehicleid][e_health]);
  2016. }
  2017. }
  2018. #endif
  2019. }
  2020. }
  2021. return 1;
  2022. }
  2023. EVF::Public:: EVF::SetVehicleParamsEx(vehicleid,engine,lights,alarm,doors,bonnet,boot,objective){
  2024. SetVehicleParamsEx(vehicleid,engine,lights,alarm,doors,bonnet,boot,objective);
  2025. }
  2026. EVF::Public:: EVF::OnVehicleBombActivate(playerid,vehicleid){
  2027. SetVehicleParams(vehicleid,VEHICLE_TYPE_ALARM,1);
  2028. SetVehiclePropertyValue(vehicleid,e_VEHICLE_BOMB_TIMER,SetTimerEx("EVF_OnVehicleBombExplode",1750,false,"ii",playerid,vehicleid));
  2029. return 1;
  2030. }
  2031. EVF::Public:: EVF::ImportVehicle(vehicleid,modelid,Float:x,Float:y,Float:z,Float:angle,color1,color2,worldid,interiorid,unoccupied_damage){
  2032. EVF::VehicleProperty[vehicleid][e_VEHICLE_SPAWN_X] = _:x;
  2033. EVF::VehicleProperty[vehicleid][e_VEHICLE_SPAWN_Y] = _:y;
  2034. EVF::VehicleProperty[vehicleid][e_VEHICLE_SPAWN_Z] = _:z;
  2035. EVF::VehicleProperty[vehicleid][e_VEHICLE_SPAWN_A] = _:angle;
  2036. EVF::VehicleProperty[vehicleid][e_VEHICLE_PAINTJOB] = RESET_PAINTJOB_ID;
  2037. EVF::VehicleProperty[vehicleid][e_VEHICLE_INTERIOR] = interiorid;
  2038. EVF::VehicleProperty[vehicleid][e_VEHICLE_COLOR_1] = color1;
  2039. EVF::VehicleProperty[vehicleid][e_VEHICLE_COLOR_2] = color2;
  2040. EVF::VehicleProperty[vehicleid][e_VEHICLE_HORN] = 0;
  2041. EVF::VehicleProperty[vehicleid][e_VEHICLE_SPAWN_VW] = worldid;
  2042. EVF::VehicleProperty[vehicleid][e_VEHICLE_SPAWN_INT] = interiorid;
  2043. EVF::VehicleProperty[vehicleid][e_VEHICLE_SPEED_CAP] = 0;
  2044. EVF::VehicleProperty[vehicleid][e_VEHICLE_FUEL_USE] = 0;
  2045. EVF::VehicleProperty[vehicleid][e_VEHICLE_FUEL] = 0;
  2046. EVF::VehicleProperty[vehicleid][e_VEHICLE_STICKY] = 0;
  2047. EVF::VehicleProperty[vehicleid][e_VEHICLE_UNO_DAMAGE] = ((unoccupied_damage)?(1):(0));
  2048. EVF::VehicleProperty[vehicleid][e_VEHICLE_CAP_DAMAGE] = 0;
  2049. EVF::VehicleProperty[vehicleid][e_VEHICLE_EDITOR] = 0;
  2050. EVF::VehicleProperty[vehicleid][e_VEHICLE_DAMAGE_PANELS] = 1;
  2051. EVF::VehicleProperty[vehicleid][e_VEHICLE_DAMAGE_DOORS] = 1;
  2052. EVF::VehicleProperty[vehicleid][e_VEHICLE_DAMAGE_LIGHTS] = 1;
  2053. EVF::VehicleProperty[vehicleid][e_VEHICLE_DAMAGE_TIRES] = 1;
  2054. EVF::VehicleProperty[vehicleid][e_VEHICLE_BOMB] = 0;
  2055. EVF::VehicleProperty[vehicleid][e_VEHICLE_BOMB_TIMER] = -1;
  2056. EVF::VehicleProperty[vehicleid][e_VEHICLE_BULLETPROOF] = 0;
  2057. EVF::VehicleTempData[vehicleid][e_pos_x] = x;
  2058. EVF::VehicleTempData[vehicleid][e_pos_y] = y;
  2059. EVF::VehicleTempData[vehicleid][e_pos_z] = z;
  2060. EVF::VehicleTempData[vehicleid][e_pos_a] = angle;
  2061. EVF::VehicleTempData[vehicleid][e_vel_x] = 0.0;
  2062. EVF::VehicleTempData[vehicleid][e_vel_y] = 0.0;
  2063. EVF::VehicleTempData[vehicleid][e_vel_z] = 0.0;
  2064. EVF::VehicleTempData[vehicleid][e_health] = 1000.0;
  2065. EVF::VehicleTempData[vehicleid][e_uptime] = 0;
  2066. SetVehiclePropertyValue(vehicleid,e_VEHICLE_STORED,1);
  2067. return 1;
  2068. }
  2069. EVF::Public:: EVF::RemoveVehicle(vehicleid){
  2070. SetVehiclePropertyValue(vehicleid,e_VEHICLE_STORED,0);
  2071. return 1;
  2072. }
  2073. EVF::Public:: EVF::OnVehicleBombExplode(playerid,vehicleid){
  2074. if(GetPlayerState(playerid) != PLAYER_STATE_DRIVER){
  2075. if(!CallRemoteFunction("OnVehicleBombDeactivate","i",vehicleid)){
  2076. return SetVehicleParams(vehicleid,VEHICLE_TYPE_ALARM,0);
  2077. }
  2078. }
  2079. CallRemoteFunction("OnVehicleBombExplode","i",vehicleid);
  2080. SetVehicleParams(vehicleid,VEHICLE_TYPE_ALARM,0);
  2081. new Float:pos[3];
  2082. GetVehiclePos(vehicleid,pos[0],pos[1],pos[2]);
  2083. #if defined _3D_Tryg
  2084. CreateDynamicExplosion(pos[0],pos[1],pos[2],3,30.0,GetVehicleVirtualWorld(vehicleid),GetVehicleInterior(vehicleid),-1,200.0);
  2085. #else
  2086. CreateExplosion(pos[0],pos[1],pos[2],3,30.0);
  2087. #endif
  2088. SetVehicleToRespawn(vehicleid);
  2089. if(GetPlayerVehicleID(playerid) == vehicleid){
  2090. SetPlayerHealth(playerid,0.0);
  2091. GameTextForPlayer(playerid,"~r~Bombed !",3500,3);
  2092. }
  2093. SetVehiclePropertyValue(vehicleid,e_VEHICLE_BOMB_TIMER,-1);
  2094. return 1;
  2095. }
  2096. //Hook: SetVehicleHealth
  2097. EVF::Function:: EVF::SetVehicleHealth(vehicleid,Float:health){
  2098. if(SetVehicleHealth(vehicleid,health)){
  2099. EVF::VehicleTempData[vehicleid][e_health] = health;
  2100. return 1;
  2101. }
  2102. return 0;
  2103. }
  2104. #if defined _ALS_SetVehicleHealth
  2105. #undef SetVehicleHealth
  2106. #else
  2107. #define _ALS_SetVehicleHealth
  2108. #endif
  2109. #define SetVehicleHealth EVF_SetVehicleHealth
  2110. //Hook: SetVehiclePos
  2111. EVF::Function:: EVF::SetVehiclePos(vehicleid,Float:x,Float:y,Float:z){
  2112. if(SetVehiclePos(vehicleid,Float:x,Float:y,Float:z)){
  2113. EVF::VehicleTempData[vehicleid][e_pos_x] = x;
  2114. EVF::VehicleTempData[vehicleid][e_pos_y] = y;
  2115. EVF::VehicleTempData[vehicleid][e_pos_z] = z;
  2116. return 1;
  2117. }
  2118. return 0;
  2119. }
  2120. #if defined _ALS_SetVehiclePos
  2121. #undef SetVehiclePos
  2122. #else
  2123. #define _ALS_SetVehiclePos
  2124. #endif
  2125. #define SetVehiclePos EVF_SetVehiclePos
  2126. //Hook: SetVehicleZAngle
  2127. EVF::Function:: EVF::SetVehicleZAngle(vehicleid,Float:angle){
  2128. if(SetVehicleZAngle(vehicleid,angle)){
  2129. EVF::VehicleTempData[vehicleid][e_pos_a] = angle;
  2130. return 1;
  2131. }
  2132. return 0;
  2133. }
  2134. #if defined _ALS_SetVehicleZAngle
  2135. #undef SetVehicleZAngle
  2136. #else
  2137. #define _ALS_SetVehicleZAngle
  2138. #endif
  2139. #define SetVehicleZAngle EVF_SetVehicleZAngle
  2140. //Hook: LinkVehicleToInterior
  2141. EVF::Function:: EVF::LinkVehicleToInterior(vehicleid,interiorid){
  2142. if(LinkVehicleToInterior(vehicleid,interiorid)){
  2143. SetVehiclePropertyValue(vehicleid,e_VEHICLE_INTERIOR,interiorid);
  2144. return 1;
  2145. }
  2146. return 0;
  2147. }
  2148. #if defined _ALS_LinkVehicleToInterior
  2149. #undef LinkVehicleToInterior
  2150. #else
  2151. #define _ALS_LinkVehicleToInterior
  2152. #endif
  2153. #define LinkVehicleToInterior EVF_LinkVehicleToInterior
  2154. //Hook: ChangeVehicleColor
  2155. EVF::Function:: EVF::ChangeVehicleColor(vehicleid,color1,color2){
  2156. new randcolor1, randcolor2;
  2157. if(GetVehicleRandomColors(GetVehicleModel(vehicleid),randcolor1,randcolor2)){
  2158. if(color1 == -1) color1 = randcolor1;
  2159. if(color2 == -1) color2 = randcolor2;
  2160. }
  2161. if(ChangeVehicleColor(vehicleid,color1,color2)){
  2162. SetVehiclePropertyValue(vehicleid,e_VEHICLE_COLOR_1,color1);
  2163. SetVehiclePropertyValue(vehicleid,e_VEHICLE_COLOR_2,color2);
  2164. return 1;
  2165. }
  2166. return 0;
  2167. }
  2168. #if defined _ALS_ChangeVehicleColor
  2169. #undef ChangeVehicleColor
  2170. #else
  2171. #define _ALS_ChangeVehicleColor
  2172. #endif
  2173. #define ChangeVehicleColor EVF_ChangeVehicleColor
  2174. //Hook: ChangeVehiclePaintjob
  2175. EVF::Function:: EVF::ChangeVehiclePaintjob(vehicleid,paintjobid){
  2176. if(ChangeVehiclePaintjob(vehicleid,paintjobid)){
  2177. SetVehiclePropertyValue(vehicleid,e_VEHICLE_PAINTJOB,paintjobid);
  2178. if(paintjobid == RESET_PAINTJOB_ID){
  2179. new color1,color2;
  2180. if(EVF::GetVehicleColor(vehicleid,color1,color2)){
  2181. ChangeVehicleColor(vehicleid,color1,color2);
  2182. }
  2183. }
  2184. return 1;
  2185. }
  2186. return 0;
  2187. }
  2188. #if defined _ALS_ChangeVehiclePaintjob
  2189. #undef ChangeVehiclePaintjob
  2190. #else
  2191. #define _ALS_ChangeVehiclePaintjob
  2192. #endif
  2193. #define ChangeVehiclePaintjob EVF_ChangeVehiclePaintjob
  2194. //Hook: OnVehicleRespray
  2195. public OnVehicleRespray(playerid,vehicleid,color1,color2){
  2196. SetVehiclePropertyValue(vehicleid,e_VEHICLE_COLOR_1,color1);
  2197. SetVehiclePropertyValue(vehicleid,e_VEHICLE_COLOR_2,color2);
  2198. #if defined EVF_OnVehicleRespray
  2199. EVF::OnVehicleRespray(playerid,vehicleid,color1,color2);
  2200. #endif
  2201. return 1;
  2202. }
  2203. #if defined _ALS_OnVehicleRespray
  2204. #undef OnVehicleRespray
  2205. #else
  2206. #define _ALS_OnVehicleRespray
  2207. #endif
  2208. #define OnVehicleRespray EVF_OnVehicleRespray
  2209. #if defined EVF_OnVehicleRespray
  2210. forward EVF_OnVehicleRespray(playerid,vehicleid,color1,color2);
  2211. #endif
  2212. //Hook: OnVehiclePaintjob
  2213. public OnVehiclePaintjob(playerid,vehicleid,paintjobid){
  2214. SetVehiclePropertyValue(vehicleid,e_VEHICLE_PAINTJOB,paintjobid);
  2215. #if defined EVF_OnVehiclePaintjob
  2216. EVF::OnVehiclePaintjob(playerid,vehicleid,paintjobid);
  2217. #endif
  2218. return 1;
  2219. }
  2220. #if defined _ALS_OnVehiclePaintjob
  2221. #undef OnVehiclePaintjob
  2222. #else
  2223. #define _ALS_OnVehiclePaintjob
  2224. #endif
  2225. #define OnVehiclePaintjob EVF_OnVehiclePaintjob
  2226. #if defined EVF_OnVehiclePaintjob
  2227. forward EVF_OnVehiclePaintjob(playerid,vehicleid,paintjobid);
  2228. #endif
  2229. //Hook: CreateVehicle
  2230. 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){
  2231. if(!IsValidVehicleModelID(modelid)) return INVALID_VEHICLE_ID;
  2232. new vehicleid = INVALID_VEHICLE_ID, randcolor1, randcolor2;
  2233. if(GetVehicleRandomColors(modelid,randcolor1,randcolor2)){
  2234. if(color1 == -1) color1 = randcolor1;
  2235. if(color2 == -1) color2 = randcolor2;
  2236. }
  2237. switch(modelid){
  2238. case 569, 570, 537, 538: vehicleid = AddStaticVehicleEx(modelid,x,y,z,angle,color1,color2,respawn_delay,addsiren);
  2239. default: vehicleid = CreateVehicle(modelid,x,y,z,angle,color1,color2,respawn_delay,addsiren);
  2240. }
  2241. if(vehicleid == INVALID_VEHICLE_ID || !IsValidVehicle(vehicleid)){
  2242. printf("[ADM] Error: Your server have reached MAX_VEHICLES limit (%i).",MAX_VEHICLES);
  2243. return INVALID_VEHICLE_ID;
  2244. }
  2245. ResetVehicleProperties(vehicleid);
  2246. #if defined EVF_Streamer
  2247. for(new i = 0; i < MAX_VEHICLE_ATTACHED_OBJECTS; i++){
  2248. EVF::VehicleTempData[vehicleid][e_attached_object][i] = STREAMER_TAG_OBJECT INVALID_STREAMER_ID;
  2249. }
  2250. #endif
  2251. EVF::VehicleTempData[vehicleid][e_pos_x] = x;
  2252. EVF::VehicleTempData[vehicleid][e_pos_y] = y;
  2253. EVF::VehicleTempData[vehicleid][e_pos_z] = z;
  2254. EVF::VehicleTempData[vehicleid][e_pos_a] = angle;
  2255. EVF::VehicleTempData[vehicleid][e_vel_x] = 0.0;
  2256. EVF::VehicleTempData[vehicleid][e_vel_y] = 0.0;
  2257. EVF::VehicleTempData[vehicleid][e_vel_z] = 0.0;
  2258. EVF::VehicleTempData[vehicleid][e_health] = 1000.0;
  2259. EVF::VehicleTempData[vehicleid][e_uptime] = 0;
  2260. LinkVehicleToInterior(vehicleid,interiorid);
  2261. SetVehicleVirtualWorld(vehicleid,worldid);
  2262. SetVehicleHorn(vehicleid,0);
  2263. SetVehicleFuel(vehicleid,DEFAULT_VEHICLE_FUEL);
  2264. SetVehicleSpeedCap(vehicleid,0.0);
  2265. ToggleUnoccupiedVehicleDamage(vehicleid,unoccupied_damage);
  2266. ToggleVehicleSticky(vehicleid,0);
  2267. ToggleVehiclePetrolCapDestroy(vehicleid,0);
  2268. ToggleVehicleFuel(vehicleid,0);
  2269. SetVehiclePropertyValue(vehicleid,e_VEHICLE_COLOR_1,color1);
  2270. SetVehiclePropertyValue(vehicleid,e_VEHICLE_COLOR_2,color2);
  2271. SetVehiclePropertyValue(vehicleid,e_VEHICLE_PAINTJOB,RESET_PAINTJOB_ID);
  2272. SetVehiclePropertyValue(vehicleid,e_VEHICLE_SPAWN_X,_:x);
  2273. SetVehiclePropertyValue(vehicleid,e_VEHICLE_SPAWN_Y,_:y);
  2274. SetVehiclePropertyValue(vehicleid,e_VEHICLE_SPAWN_Z,_:z);
  2275. SetVehiclePropertyValue(vehicleid,e_VEHICLE_SPAWN_A,_:angle);
  2276. SetVehiclePropertyValue(vehicleid,e_VEHICLE_SPAWN_VW,worldid);
  2277. SetVehiclePropertyValue(vehicleid,e_VEHICLE_SPAWN_INT,interiorid);
  2278. SetVehiclePropertyValue(vehicleid,e_VEHICLE_EDITOR,0);
  2279. SetVehiclePropertyValue(vehicleid,e_VEHICLE_BOMB,0);
  2280. SetVehiclePropertyValue(vehicleid,e_VEHICLE_BOMB_TIMER,-1);
  2281. SetVehiclePropertyValue(vehicleid,e_VEHICLE_BULLETPROOF,0);
  2282. SetVehiclePropertyValue(vehicleid,e_VEHICLE_STORED,1);
  2283. for(new i = 0; i < 4; i++) ToggleVehicleDamageUpdate(vehicleid,i,1);
  2284. CallRemoteFunction("OnVehicleCreated","i",vehicleid);
  2285. return vehicleid;
  2286. }
  2287. #if defined _ALS_CreateVehicle
  2288. #undef CreateVehicle
  2289. #else
  2290. #define _ALS_CreateVehicle
  2291. #endif
  2292. #define CreateVehicle EVF_CreateVehicle
  2293. //Hook: AddStaticVehicle
  2294. EVF::Function:: EVF::AddStaticVehicle(modelid,Float:spawn_x,Float:spawn_y,Float:spawn_z,Float:z_angle,color1,color2){
  2295. return EVF::CreateVehicle(modelid,spawn_x,spawn_y,spawn_z,z_angle,color1,color2,-1);
  2296. }
  2297. #if defined _ALS_AddStaticVehicle
  2298. #undef AddStaticVehicle
  2299. #else
  2300. #define _ALS_AddStaticVehicle
  2301. #endif
  2302. #define AddStaticVehicle EVF_AddStaticVehicle
  2303. //Hook: AddStaticVehicleEx
  2304. EVF::Function:: EVF::AddStaticVehicleEx(modelid,Float:spawn_x,Float:spawn_y,Float:spawn_z,Float:z_angle,color1,color2,respawn_delay,addsiren=0){
  2305. return EVF::CreateVehicle(modelid,spawn_x,spawn_y,spawn_z,z_angle,color1,color2,respawn_delay,addsiren);
  2306. }
  2307. #if defined _ALS_AddStaticVehicleEx
  2308. #undef AddStaticVehicleEx
  2309. #else
  2310. #define _ALS_AddStaticVehicleEx
  2311. #endif
  2312. #define AddStaticVehicleEx EVF_CreateVehicle
  2313. //Hook: DestroyVehicle
  2314. EVF::Function:: EVF::DestroyVehicle(vehicleid){
  2315. if(!IsValidVehicle(vehicleid)) return 0;
  2316. EVF::Foreach(i){
  2317. if(EVF::PlayerTempData[i][e_editor_vehicle] == GetVehiclePropertyValue(vehicleid,e_VEHICLE_EDITOR)){
  2318. CancelEdit(i);
  2319. }
  2320. }
  2321. #if defined EVF_Streamer
  2322. new objectid = GetVehiclePropertyValue(vehicleid,e_VEHICLE_EDITOR);
  2323. DestroyDynamicObject(STREAMER_TAG_OBJECT objectid);
  2324. for(new i = 0; i < MAX_VEHICLE_ATTACHED_OBJECTS; i++){
  2325. if(IsValidDynamicObject(EVF::VehicleTempData[vehicleid][e_attached_object][i])){
  2326. DestroyDynamicObject(EVF::VehicleTempData[vehicleid][e_attached_object][i]);
  2327. EVF::VehicleTempData[vehicleid][e_attached_object][i] = STREAMER_TAG_OBJECT INVALID_STREAMER_ID;
  2328. }
  2329. }
  2330. #endif
  2331. SetVehicleNeonLights(vehicleid,false);
  2332. EVF::VehicleTempData[vehicleid][e_uptime] = 0;
  2333. CallRemoteFunction("OnVehicleDestroyed","i",vehicleid);
  2334. ResetVehicleProperties(vehicleid);
  2335. return DestroyVehicle(vehicleid);
  2336. }
  2337. #if defined _ALS_DestroyVehicle
  2338. #undef DestroyVehicle
  2339. #else
  2340. #define _ALS_DestroyVehicle
  2341. #endif
  2342. #define DestroyVehicle EVF_DestroyVehicle
  2343. //Hook: OnPlayerWeaponShot
  2344. public OnPlayerWeaponShot(playerid,weaponid,hittype,hitid,Float:fX,Float:fY,Float:fZ){
  2345. if(hittype == BULLET_HIT_TYPE_VEHICLE){
  2346. if(IsToggledVehicleBulletproof(hitid)) return 0;
  2347. new Float:fHealth, bodypart = _:VEHICLE_BODYPART_UNKNOWN, Float:fDamage = EVF::WeaponDamage[GetPlayerWeapon(playerid)];
  2348. GetVehicleHealth(hitid,fHealth);
  2349. if(fHealth > 249.0){
  2350. new fModelid = GetVehicleModel(hitid), Float:fOffSet[3], fUpdate;
  2351. if(IsUnoccupiedDamageToggled(hitid)){
  2352. //front wheels
  2353. GetVehicleModelInfo(fModelid,VEHICLE_MODEL_INFO_WHEELSFRONT,fOffSet[0],fOffSet[1],fOffSet[2]);
  2354. if(VectorSize(fX+fOffSet[0],fY-fOffSet[1],fZ-fOffSet[2]) <= 0.4){
  2355. //left
  2356. fUpdate = EVF::GetVehicleDamageStatus(hitid,VEHICLE_DAMAGE_TIRES) + 8;
  2357. if(fUpdate > 15){
  2358. EVF::UpdateVehicleDamageStatus(hitid,VEHICLE_DAMAGE_TIRES,fUpdate);
  2359. }
  2360. bodypart = _:VEHICLE_BODYPART_FL_WHEEL;
  2361. } else if(VectorSize(fX-fOffSet[0],fY-fOffSet[1],fZ-fOffSet[2]) <= 0.4){
  2362. //right
  2363. fUpdate = EVF::GetVehicleDamageStatus(hitid,VEHICLE_DAMAGE_TIRES) + 2;
  2364. if(fUpdate > 15){
  2365. EVF::UpdateVehicleDamageStatus(hitid,VEHICLE_DAMAGE_TIRES,fUpdate);
  2366. }
  2367. bodypart = _:VEHICLE_BODYPART_FR_WHEEL;
  2368. } else {
  2369. //back wheels
  2370. GetVehicleModelInfo(fModelid,VEHICLE_MODEL_INFO_WHEELSREAR,fOffSet[0],fOffSet[1],fOffSet[2]);
  2371. if(VectorSize(fX+fOffSet[0],fY-fOffSet[1],fZ-fOffSet[2]) <= 0.4){
  2372. //left
  2373. fUpdate = EVF::GetVehicleDamageStatus(hitid,VEHICLE_DAMAGE_TIRES) + 4;
  2374. if(fUpdate > 15){
  2375. EVF::UpdateVehicleDamageStatus(hitid,VEHICLE_DAMAGE_TIRES,fUpdate);
  2376. }
  2377. bodypart = _:VEHICLE_BODYPART_BL_WHEEL;
  2378. } else if(VectorSize(fX-fOffSet[0],fY-fOffSet[1],fZ-fOffSet[2]) <= 0.4){
  2379. //right
  2380. fUpdate = EVF::GetVehicleDamageStatus(hitid,VEHICLE_DAMAGE_TIRES) + 1;
  2381. if(fUpdate > 15){
  2382. EVF::UpdateVehicleDamageStatus(hitid,VEHICLE_DAMAGE_TIRES,fUpdate);
  2383. }
  2384. bodypart = _:VEHICLE_BODYPART_BR_WHEEL;
  2385. }
  2386. }
  2387. }
  2388. if(!bodypart){
  2389. //petrolcap
  2390. GetVehicleModelInfo(fModelid,VEHICLE_MODEL_INFO_PETROLCAP,fOffSet[0],fOffSet[1],fOffSet[2]);
  2391. if(VectorSize(fX-fOffSet[0],fY-fOffSet[1],fZ-fOffSet[2]) <= 0.2){
  2392. if(IsPetrolCapDestroyToggled(hitid)){
  2393. if(IsUnoccupiedDamageToggled(hitid) || IsVehicleOccupied(hitid)){
  2394. bodypart = _:VEHICLE_BODYPART_PETROLCAP;
  2395. new Float:pos[3];
  2396. GetVehiclePos(hitid,pos[0],pos[1],pos[2]);
  2397. #if defined _3D_Tryg
  2398. CreateDynamicExplosion(pos[0],pos[1],pos[2],3,25.0,GetVehicleVirtualWorld(hitid),GetVehicleInterior(hitid),-1,200.0);
  2399. #else
  2400. CreateExplosion(pos[0],pos[1],pos[2],3,25.0);
  2401. #endif
  2402. return SetVehicleToRespawn(hitid);
  2403. }
  2404. } else {
  2405. fHealth -= fDamage;
  2406. SetVehicleHealth(hitid,fHealth);
  2407. switch(floatround(fHealth)){
  2408. case 251..399: return EVF::UpdateVehicleDamage(hitid,VEHICLE_DAMAGE_DOORS);
  2409. case 400..599: return EVF::UpdateVehicleDamage(hitid,VEHICLE_DAMAGE_PANELS);
  2410. case 600..700: return EVF::UpdateVehicleDamage(hitid,VEHICLE_DAMAGE_LIGHTS);
  2411. }
  2412. }
  2413. }
  2414. }
  2415. if(!bodypart){
  2416. if(IsUnoccupiedDamageToggled(hitid)){
  2417. fHealth -= fDamage;
  2418. SetVehicleHealth(hitid,fHealth);
  2419. switch(floatround(fHealth)){
  2420. case 251..399: return EVF::UpdateVehicleDamage(hitid,VEHICLE_DAMAGE_DOORS);
  2421. case 400..599: return EVF::UpdateVehicleDamage(hitid,VEHICLE_DAMAGE_PANELS);
  2422. case 600..700: return EVF::UpdateVehicleDamage(hitid,VEHICLE_DAMAGE_LIGHTS);
  2423. }
  2424. }
  2425. }
  2426. }
  2427. CallRemoteFunction("OnPlayerShotVehicle","dddfd",playerid,hitid,weaponid,fDamage,bodypart);
  2428. }
  2429. #if defined EVF_OnPlayerWeaponShot
  2430. EVF::OnPlayerWeaponShot(playerid,weaponid,hittype,hitid,fX,fY,fZ);
  2431. #endif
  2432. return 1;
  2433. }
  2434. #if defined _ALS_OnPlayerWeaponShot
  2435. #undef OnPlayerWeaponShot
  2436. #else
  2437. #define _ALS_OnPlayerWeaponShot
  2438. #endif
  2439. #define OnPlayerWeaponShot EVF_OnPlayerWeaponShot
  2440. #if defined EVF_OnPlayerWeaponShot
  2441. forward EVF_OnPlayerWeaponShot(playerid,weaponid,hittype,hitid,Float:fX,Float:fY,Float:fZ);
  2442. #endif
  2443. //Hook: OnPlayerConnect
  2444. public OnPlayerConnect(playerid){
  2445. EVF::ModShopStatus[playerid] = false;
  2446. #if defined EVF_OnPlayerConnect
  2447. return EVF::OnPlayerConnect(playerid);
  2448. #else
  2449. return 1;
  2450. #endif
  2451. }
  2452. #if defined _ALS_OnPlayerConnect
  2453. #undef OnPlayerConnect
  2454. #else
  2455. #define _ALS_OnPlayerConnect
  2456. #endif
  2457. #define OnPlayerConnect EVF_OnPlayerConnect
  2458. #if defined EVF_OnPlayerConnect
  2459. forward EVF_OnPlayerConnect(playerid);
  2460. #endif
  2461. //Hook: OnEnterExitModShop
  2462. public OnEnterExitModShop(playerid,enterexit,interiorid){
  2463. EVF::ModShopStatus[playerid] = enterexit;
  2464. #if defined EVF_OnEnterExitModShop
  2465. return EVF::OnEnterExitModShop(playerid, enterexit, interiorid);
  2466. #else
  2467. return 1;
  2468. #endif
  2469. }
  2470. #if defined _ALS_OnEnterExitModShop
  2471. #undef OnEnterExitModShop
  2472. #else
  2473. #define _ALS_OnEnterExitModShop
  2474. #endif
  2475. #define OnEnterExitModShop EVF_OnEnterExitModShop
  2476. #if defined EVF_OnEnterExitModShop
  2477. forward EVF_OnEnterExitModShop(playerid, enterexit, interiorid);
  2478. #endif
  2479. //Hook: OnVehicleMod
  2480. public OnVehicleMod(playerid,vehicleid,componentid){
  2481. if(!IsValidComponentForVehicle(vehicleid,componentid) || !EVF::ModShopStatus[playerid] || GetPlayerState(playerid) == PLAYER_STATE_PASSENGER){
  2482. CallRemoteFunction("OnVehicleModEx","iiiii",playerid,vehicleid,componentid,GetVehicleComponentPrice(componentid),true);
  2483. return 0;
  2484. }
  2485. CallRemoteFunction("OnVehicleModEx","iiiii",playerid,vehicleid,componentid,GetVehicleComponentPrice(componentid),false);
  2486. #if defined EVF_OnVehicleMod
  2487. return EVF::OnVehicleMod(playerid,vehicleid,componentid);
  2488. #else
  2489. return 1;
  2490. #endif
  2491. }
  2492. #if defined _ALS_OnVehicleMod
  2493. #undef OnVehicleMod
  2494. #else
  2495. #define _ALS_OnVehicleMod
  2496. #endif
  2497. #define OnVehicleMod EVF_OnVehicleMod
  2498. #if defined EVF_OnVehicleMod
  2499. forward EVF_OnVehicleMod(playerid, vehicleid, componentid);
  2500. #endif
  2501. #if defined EVF_Streamer
  2502. EVF::Function:: EVF::AttachObjectToVehicle(STREAMER_TAG_OBJECT objectid,vehicleid,Float:OffsetX,Float:OffsetY,Float:OffsetZ,Float:RotX,Float:RotY,Float:RotZ){
  2503. for(new i = 0; i < MAX_VEHICLE_ATTACHED_OBJECTS; i++){
  2504. if(!IsValidDynamicObject(EVF::VehicleTempData[vehicleid][e_attached_object][i])){
  2505. if(AttachDynamicObjectToVehicle(objectid,vehicleid,OffsetX,OffsetY,OffsetZ,RotX,RotY,RotZ)){
  2506. EVF::VehicleTempData[vehicleid][e_attached_object][i] = objectid;
  2507. return true;
  2508. }
  2509. }
  2510. }
  2511. return false;
  2512. }
  2513. #if defined _ALS_AttachDynamicObjectToV
  2514. #undef AttachDynamicObjectToVehicle
  2515. #else
  2516. #define _ALS_AttachDynamicObjectToV
  2517. #endif
  2518. #define AttachDynamicObjectToVehicle EVF_AttachObjectToVehicle
  2519. //Hook: OnPlayerEditDynamicObject
  2520. public OnPlayerEditDynamicObject(playerid,STREAMER_TAG_OBJECT objectid,response,Float:x,Float:y,Float:z,Float:rx,Float:ry,Float:rz){
  2521. if(IsValidVehicle(EVF::PlayerTempData[playerid][e_editor_vehicle])){
  2522. if(EVF::PlayerTempData[playerid][e_editor_object] == STREAMER_TAG_OBJECT INVALID_STREAMER_ID){
  2523. if(GetVehiclePropertyValue(EVF::PlayerTempData[playerid][e_editor_vehicle],e_VEHICLE_EDITOR) == _:objectid){
  2524. SetVehiclePos(EVF::PlayerTempData[playerid][e_editor_vehicle],x,y,z);
  2525. SetVehicleZAngle(EVF::PlayerTempData[playerid][e_editor_vehicle],rz);
  2526. CallLocalFunction("OnPlayerEditVehicle","iiiffff",playerid,EVF::PlayerTempData[playerid][e_editor_vehicle],response,x,y,z,rz);
  2527. switch(response){
  2528. case EDIT_RESPONSE_CANCEL, EDIT_RESPONSE_FINAL:{
  2529. DestroyDynamicObject(objectid);
  2530. SetVehiclePropertyValue(EVF::PlayerTempData[playerid][e_editor_vehicle],e_VEHICLE_EDITOR,INVALID_STREAMER_ID);
  2531. SetVehicleVelocity(EVF::PlayerTempData[playerid][e_editor_vehicle],0.0,0.0,0.0);
  2532. EVF::PlayerTempData[playerid][e_editor_vehicle] = INVALID_VEHICLE_ID;
  2533. EVF::PlayerTempData[playerid][e_editor_object] = STREAMER_TAG_OBJECT INVALID_STREAMER_ID;
  2534. }
  2535. }
  2536. }
  2537. } else {
  2538. if(GetVehiclePropertyValue(EVF::PlayerTempData[playerid][e_editor_vehicle],e_VEHICLE_EDITOR) == _:objectid){
  2539. switch(response){
  2540. case EDIT_RESPONSE_CANCEL, EDIT_RESPONSE_FINAL:{
  2541. new Float:pos[4];
  2542. GetVehiclePos(EVF::PlayerTempData[playerid][e_editor_vehicle],pos[0],pos[1],pos[2]);
  2543. GetVehicleZAngle(EVF::PlayerTempData[playerid][e_editor_vehicle],pos[3]);
  2544. new Float:new_pos[4];
  2545. new_pos[0] = x - pos[0];
  2546. new_pos[1] = y - pos[1];
  2547. new_pos[2] = z - pos[2];
  2548. new_pos[3] = rz - pos[3];
  2549. new Float:final_pos[2];
  2550. final_pos[0] = (new_pos[0] * floatcos(new_pos[3],degrees)) + (new_pos[1] * floatsin(new_pos[3],degrees));
  2551. final_pos[1] = (new_pos[1] * floatcos(new_pos[3],degrees)) - (new_pos[0] * floatsin(new_pos[3],degrees));
  2552. 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]);
  2553. SetVehiclePropertyValue(EVF::PlayerTempData[playerid][e_editor_vehicle],e_VEHICLE_EDITOR,0);
  2554. EVF::PlayerTempData[playerid][e_editor_vehicle] = INVALID_VEHICLE_ID;
  2555. EVF::PlayerTempData[playerid][e_editor_object] = STREAMER_TAG_OBJECT INVALID_STREAMER_ID;
  2556. 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]);
  2557. }
  2558. }
  2559. CallLocalFunction("OnPlayerEditVehicleObject","iiiffffff",playerid,EVF::PlayerTempData[playerid][e_editor_vehicle],response,x,y,z,rx,ry,rz);
  2560. }
  2561. }
  2562. }
  2563. #if defined EVF_OnPlayerEditDynamicObject
  2564. EVF::OnPlayerEditDynamicObject(playerid,objectid,response,x,y,z,rx,ry,rz);
  2565. #endif
  2566. return 1;
  2567. }
  2568. #if defined _ALS_OnPlayerEditDynamicObject
  2569. #undef OnPlayerEditDynamicObject
  2570. #else
  2571. #define _ALS_OnPlayerEditDynamicObject
  2572. #endif
  2573. #define OnPlayerEditDynamicObject EVF_OnPlayerEditDynamicObject
  2574. #if defined EVF_OnPlayerEditDynamicObject
  2575. forward EVF_OnPlayerEditDynamicObject(playerid,STREAMER_TAG_OBJECT objectid,response,Float:x,Float:y,Float:z,Float:rx,Float:ry,Float:rz);
  2576. #endif
  2577. #endif
  2578. //Hook: OnPlayerUpdate
  2579. public OnPlayerUpdate(playerid){
  2580. if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER){
  2581. new vehicleid = GetPlayerVehicleID(playerid), Float:speedcap = GetVehicleSpeedCap(vehicleid);
  2582. if(speedcap != 0.0){
  2583. new Float:vel[3], Float:speed;
  2584. GetVehicleVelocity(vehicleid,vel[0],vel[1],vel[2]);
  2585. speed = EVF::GetVehicleSpeed(vehicleid);
  2586. if(speed > speedcap && speed > 0.0){
  2587. CallRemoteFunction("OnPlayerReachSpeedCapLimit","iif",playerid,vehicleid,speed);
  2588. vel[0] = (vel[0] / speed) * speedcap;
  2589. vel[1] = (vel[1] / speed) * speedcap;
  2590. vel[2] = (vel[2] / speed) * speedcap;
  2591. SetVehicleVelocity(vehicleid,vel[0],vel[1],vel[2]);
  2592. }
  2593. }
  2594. new trailerid = GetVehicleTrailer(vehicleid);
  2595. if(EVF::VehicleTrailerID[vehicleid] != trailerid){
  2596. if(trailerid != 0){
  2597. CallRemoteFunction("OnTrailerHooked","iii",playerid,vehicleid,trailerid);
  2598. } else {
  2599. CallRemoteFunction("OnTrailerUnhooked","iii",playerid,vehicleid,EVF::VehicleTrailerID[vehicleid]);
  2600. }
  2601. EVF::VehicleTrailerID[vehicleid] = trailerid;
  2602. }
  2603. }
  2604. #if defined EVF_OnPlayerUpdate
  2605. EVF::OnPlayerUpdate(playerid);
  2606. #endif
  2607. return 1;
  2608. }
  2609. #if defined EVF_OnPlayerUpdate
  2610. forward EVF_OnPlayerUpdate(playerid);
  2611. #endif
  2612. #if defined _ALS_OnPlayerUpdate
  2613. #undef OnPlayerUpdate
  2614. #else
  2615. #define _ALS_OnPlayerUpdate
  2616. #endif
  2617. #define OnPlayerUpdate EVF_OnPlayerUpdate
  2618. //Hook: OnPlayerStateChange
  2619. public OnPlayerStateChange(playerid,newstate,oldstate){
  2620. if(newstate == PLAYER_STATE_DRIVER){
  2621. new vehicleid = GetPlayerVehicleID(playerid);
  2622. if(IsVehicleBombed(vehicleid)){
  2623. if(!IsVehicleBombActivated(vehicleid)){
  2624. CallRemoteFunction("OnVehicleBombActivate","i",vehicleid);
  2625. new interval = (GetVehicleBomb(vehicleid) - 1750);
  2626. if(interval < 1750){
  2627. SetVehicleParams(vehicleid,VEHICLE_TYPE_ALARM,1);
  2628. SetVehiclePropertyValue(vehicleid,e_VEHICLE_BOMB_TIMER,SetTimerEx("EVF_OnVehicleBombExplode",GetVehicleBomb(vehicleid),false,"ii",playerid,vehicleid));
  2629. } else {
  2630. SetVehiclePropertyValue(vehicleid,e_VEHICLE_BOMB_TIMER,SetTimerEx("EVF_OnVehicleBombActivate",interval,false,"ii",playerid,vehicleid));
  2631. }
  2632. }
  2633. }
  2634. if(IsVehicleSticky(vehicleid)){
  2635. SetVehicleParams(vehicleid,VEHICLE_TYPE_ENGINE,0);
  2636. }
  2637. }
  2638. if(oldstate == PLAYER_STATE_DRIVER){
  2639. new vehicleid = GetPlayerVehicleID(playerid);
  2640. if(IsVehicleSticky(vehicleid)){
  2641. SetVehicleParams(vehicleid,VEHICLE_TYPE_ENGINE,1);
  2642. }
  2643. }
  2644. #if defined EVF_OnPlayerStateChange
  2645. EVF::OnPlayerStateChange(playerid,newstate,oldstate);
  2646. #endif
  2647. return 1;
  2648. }
  2649. #if defined EVF_OnPlayerStateChange
  2650. forward EVF_OnPlayerStateChange(playerid,newstate,oldstate);
  2651. #endif
  2652. #if defined _ALS_OnPlayerStateChange
  2653. #undef OnPlayerStateChange
  2654. #else
  2655. #define _ALS_OnPlayerStateChange
  2656. #endif
  2657. #define OnPlayerStateChange EVF_OnPlayerStateChange
  2658. //Hook: OnPlayerKeyStateChange
  2659. public OnPlayerKeyStateChange(playerid, newkeys, oldkeys){
  2660. if(newkeys & KEY_CROUCH){
  2661. if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER){
  2662. new horn = GetVehicleHorn(GetPlayerVehicleID(playerid));
  2663. if(horn != 0){
  2664. new Float:pos[3];
  2665. GetPlayerPos(playerid,pos[0],pos[1],pos[2]);
  2666. EVF::Foreach(i){
  2667. if(IsPlayerInRangeOfPoint(i,35.0,pos[0],pos[1],pos[2])){
  2668. PlayerPlaySound(playerid,horn,pos[0],pos[1],pos[2]);
  2669. }
  2670. }
  2671. }
  2672. }
  2673. }
  2674. #if defined EVF_OnPlayerKeyStateChange
  2675. EVF::OnPlayerKeyStateChange(playerid, newkeys, oldkeys);
  2676. #endif
  2677. return 1;
  2678. }
  2679. #if defined EVF_OnPlayerKeyStateChange
  2680. forward EVF_OnPlayerKeyStateChange(playerid, newkeys, oldkeys);
  2681. #endif
  2682. #if defined _ALS_OnPlayerKeyStateChange
  2683. #undef OnPlayerKeyStateChange
  2684. #else
  2685. #define _ALS_OnPlayerKeyStateChange
  2686. #endif
  2687. #define OnPlayerKeyStateChange EVF_OnPlayerKeyStateChange
  2688. //Hook: OnVehicleDamageStatusUpdate
  2689. public OnVehicleDamageStatusUpdate(vehicleid, playerid){
  2690. new panels, doors, lights, tires;
  2691. GetVehicleDamageStatus(vehicleid, panels, doors, lights, tires);
  2692. if(!IsVehicleDamageToggled(vehicleid,VEHICLE_DAMAGE_PANELS)) EVF::UpdateVehicleDamageStatus(vehicleid,VEHICLE_DAMAGE_PANELS,0);
  2693. if(!IsVehicleDamageToggled(vehicleid,VEHICLE_DAMAGE_DOORS)) EVF::UpdateVehicleDamageStatus(vehicleid,VEHICLE_DAMAGE_DOORS,0);
  2694. if(!IsVehicleDamageToggled(vehicleid,VEHICLE_DAMAGE_LIGHTS)) EVF::UpdateVehicleDamageStatus(vehicleid,VEHICLE_DAMAGE_LIGHTS,0);
  2695. if(!IsVehicleDamageToggled(vehicleid,VEHICLE_DAMAGE_TIRES)) EVF::UpdateVehicleDamageStatus(vehicleid,VEHICLE_DAMAGE_TIRES,0);
  2696. #if defined EVF_OVDSU
  2697. EVF::OVDSU(vehicleid,playerid);
  2698. #endif
  2699. return 1;
  2700. }
  2701. #if defined EVF_OVDSU
  2702. forward EVF_OVDSU(vehicleid, playerid);
  2703. #endif
  2704. #if defined _ALS_OnVehicleDamageStatusU
  2705. #undef OnVehicleDamageStatusUpdate
  2706. #else
  2707. #define _ALS_OnVehicleDamageStatusU
  2708. #endif
  2709. #define OnVehicleDamageStatusUpdate EVF_OVDSU
  2710. //Hook: OnVehicleSpawn
  2711. public OnVehicleSpawn(vehicleid){
  2712. SetVehiclePropertyValue(vehicleid,e_VEHICLE_PAINTJOB,RESET_PAINTJOB_ID);
  2713. new color1,color2;
  2714. if(EVF::GetVehicleColor(vehicleid,color1,color2)){
  2715. ChangeVehicleColor(vehicleid,color1,color2);
  2716. }
  2717. new Float:pos[3];
  2718. GetVehiclePos(vehicleid,pos[0],pos[1],pos[2]);
  2719. new Float:angle;
  2720. GetVehicleZAngle(vehicleid,angle);
  2721. new Float:vehicle_pos[3],Float:vehicle_angle,vehicle_worldid,vehicle_interiorid;
  2722. EVF::GetVehicleSpawnInfo(vehicleid,vehicle_pos[0],vehicle_pos[1],vehicle_pos[2],vehicle_angle,vehicle_worldid,vehicle_interiorid);
  2723. if(vehicle_pos[0] != 0.0 && vehicle_pos[1] != 0.0 && vehicle_pos[2] != 0.0){
  2724. 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)){
  2725. TeleportVehicle(vehicleid,vehicle_pos[0],vehicle_pos[1],vehicle_pos[2],vehicle_angle,vehicle_worldid,vehicle_interiorid);
  2726. }
  2727. }
  2728. #if defined EVF_OnVehicleSpawn
  2729. EVF::OnVehicleSpawn(vehicleid);
  2730. #endif
  2731. return 1;
  2732. }
  2733. #if defined EVF_OnVehicleSpawn
  2734. forward EVF_OnVehicleSpawn(vehicleid);
  2735. #endif
  2736. #if defined _ALS_OnVehicleSpawn
  2737. #undef OnVehicleSpawn
  2738. #else
  2739. #define _ALS_OnVehicleSpawn
  2740. #endif
  2741. #define OnVehicleSpawn EVF_OnVehicleSpawn
  2742. EVF::Public:: EVF::OnRequestResponse(index, response_code, data[]){
  2743. if(response_code == 200){
  2744. if(isnull(data)) return 0;
  2745. new EVF::version[16], EVF::ver, EVF::file_ver = EVF_Version;
  2746. strmid(EVF::version,data,0,strlen(data));
  2747. EVF::ver = strval(EVF::version);
  2748. if(EVF::ver > EVF::file_ver){
  2749. print(" ");
  2750. 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));
  2751. print("http://8.ct8.pl/d/EVF.inc");
  2752. print(" ");
  2753. }
  2754. }
  2755. return 1;
  2756. }
  2757. new EVF::UpdateTimer = -1;
  2758. EVF::Function:: EVF::Init(){
  2759. SetSVarInt("ADM:EVF:ACTIVE",EVF::GetActiveCount()+1);
  2760. //Welcome to EVF
  2761. new EVF::ver_name[16];
  2762. format(EVF::ver_name,sizeof(EVF::ver_name),"%d.%d.%d",(EVF_Version / 10000),((EVF_Version % 10000) / 100),((EVF_Version % 10000) % 100));
  2763. if(GetSVarInt("ADM:EVF:INIT") == 0){
  2764. SetSVarInt("ADM:EVF:INIT",1);
  2765. if(GetSVarInt("ADM:Logging:Disable") == 0){
  2766. printf("[ADM] Info: Load EVF v%s for SA:MP %s by Abyss Morgan",EVF::ver_name,EVF_SAMP_Version);
  2767. }
  2768. }
  2769. if(GetSVarInt("ADM:EVF:VERCHECK") == 0){
  2770. SetSVarInt("ADM:EVF:VERCHECK",1);
  2771. new EVF::send_data[50];
  2772. format(EVF::send_data,sizeof(EVF::send_data),"8.ct8.pl/evf/check.php?version=%d",EVF_Version);
  2773. HTTP(0,HTTP_GET,EVF::send_data,"","EVF_OnRequestResponse");
  2774. }
  2775. EVF::UpdateTimer = SetTimerEx("OnVehicleTimeUpdate",VEHICLE_UPDATE_INTERVAL,true,"");
  2776. }
  2777. EVF::Function:: EVF::Exit(){
  2778. SetSVarInt("ADM:EVF:ACTIVE",EVF::GetActiveCount()-1);
  2779. //Goodbye EVF
  2780. new EVF::ver_name[16];
  2781. format(EVF::ver_name,sizeof(EVF::ver_name),"%d.%d.%d",(EVF_Version / 10000),((EVF_Version % 10000) / 100),((EVF_Version % 10000) % 100));
  2782. if(EVF::GetActiveCount() == 0){
  2783. SetSVarInt("ADM:EVF:INIT",0);
  2784. if(GetSVarInt("ADM:Logging:Disable") == 0){
  2785. printf("[ADM] Info: Unload EVF v%s for SA:MP %s by Abyss Morgan",EVF::ver_name,EVF_SAMP_Version);
  2786. }
  2787. }
  2788. if(EVF::UpdateTimer != -1) KillTimer(EVF::UpdateTimer);
  2789. }
  2790. new bool:CRC_EVFInit = true,
  2791. bool:CRC_EVFExit = true;
  2792. //Hook: OnFilterScriptInit
  2793. public OnFilterScriptInit(){
  2794. if(CRC_EVFInit){
  2795. CRC_EVFInit = false;
  2796. EVF::Init();
  2797. }
  2798. #if defined EVF_OnFilterScriptInit
  2799. EVF::OnFilterScriptInit();
  2800. #endif
  2801. return 1;
  2802. }
  2803. #if defined _ALS_OnFilterScriptInit
  2804. #undef OnFilterScriptInit
  2805. #else
  2806. #define _ALS_OnFilterScriptInit
  2807. #endif
  2808. #define OnFilterScriptInit EVF_OnFilterScriptInit
  2809. #if defined EVF_OnFilterScriptInit
  2810. forward EVF_OnFilterScriptInit();
  2811. #endif
  2812. //Hook: OnGameModeInit
  2813. public OnGameModeInit(){
  2814. if(CRC_EVFInit){
  2815. CRC_EVFInit = false;
  2816. EVF::Init();
  2817. }
  2818. #if defined EVF_OnGameModeInit
  2819. EVF::OnGameModeInit();
  2820. #endif
  2821. return 1;
  2822. }
  2823. #if defined _ALS_OnGameModeInit
  2824. #undef OnGameModeInit
  2825. #else
  2826. #define _ALS_OnGameModeInit
  2827. #endif
  2828. #define OnGameModeInit EVF_OnGameModeInit
  2829. #if defined EVF_OnGameModeInit
  2830. forward EVF_OnGameModeInit();
  2831. #endif
  2832. //Hook: OnFilterScriptExit
  2833. public OnFilterScriptExit(){
  2834. if(CRC_EVFExit){
  2835. CRC_EVFExit = false;
  2836. EVF::Exit();
  2837. }
  2838. #if defined EVF_OnFilterScriptExit
  2839. EVF::OnFilterScriptExit();
  2840. #endif
  2841. return 1;
  2842. }
  2843. #if defined _ALS_OnFilterScriptExit
  2844. #undef OnFilterScriptExit
  2845. #else
  2846. #define _ALS_OnFilterScriptExit
  2847. #endif
  2848. #define OnFilterScriptExit EVF_OnFilterScriptExit
  2849. #if defined EVF_OnFilterScriptExit
  2850. forward EVF_OnFilterScriptExit();
  2851. #endif
  2852. //Hook: OnGameModeExit
  2853. public OnGameModeExit(){
  2854. if(CRC_EVFExit){
  2855. CRC_EVFExit = false;
  2856. EVF::Exit();
  2857. }
  2858. #if defined EVF_OnGameModeExit
  2859. EVF::OnGameModeExit();
  2860. #endif
  2861. return 1;
  2862. }
  2863. #if defined _ALS_OnGameModeExit
  2864. #undef OnGameModeExit
  2865. #else
  2866. #define _ALS_OnGameModeExit
  2867. #endif
  2868. #define OnGameModeExit EVF_OnGameModeExit
  2869. #if defined EVF_OnGameModeExit
  2870. forward EVF_OnGameModeExit();
  2871. #endif
  2872. #pragma unused EVF_VehicleName
  2873. #pragma unused EVF_TopSpeed
  2874. #pragma unused EVF_PlayerTempData
  2875. #pragma unused EVF_NeonOffsetData
  2876. #if !defined _3D_Tryg
  2877. #pragma unused EVF_WeaponDamage
  2878. #endif
  2879. //EOF