EVF.inc 152 KB

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