EVF Include (omp)

mail@pastecode.io avatar
unknown
plain_text
a year ago
184 kB
2
Indexable
Never
/**********************************************************************************************************************************
 *                                                                                                                                *
 *                                              )(   Extended Vehicle Functions   )(                                              *
 *                                                                                                                                *
 * Copyright � 2018 Abyss Morgan. All rights reserved.                                                                            *
 * Contributors: Emmet_, Pottus, kvann, Hanger, Freaksken, Gammix, Yashas, Admigo, RIDE2DAY, Katarina Calzaghe                    *
 *                                                                                                                                *
 * Website:  adm.ct8.pl                                                                                                           *
 * Download: adm.ct8.pl/r/download                                                                                                *
 *                                                                                                                                *
 * Plugins: Streamer                                                                                                              *
 * Modules: None                                                                                                                  *
 *                                                                                                                                *
 * File Version: 3.3.1                                                                                                            *
 * Streamer Version: 2.9.4                                                                                                        *
 *                                                                                                                                *
 * Functions:                                                                                                                     *
 * IsValidVehicleModelID(modelid);                                                                                                *
 * GetVehiclePanels(vehicleid,&front_left,&front_right,&rear_left,&rear_right,&windshield,&front_bumper,&rear_bumper);            *
 * SetVehiclePanels(vehicleid,front_left,front_right,rear_left,rear_right,windshield,front_bumper,rear_bumper);                   *
 * GetVehicleLights(vehicleid,&front_left_light,&front_right_light,&back_lights);                                                 *
 * SetVehicleLights(vehicleid,front_left_light,front_right_light,back_lights);                                                    *
 * GetVehicleDoors(vehicleid,&bonnet,&boot,&driver_door,&passenger_door);                                                         *
 * SetVehicleDoors(vehicleid,bonnet,boot,driver_door,passenger_door);                                                             *
 * GetVehicleTires(vehicleid,&front_left,&front_right,&rear_left,&rear_right);                                                    *
 * SetVehicleTires(vehicleid,front_left,front_right,rear_left,rear_right);                                                        *
 * GetVehicleWindowState(vehicleid,doorid);                                                                                       *
 * SetVehicleWindowState(vehicleid,doorid,window_state);                                                                          *
 * GetVehicleDoorState(vehicleid,doorid);                                                                                         *
 * SetVehicleDoorState(vehicleid,doorid,door_state);                                                                              *
 * IsValidVehicleDoor(vehicleid,doorid);                                                                                          *
 * GetVehicleModelDoorAmount(modelid);                                                                                            *
 * GetVehicleDoorAmount(vehicleid);                                                                                               *
 * SwitchVehicleEngine(vehicleid,bool:engine_status);                                                                             *
 * SwitchVehicleLight(vehicleid,bool:light_status);                                                                               *
 * SwitchVehicleAlarm(vehicleid,bool:alarm_status);                                                                               *
 * SwitchVehicleDoors(vehicleid,bool:doors_status);                                                                               *
 * SwitchVehicleBonnet(vehicleid,bool:bonnet_status);                                                                             *
 * SwitchVehicleBoot(vehicleid,bool:boot_status);                                                                                 *
 * SwitchVehicleObjective(vehicleid,bool:objective_status);                                                                       *
 * GetVehicleParams(vehicleid,type);                                                                                              *
 * SetVehicleParams(vehicleid,type,status,delay = 0);                                                                             *
 * GetVehicleRandomColors(modelid,&color1,&color2);                                                                               *
 * GetNearestVehicleToPos(Float:x,Float:y,Float:z,worldid=-1,interiorid=-1,Float:maxdist=0.0,bool:fast=true,except_vid=0);        *
 * GetNearestVehicleToPlayer(playerid,Float:maxdist=0.0,bool:fast=false);                                                         *
 * GetVehicleDriver(vehicleid);                                                                                                   *
 * Float:GetVehicleModelTopSpeed(modelid);                                                                                        *
 * Float:GetVehicleTopSpeed(vehicleid);                                                                                           *
 * SetVehicleInterior(vehicleid,interiorid);                                                                                      *
 * GetVehicleSeats(vehicleid);                                                                                                    *
 * GetVehicleModelSeats(modelid);                                                                                                 *
 * IsVehicleSeatOccupied(vehicleid,seatid);                                                                                       *
 * IsValidVehicle(vehicleid);                                                                                                     *
 * RemoveVehiclePaintjob(vehicleid);                                                                                              *
 * SetVehicleHorn(vehicleid,soundid);                                                                                             *
 * GetVehicleHorn(vehicleid);                                                                                                     *
 * RestoreVehicleHorn(vehicleid);                                                                                                 *
 * GetVehicleBomb(vehicleid);                                                                                                     *
 * IsVehicleBombed(vehicleid);                                                                                                    *
 * RemoveVehicleBomb(vehicleid);                                                                                                  *
 * SetVehicleBomb(vehicleid,time = 1000);                                                                                         *
 * IsVehicleBombActivated(vehicleid);                                                                                             *
 * Float:EVF::GetVehicleSpeed(vehicleid);                                                                                         *
 * SetVehicleSpeedCap(vehicleid,Float:maxspeed);                                                                                  *
 * Float:GetVehicleSpeedCap(vehicleid);                                                                                           *
 * DisableVehicleSpeedCap(vehicleid);                                                                                             *
 * SetVehicleFuel(vehicleid,fuel);                                                                                                *
 * GetVehicleFuel(vehicleid);                                                                                                     *
 * ToggleVehicleFuel(vehicleid,bool:toggle);                                                                                      *
 * IsVehicleFuelToggled(vehicleid);                                                                                               *
 * ToggleVehicleSticky(vehicleid,bool:toggle);                                                                                    *
 * IsVehicleSticky(vehicleid);                                                                                                    *
 * ToggleUnoccupiedVehicleDamage(vehicleid,bool:toggle);                                                                          *
 * IsUnoccupiedDamageToggled(vehicleid);                                                                                          *
 * ToggleVehiclePetrolCapDestroy(vehicleid,bool:toggle);                                                                          *
 * IsPetrolCapDestroyToggled(vehicleid);                                                                                          *
 * IsVehicleDamageToggled(vehicleid,type);                                                                                        *
 * ToggleVehicleDamageUpdate(vehicleid,type,toggle);                                                                              *
 * GetVehicleNextSeat(vehicleid,passenger = 1);                                                                                   *
 * TeleportVehicle(vehicleid,Float:x,Float:y,Float:z,Float:angle,worldid = -1,interiorid = -1);                                   *
 * GetVehicleSlotAttachedObject(vehicleid,slot);                                                                                  *
 * IsObjectAttachedToVehicle(objectid,vehicleid);                                                                                 *
 * EVF::UpdateVehicleDamage(vehicleid,type);                                                                                      *
 * EVF::UpdateVehicleDamageStatus(vehicleid,type,update);                                                                         *
 * EVF::GetVehicleDamageStatus(vehicleid,type);                                                                                   *
 * SetVehicleNeonLights(vehicleid,bool:enable = true,color = RED_NEON,slotid = 0);                                                *
 * VehicleSupportsNeonLights(modelid);                                                                                            *
 * GetVehicleNeonLightsState(vehicleid,slotid = 0);                                                                               *
 * IsToggledVehicleBulletproof(vehicleid);                                                                                        *
 * ToggleVehicleBulletproof(vehicleid,bool:toggle);                                                                               *
 * GetComponentName(componentid,name[],len = sizeof(name));                                                                       *
 * GetComponentTypeName(component);                                                                                               *
 * EVF::IsPlayerInModShop(playerid);                                                                                              *
 * IsValidComponentForVehicle(vehicleid,componentid);                                                                             *
 * GetVehicleComponentPrice(componentid);                                                                                         *
 * GetVehicleName(vehicleid);                                                                                                     *
 * GetVehicleModelName(modelid);                                                                                                  *
 * EVF::IsTrailer(vehicleid);                                                                                                     *
 * EVF::IsCarBlinking(vehicleid);                                                                                                 *
 * EVF::DisableCarBlinking(vehicleid);                                                                                            *
 * EVF::SetCarBlinking(vehicleid,side,bool:skip=false);                                                                           *
 * EVF::ToggleVehicleBlinking(bool:toggle);                                                                                       *
 * EVF::IsToggledVehicleBlinking();                                                                                               *
 *                                                                                                                                *
 * Remote functions:                                                                                                              *
 * EVF_ImportVehicle(vehicleid,modelid,Float:x,Float:y,Float:z,Float:angle,color1,color2,worldid,interiorid,unoccupied_damage);   *
 * EVF_RemoveVehicle(vehicleid);                                                                                                  *
 *                                                                                                                                *
 * Compatible with YSF Functions:                                                                                                 *
 * GetVehicleColor(vehicleid,&color1,&color2);                                                                                    *
 * GetVehiclePaintjob(vehicleid);                                                                                                 *
 * GetVehicleInterior(vehicleid);                                                                                                 *
 * EVF::GetVehicleSpawnInfo(vehicleid,&Float:x,&Float:y,&Float:z,&Float:rotation,&worldid,&interiorid);                           *
 * EVF::SetVehicleSpawnInfo(vehicleid,Float:x,Float:y,Float:z,Float:rotation,worldid,interiorid);                                 *
 * IsVehicleOccupied(vehicleid);                                                                                                  *
 *                                                                                                                                *
 * Callbacks:                                                                                                                     *
 * OnVehicleCreated(vehicleid);                       //Called when a vehicle is created.                                         *
 * OnVehicleDestroyed(vehicleid);                     //Called when a vehicle is deleted.                                         *
 * OnTrailerHooked(playerid,vehicleid,trailerid);     //Called when a trailer is hooked.                                          *
 * OnTrailerUnhooked(playerid,vehicleid,trailerid);   //Called when a trailer is unhooked.                                        *
 * OnPlayerShotVehicle(playerid,vehicleid,weaponid,Float:amount,bodypart); //Called when a player shoots at a vehicle.            *
 * OnVehiclePosChange(vehicleid,Float:newx,Float:newy,Float:newz,Float:newangle,Float:oldx,Float:oldy,Float:oldz,Float:oldangle); *
 * OnVehicleVelocityChange(vehicleid,Float:newx,Float:newy,Float:newz,Float:oldx,Float:oldy,Float:oldz);                          *
 * OnVehicleHealthChange(vehicleid,Float:newhealth,Float:oldhealth);                                                              *
 * OnVehicleFuelChange(vehicleid,newfuel,oldfuel);                                                                                *
 * OnVehicleBombDeactivate(vehicleid);                                                                                            *
 * OnVehicleBombExplode(vehicleid);                                                                                               *
 * OnPlayerEditVehicle(playerid,vehicleid,response,Float:fX,Float:fY,Float:fZ,Float:fRotZ);                                       *
 * OnPlayerEditVehicleObject(playerid,vehicleid,response,Float:x,Float:y,Float:z,Float:rx,Float:ry,Float:rz);                     *
 * OnPlayerReachSpeedCapLimit(playerid,vehicleid,Float:speed);                                                                    *
 * OnVehicleBombActivate(vehicleid);                                                                                              *
 * OnVehicleModEx(playerid,vehicleid,componentid,price,illegal);                                                                  *
 *                                                                                                                                *
 * Definitions:                                                                                                                   *
 * INVALID_SEAT_ID                                                                                                                *
 * INVALID_PAINTJOB_ID                                                                                                            *
 * VEHICLE_UPDATE_INTERVAL                                                                                                        *
 * MAX_VEHICLE_ATTACHED_OBJECTS                                                                                                   *
 * RESET_PAINTJOB_ID                                                                                                              *
 * MAX_VEHICLE_PARAMS                                                                                                             *
 * MAX_VEHICLE_MODELS                                                                                                             *
 * DEFAULT_VEHICLE_FUEL                                                                                                           *
 * VEHICLE_SPEED_MULTIPLIER                                                                                                       *
 * MULTIPLIER_FUEL_SYSTEM                                                                                                         *
 *                                                                                                                                *
 * BONNET_HEALTHY_CLOSED                                                                                                          *
 * BONNET_HEALTHY_OPENED                                                                                                          *
 * BONNET_DAMAGED_CLOSED                                                                                                          *
 * BONNET_DAMAGED_OPENED                                                                                                          *
 * BONNET_MISSING                                                                                                                 *
 *                                                                                                                                *
 * BOOT_HEALTHY_CLOSED                                                                                                            *
 * BOOT_HEALTHY_OPENED                                                                                                            *
 * BOOT_DAMAGED_CLOSED                                                                                                            *
 * BOOT_DAMAGED_OPENED                                                                                                            *
 * BOOT_MISSING                                                                                                                   *
 *                                                                                                                                *
 * DOOR_HEALTHY_CLOSED                                                                                                            *
 * DOOR_HEALTHY_OPENED                                                                                                            *
 * DOOR_DAMAGED_CLOSED                                                                                                            *
 * DOOR_DAMAGED_OPENED                                                                                                            *
 * DOOR_MISSING                                                                                                                   *
 *                                                                                                                                *
 * BUMPER_HEALTHY                                                                                                                 *
 * BUMPER_CRUSHED                                                                                                                 *
 * BUMPER_HANGING                                                                                                                 *
 * BUMPER_MISSING                                                                                                                 *
 *                                                                                                                                *
 * WINDSHIELD_HEALTHY                                                                                                             *
 * WINDSHIELD_DAMAGED                                                                                                             *
 * WINDSHIELD_MISSING                                                                                                             *
 *                                                                                                                                *
 * LIGHT_ENABLE                                                                                                                   *
 * LIGHT_DISABLE                                                                                                                  *
 *                                                                                                                                *
 * TIRE_HEALTHY                                                                                                                   *
 * TIRE_DAMAGED                                                                                                                   *
 *                                                                                                                                *
 * DOOR_DRIVER                                                                                                                    *
 * DOOR_PASSENGER                                                                                                                 *
 * DOOR_BACKLEFF                                                                                                                  *
 * DOOR_BACKRIGHT                                                                                                                 *
 *                                                                                                                                *
 * VEHICLE_DAMAGE_PANELS                                                                                                          *
 * VEHICLE_DAMAGE_DOORS                                                                                                           *
 * VEHICLE_DAMAGE_LIGHTS                                                                                                          *
 * VEHICLE_DAMAGE_TIRES                                                                                                           *
 *                                                                                                                                *
 * RED_NEON                                                                                                                       *
 * BLUE_NEON                                                                                                                      *
 * GREEN_NEON                                                                                                                     *
 * YELLOW_NEON                                                                                                                    *
 * PINK_NEON                                                                                                                      *
 * WHITE_NEON                                                                                                                     *
 *                                                                                                                                *
 * EVF_CAR_BLINK_NONE                                                                                                             *
 * EVF_CAR_BLINK_LEFT                                                                                                             *
 * EVF_CAR_BLINK_RIGHT                                                                                                            *
 * EVF_CAR_BLINK_EMERGENCY                                                                                                        *
 *                                                                                                                                *
 * MIN_VEHICLE_COMPONENT_ID                                                                                                       *
 * MAX_VEHICLE_COMPONENT_ID                                                                                                       *
 *                                                                                                                                *
 * Enums:                                                                                                                         *
 * enum 'EVF::VehicleProperties'                                                                                                  *
 * # e_VEHICLE_PAINTJOB                                                                                                           *
 * # e_VEHICLE_INTERIOR                                                                                                           *
 * # e_VEHICLE_COLOR_1                                                                                                            *
 * # e_VEHICLE_COLOR_2                                                                                                            *
 * # e_VEHICLE_HORN                                                                                                               *
 * # e_VEHICLE_SPAWN_X                                                                                                            *
 * # e_VEHICLE_SPAWN_Y                                                                                                            *
 * # e_VEHICLE_SPAWN_Z                                                                                                            *
 * # e_VEHICLE_SPAWN_A                                                                                                            *
 * # e_VEHICLE_SPAWN_VW                                                                                                           *
 * # e_VEHICLE_SPAWN_INT                                                                                                          *
 * # e_VEHICLE_SPEED_CAP                                                                                                          *
 * # e_VEHICLE_FUEL_USE                                                                                                           *
 * # e_VEHICLE_FUEL                                                                                                               *
 * # e_VEHICLE_STICKY                                                                                                             *
 * # e_VEHICLE_UNO_DAMAGE                                                                                                         *
 * # e_VEHICLE_CAP_DAMAGE                                                                                                         *
 * # e_VEHICLE_EDITOR                                                                                                             *
 * # e_VEHICLE_DAMAGE_PANELS                                                                                                      *
 * # e_VEHICLE_DAMAGE_DOORS                                                                                                       *
 * # e_VEHICLE_DAMAGE_LIGHTS                                                                                                      *
 * # e_VEHICLE_DAMAGE_TIRES                                                                                                       *
 * # e_VEHICLE_BOMB                                                                                                               *
 * # e_VEHICLE_BOMB_TIMER                                                                                                         *
 * # e_VEHICLE_BULLETPROOF                                                                                                        *
 * # e_VEHICLE_STORED                                                                                                             *
 *                                                                                                                                *
 * enum 'EVF::VehicleBodyPart'                                                                                                    *
 * # VEHICLE_BODYPART_UNKNOWN                                                                                                     *
 * # VEHICLE_BODYPART_FL_WHEEL    - Front Left                                                                                    *
 * # VEHICLE_BODYPART_FR_WHEEL    - Front Right                                                                                   *
 * # VEHICLE_BODYPART_BL_WHEEL    - Back Left                                                                                     *
 * # VEHICLE_BODYPART_BR_WHEEL    - Back Right                                                                                    *
 * # VEHICLE_BODYPART_PETROLCAP                                                                                                   *
 *                                                                                                                                *
 * enum 'EVF::ParamTypes'                                                                                                         *
 * # VEHICLE_TYPE_ENGINE                                                                                                          *
 * # VEHICLE_TYPE_LIGHTS                                                                                                          *
 * # VEHICLE_TYPE_ALARM                                                                                                           *
 * # VEHICLE_TYPE_DOORS                                                                                                           *
 * # VEHICLE_TYPE_BONNET                                                                                                          *
 * # VEHICLE_TYPE_BOOT                                                                                                            *
 * # VEHICLE_TYPE_OBJECTIVE                                                                                                       *
 *                                                                                                                                *
 **********************************************************************************************************************************/

/*
//Check Version EVF.inc
#if !defined _EVF_include
	#error [ADM] You need EVF.inc v3.3.1
#elseif !defined EVF_Version
	#error [ADM] Update you EVF.inc to v3.3.1
#elseif (EVF_Version < 30301)
	#error [ADM] Update you EVF.inc to v3.3.1
#endif
*/

#if defined _EVF_include
	#endinput
#endif
#define _EVF_include
/*
#if defined _samp_included
	#if (!defined GetPlayerPoolSize || !defined GetSVarInt)
		#error [ADM] This include requires SA:MP version 0.3.7 (adm.ct8.pl/r/download)
	#endif
#else
	#error [ADM] This include requires SA:MP Include
#endif
*/
#if defined _Vehicle_Ex
	#error [ADM] Please remove deprecated file VehicleEx.inc (already implemented)
#endif

#if defined gVehiclePetrolCapOffsets
	#error [ADM] Please remove deprecated file vehicleplus.inc (already implemented)
#endif

#if ((defined g_anltv_VehicleData) && (defined SetVehicleNeonLights))
	#error [ADM] Please remove deprecated file SetVehicleNeonLights.inc (already implemented)
#endif

//Update Checker
#if !defined HTTP
	#tryinclude <a_http>
#endif

#if !defined HTTP
	#error [ADM] Please include a_http.inc before EVF.inc
#endif

#define EVF_Version									(30301) //a.b.c 10000*a+100*b+c
#define EVF_SAMP_Version							"0.3.7"

#define EVF_Function::								stock
#define EVF_Public::%0(%1)							forward %0(%1); public %0(%1)
#define EVF::										EVF_

//Detect Streamer Plugin
#if ((defined Streamer_AppendArrayData) && (defined INVALID_STREAMER_ID))
	#define EVF_Streamer
#endif

#if !defined IsValidVehicle
	native IsValidVehicle(vehicleid);
#endif

#if !defined isnull
	#define isnull(%1) 								((!(%1[0])) || (((%1[0]) == '\1') && (!(%1[1]))))
#endif

#if !defined INVALID_SEAT_ID
	#define INVALID_SEAT_ID 						-1
#endif

#if !defined INVALID_PAINTJOB_ID
	#define INVALID_PAINTJOB_ID						-1
#endif

#if !defined MAX_VEHICLE_ATTACHED_OBJECTS
	#define MAX_VEHICLE_ATTACHED_OBJECTS			30
#endif

#if !defined VEHICLE_UPDATE_INTERVAL
	#define VEHICLE_UPDATE_INTERVAL					250
#endif

#if !defined VEHICLE_SPEED_MULTIPLIER
	#define VEHICLE_SPEED_MULTIPLIER 				170.0
#endif

#if !defined MULTIPLIER_FUEL_SYSTEM
	#define MULTIPLIER_FUEL_SYSTEM					1
#endif

#define RESET_PAINTJOB_ID							3
#define MAX_VEHICLE_PARAMS							7
#define MAX_VEHICLE_MODELS							212
#if !defined DEFAULT_VEHICLE_FUEL
	#define DEFAULT_VEHICLE_FUEL					1000
#endif
#define MAX_VEHICLE_FUEL							DEFAULT_VEHICLE_FUEL

#define BONNET_HEALTHY_CLOSED						0
#define BONNET_HEALTHY_OPENED						1
#define BONNET_DAMAGED_CLOSED						2
#define BONNET_DAMAGED_OPENED						3
#define BONNET_MISSING								4

#define BOOT_HEALTHY_CLOSED							0
#define BOOT_HEALTHY_OPENED							1
#define BOOT_DAMAGED_CLOSED							2
#define BOOT_DAMAGED_OPENED							3
#define BOOT_MISSING								4

#define DOOR_HEALTHY_CLOSED							0
#define DOOR_HEALTHY_OPENED							1
#define DOOR_DAMAGED_CLOSED							2
#define DOOR_DAMAGED_OPENED							3
#define DOOR_MISSING								4

#define BUMPER_HEALTHY								0
#define BUMPER_CRUSHED								1
#define BUMPER_HANGING								2
#define BUMPER_MISSING								3

#define WINDSHIELD_HEALTHY							0
#define WINDSHIELD_DAMAGED							1
#define WINDSHIELD_MISSING							2

#define LIGHT_ENABLE								0
#define LIGHT_DISABLE								1

#define TIRE_HEALTHY								0
#define TIRE_DAMAGED								1

#define DOOR_DRIVER									1
#define DOOR_PASSENGER								2
#define DOOR_BACKLEFF								3
#define DOOR_BACKRIGHT								4

#define VEHICLE_DAMAGE_PANELS						0
#define VEHICLE_DAMAGE_DOORS						1
#define VEHICLE_DAMAGE_LIGHTS						2
#define VEHICLE_DAMAGE_TIRES						3

#define EVF_CAR_BLINK_NONE							-1
#define EVF_CAR_BLINK_LEFT							0
#define EVF_CAR_BLINK_RIGHT							1
#define EVF_CAR_BLINK_EMERGENCY						2

#define MAX_VEHICLE_NEON_SLOT						3
#define RED_NEON									18647
#define BLUE_NEON									18648
#define GREEN_NEON									18649
#define YELLOW_NEON									18650
#define PINK_NEON 									18651
#define WHITE_NEON									18652

#define MIN_VEHICLE_COMPONENT_ID					1000
#define MAX_VEHICLE_COMPONENT_ID					1193

enum EVF::VehicleProperties {
	e_VEHICLE_PAINTJOB,
	e_VEHICLE_INTERIOR,
	e_VEHICLE_COLOR_1,
	e_VEHICLE_COLOR_2,
	e_VEHICLE_HORN,
	e_VEHICLE_SPAWN_X,
	e_VEHICLE_SPAWN_Y,
	e_VEHICLE_SPAWN_Z,
	e_VEHICLE_SPAWN_A,
	e_VEHICLE_SPAWN_VW,
	e_VEHICLE_SPAWN_INT,
	e_VEHICLE_SPEED_CAP,
	e_VEHICLE_FUEL_USE,
	e_VEHICLE_FUEL,
	e_VEHICLE_STICKY,
	e_VEHICLE_UNO_DAMAGE,
	e_VEHICLE_CAP_DAMAGE,
	e_VEHICLE_EDITOR,
	e_VEHICLE_DAMAGE_PANELS,
	e_VEHICLE_DAMAGE_DOORS,
	e_VEHICLE_DAMAGE_LIGHTS,
	e_VEHICLE_DAMAGE_TIRES,
	e_VEHICLE_BOMB,
	e_VEHICLE_BOMB_TIMER,
	e_VEHICLE_BULLETPROOF,
	e_VEHICLE_STORED
};

enum EVF::VehicleBodyPart {
	VEHICLE_BODYPART_UNKNOWN,
	VEHICLE_BODYPART_FL_WHEEL,	//front left
	VEHICLE_BODYPART_FR_WHEEL,	//front right
	VEHICLE_BODYPART_BL_WHEEL,	//back left
	VEHICLE_BODYPART_BR_WHEEL,	//back right
	VEHICLE_BODYPART_PETROLCAP
};

enum EVF::ParamTypes {
	VEHICLE_TYPE_ENGINE,
	VEHICLE_TYPE_LIGHTS,
 	VEHICLE_TYPE_ALARM,
	VEHICLE_TYPE_DOORS,
	VEHICLE_TYPE_BONNET,
	VEHICLE_TYPE_BOOT,
	VEHICLE_TYPE_OBJECTIVE
};

enum EVF::VehicleData {
	#if defined EVF_Streamer
	STREAMER_TAG_OBJECT:e_attached_object[MAX_VEHICLE_ATTACHED_OBJECTS],
	#endif
	Float:e_vel_x,
	Float:e_vel_y,
	Float:e_vel_z,
	Float:e_pos_x,
	Float:e_pos_y,
	Float:e_pos_z,
	Float:e_pos_a,
	Float:e_health,
	e_uptime
};

enum EVF::PlayerData {
	e_editor_vehicle
	#if defined EVF_Streamer
	,
	STREAMER_TAG_OBJECT:e_editor_object
	#endif
};

enum EVF::NeonOffset {
	Float:EVF::NeonX,
	Float:EVF::NeonY,
	Float:EVF::NeonZ
};

#if defined EVF_Streamer
	enum EVF::BlinkOffset {
		Float:	EVF::X,
		Float:	EVF::Y,
		Float:	EVF::Z,
		Float:	EVF::rX,
		Float:	EVF::rY,
		Float:	EVF::rZ
	};
#endif

new EVF::VehicleProperty[MAX_VEHICLES][EVF::VehicleProperties];

new const EVF::NeonOffsetData[MAX_VEHICLE_MODELS][EVF::NeonOffset] = {
	{-0.924999,0.009999,-0.674999},
	{-0.979999,0.074999,-0.489999},
	{-1.034999,-0.029999,-0.579999},
	{-0.884999,1.834998,-1.099999},
	{-0.839999,-0.064999,-0.419999},
	{-0.914999,0.000000,-0.534999},
	{-1.129999,0.354999,-1.219999},
	{-1.214999,0.125000,-0.759999},
	{-0.664999,0.709999,-0.889999},
	{-0.914999,-0.294999,-0.474999},
	{-0.879999,0.000000,-0.389999},
	{-0.969999,0.004999,-0.559999},
	{-0.994999,-0.154999,-0.569999},
	{-0.919999,-0.069999,-0.719999},
	{-0.759999,-0.469999,-0.524999},
	{-0.949999,-0.009999,-0.524999},
	{-1.259999,-0.604999,-0.664999},
	{-2.255004,0.859999,-0.124999},
	{-1.004999,0.089999,-0.829999},
	{-0.934999,-0.009999,-0.584999},
	{-0.954999,-0.009999,-0.444999},
	{-0.929999,-0.029999,-0.589999},
	{-0.889999,0.009999,-0.609999},
	{-0.999999,0.164999,-0.714999},
	{-0.739999,0.039999,-0.234999},
	{-0.639999,2.475009,-0.789999},
	{-0.969999,0.000000,-0.464999},
	{-1.124999,-0.714999,-0.734999},
	{-1.124999,0.054999,-0.759999},
	{-0.844999,0.004999,-0.474999},
	{0.0,0.0,0.0},
	{-1.304998,2.300005,-0.714999},
	{0.0,0.0,0.0},
	{-0.579999,0.994999,-0.874999},
	{0.0,0.0,0.0},
	{0.0,0.0,0.0},
	{-0.859999,-0.024999,-0.489999},
	{-1.314998,2.245003,-0.724999},
	{-0.969999,-0.034999,-0.674999},
	{-0.884999,0.034999,-0.644999},
	{-0.914999,-0.045000,-0.899999},
	{0.0,0.0,0.0},
	{-1.004999,-0.074999,-0.604999},
	{-0.809999,2.770015,-1.174999},
	{-1.064999,0.000000,0.135000},
	{-0.949999,0.000000,-0.519999},
	{0.0,0.0,0.0},
	{-1.004999,0.259999,-0.769999},
	{0.0,0.0,0.0},
	{0.0,0.0,0.0},
	{0.0,0.0,0.0},
	{-0.984999,-0.194999,-0.519999},
	{0.0,0.0,0.0},
	{0.0,0.0,0.0},
	{0.0,0.0,0.0},
	{-0.579999,0.979999,-0.859999},
	{-0.764999,-0.179999,-0.464999},
	{0.0,0.0,0.0},
	{-0.959999,-0.039999,-0.594999},
	{-0.919999,-0.069999,-0.719999},
	{-1.399998,0.554999,-1.819998},
	{0.0,0.0,0.0},
	{0.0,0.0,0.0},
	{0.0,0.0,0.0},
	{0.0,0.0,0.0},
	{0.0,0.0,0.0},
	{-0.989999,-0.064999,-0.489999},
	{-0.989999,-0.044999,-0.484999},
	{0.0,0.0,0.0},
	{0.0,0.0,0.0},
	{-1.119999,-0.149999,-0.359999},
	{0.0,0.0,0.0},
	{0.0,0.0,0.0},
	{0.0,0.0,0.0},
	{-0.994999,-0.064999,-0.544999},
	{-0.904999,-0.054999,-0.549999},
	{0.0,0.0,0.0},
	{-0.979999,0.019999,-0.514999},
	{-0.804999,0.064999,-0.519999},
	{-0.854999,0.090000,-0.454999},
	{-0.879999,0.000000,-0.489999},
	{0.0,0.0,0.0},
	{-0.989999,0.000000,-0.759999},
	{-0.834999,-0.149999,-0.744999},
	{0.0,0.0,0.0},
	{-0.629999,0.164999,-0.374999},
	{0.0,0.0,0.0},
	{0.0,0.0,0.0},
	{0.0,0.0,0.0},
	{-1.019999,0.110000,-0.679999},
	{-1.054999,0.125000,-0.604999},
	{-0.874999,-0.009999,-0.569999},
	{-0.909999,0.000000,-0.459999},
	{0.0,0.0,0.0},
	{-0.909999,-0.199999,-0.639999},
	{-1.024999,0.184999,-0.809999},
	{-0.854999,0.029999,-0.469999},
	{0.0,0.0,0.0},
	{-1.149999,0.269999,-0.654999},
	{-0.969999,-1.404998,-0.199999},
	{-0.969999,0.189999,-0.574999},
	{0.0,0.0,0.0},
	{-0.909999,0.029999,-0.639999},
	{-0.909999,-0.184999,-0.639999},
	{-0.989999,-0.059999,-0.494999},
	{-1.019999,0.110000,-0.679999},
	{-0.904999,-0.249999,-0.509999},
	{-1.084999,-0.024999,-0.589999},
	{-1.334998,-0.424999,-0.979999},
	{0.0,0.0,0.0},
	{0.0,0.0,0.0},
	{0.0,0.0,0.0},
	{0.0,0.0,0.0},
	{0.0,0.0,0.0},
	{-0.969999,1.669998,-1.174999},
	{-1.454998,0.439999,-1.854998},
	{-0.989999,0.024999,-0.584999},
	{-0.959999,0.004999,-0.554999},
	{-1.049999,0.110000,-0.439999},
	{0.0,0.0,0.0},
	{0.0,0.0,0.0},
	{0.0,0.0,0.0},
	{0.0,0.0,0.0},
	{0.0,0.0,0.0},
	{-0.689999,1.489998,-1.319998},
	{-1.054999,0.499999,-0.329999},
	{-0.899999,0.000000,-0.564999},
	{-0.944999,0.154999,-0.419999},
	{-0.924999,0.059999,-0.529999},
	{-0.934999,-0.110000,-0.429999},
	{0.0,0.0,0.0},
	{-0.144999,0.314999,-0.444999},
	{0.0,0.0,0.0},
	{-0.924999,-0.034999,-0.479999},
	{-0.984999,0.164999,-0.564999},
	{-1.069999,-0.034999,-0.569999},
	{-0.954999,-0.019999,-0.579999},
	{0.0,0.0,0.0},
	{0.0,0.0,0.0},
	{-1.004999,-0.049999,-0.019999},
	{-1.024999,-0.090000,-0.639999},
	{-0.904999,0.000000,-0.414999},
	{-0.894999,0.014999,-0.539999},
	{-0.904999,0.009999,-0.409999},
	{-1.089999,0.000000,-0.709999},
	{-0.939999,-0.029999,-0.564999},
	{-1.039999,-0.100000,-0.474999},
	{-0.884999,0.059999,-0.479999},
	{-1.769998,1.484998,-1.774998},
	{-0.949999,0.105000,-0.439999},
	{-1.089999,-0.059999,-0.554999},
	{-0.964999,0.004999,-0.564999},
	{-1.034999,0.749999,-0.254999},
	{0.0,0.0,0.0},
	{-1.109999,0.009999,-0.534999},
	{-0.754999,0.000000,-0.464999},
	{-1.119999,0.000000,0.184999},
	{-1.129999,0.044999,0.074999},
	{-0.894999,-0.089999,-0.374999},
	{-0.964999,0.000000,-0.444999},
	{-1.004999,0.054999,-0.414999},
	{-0.919999,0.130000,-0.574999},
	{-0.909999,0.120000,-0.404999},
	{0.0,0.0,0.0},
	{0.0,0.0,0.0},
	{-0.824999,0.000000,-0.414999},
	{-0.989999,-0.049999,-0.479999},
	{-1.089999,0.309999,-0.609999},
	{-0.334999,0.100000,-0.374999},
	{0.0,0.0,0.0},
	{0.0,0.0,0.0},
	{0.0,0.0,0.0},
	{0.0,0.0,0.0},
	{0.0,0.0,0.0},
	{0.0,0.0,0.0},
	{-0.924999,0.004999,-0.334999},
	{-1.019999,-0.140000,-0.419999},
	{0.0,0.0,0.0},
	{-1.429998,-0.649999,-0.879999},
	{-1.014999,0.000000,-0.484999},
	{-1.089999,0.014999,-0.474999},
	{0.0,0.0,0.0},
	{-0.984999,-0.194999,-0.709999},
	{-0.674999,0.259999,0.130000},
	{0.0,0.0,0.0},
	{-1.019999,-0.009999,-0.354999},
	{0.0,0.0,0.0},
	{-1.009999,-0.064999,-0.534999},
	{-1.374998,0.000000,-0.664999},
	{-0.909999,0.000000,-0.359999},
	{0.0,0.0,0.0},
	{0.0,0.0,0.0},
	{0.0,0.0,0.0},
	{0.0,0.0,0.0},
	{0.0,0.0,0.0},
	{0.0,0.0,0.0},
	{-0.974999,0.000000,-0.469999},
	{-0.969999,0.000000,-0.464999},
	{-1.004999,-0.014999,-0.414999},
	{-1.019999,0.115000,-0.684999},
	{-0.959999,0.204999,-0.499999},
	{0.0,0.0,0.0},
	{-1.024999,0.000000,-0.549999},
	{-0.954999,0.034999,-0.629999},
	{-0.989999,-0.064999,-0.489999},
	{-0.904999,0.009999,-0.409999},
	{0.0,0.0,0.0},
	{0.0,0.0,0.0},
	{0.0,0.0,0.0},
	{-1.149999,0.269999,-0.654999},
	{0.0,0.0,0.0},
	{0.0,0.0,0.0}
};

#if defined EVF_Streamer
	new const EVF::BlinkOffsetData[][EVF::BlinkOffset] = {
		{-0.9001, 2.0490, -0.0965, -0.9605, -2.2404, -0.0965},
		{-0.9686, 2.5393, 0.0235, -0.9970, -2.2863, 0.0235},
		{-0.8788, 2.5160, -0.0565, -0.9208, -2.5936, 0.0435},
		{-1.3897, 3.6007, -0.2194, -1.1904, -0.9415, 1.8389},
		{-0.7236, 2.1715, -0.0365, -0.7906, -2.7052, 0.0635},
		{-0.9127, 2.2766, -0.0565, -0.8723, -2.6526, -0.0565},
		{-2.2165, 4.9242, -0.0332, -2.0785, -5.2054, 0.5468},
		{-0.9887, 4.0622, -0.0913, -1.0141, -3.4034, -0.0913},
		{-0.9659, 4.7615, -0.2513, -0.8430, -3.9722, -0.5113},
		{-0.7859, 3.5522, -0.0313, -0.8027, -3.8228, -0.0313},
		{-0.825, 2.105, 0.0635, -0.8723, -2.1926, 0.1235},
		{-0.9405, 2.6710, -0.1825, -0.9636, -2.4525, 0.0825},
		{-0.8965, 2.6478, -0.0575, -0.9592, -3.4870, -0.1575},
		{-0.8669, 2.5464, -0.0913, -0.8209, -2.5829, 0.0687},
		{-0.8069, 2.7473, 0.0087, -0.9058, -3.2050, 0.1094},
		{-0.8738, 2.4866, -0.2357, -0.7792, -2.3501, 0.0450},
		{-0.8469, 2.9073, 0.0087, -1.0352, -3.5937, 1.4522},
		{0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000},
		{-0.9511, 2.3820, -0.2357, -1.0081, -2.4904, -0.1557},
		{-1.0742, 2.3978, -0.1757, -0.8127, -2.8620, -0.1557},
		{-1.0142, 2.2978, -0.0157, -0.9637, -2.6744, 0.0043},
		{-0.9013, 2.5343, -0.1357, -0.5921, -2.9228, -0.1957},
		{-0.7813, 2.1543, -0.2657, -0.8985, -2.4349, -0.1057},
		{-0.7817, 2.2093, -0.0313, -0.8340, -2.1794, 0.0596},
		{-0.7350, 1.4505, 0.1087, -0.7062, -1.4778, 0.2996},
		{0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000},
		{-1.0006, 2.3164, -0.0100, -0.9627, -2.6930, -0.0100},
		{-0.8728, 2.5856, 0.1887, -0.9831, -3.8383, -0.3495},
		{-0.8728, 2.5856, -0.2103, -0.9045, -2.8871, 1.2466},
		{-0.7942, 2.2846, -0.2500, -0.8397, -2.3849, -0.0070},
		{0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000},
		{-0.9771, 5.8479, 0.3497, -1.0300, -5.7043, -0.1041},
		{-1.7168, 4.0330, 0.4497, -1.5830, -4.3414, 0.7039},
		{-1.2619, 3.7708, -0.2163, -1.2966, -4.6534, -0.1051},
		{0.0, 0.0, 0.0, -0.4811, -1.9838, -0.0670},
		{0.0000, 0.0000, 0.0000, -1.0697, -3.9690, -1.1053}, //trailer
		{-0.8495, 2.2519, -0.0070, -0.8948, -2.4838, 0.1130},
		{-1.1156, 5.5395, -0.2163, -0.9856, -5.3099, 1.6458},
		{-1.1128, 2.3675, -0.2870, -1.0992, -2.4601, -0.2870},
		{-0.8381, 2.3101, -0.1470, -0.8221, -2.6534, -0.1070},
		{-0.8270, 2.5573, -0.3173, -0.8676, -2.5376, -0.0149},
		{0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000},
		{-1.0354, 2.8278, -0.1870, -1.0226, -3.0877, -0.1270},
		{-1.0610, 5.7528, -0.9573, -1.2388, -7.1392, -0.8250},
		{-0.9880, 2.7188, 0.6140, -1.0722, -3.0184, 0.7248},
		{-0.9590, 2.3460, -0.0840, -0.9773, -2.8049, -0.0840},
		{0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000},
		{0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000},
		{ -0.1992, -0.9229, -0.1270},
		{0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000},
		{ 0.0000, 0.0000, 0.0000, -1.0697, -3.9690, -1.1053}, //trailer
		{-0.9826, 1.9642, -0.1399, -0.8894, -2.3991, -0.0199},
		{0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000},
		{0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000},
		{0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000},
		{0.0000, 0.0000, 0.0000, -1.3866, -4.5162, -0.7399},
		{0.0000, 0.0000, 0.0000, -1.3045, -4.6123, 0.4601},
		{0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000},
		{-0.9513, 2.4197, -0.1399, -0.9703, -2.7779, 0.0201},
		{-0.8214, 2.5716, -0.1274, -0.8760, -2.5775, 0.1127},
		{0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000},
		{0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000},
		{0.0000, 0.0000, 0.0000, -0.2054, -0.9359, -0.1399},
		{-0.2276, 0.7185, 0.3201, -0.1952, -1.0037, 0.1601},
		{0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000},
		{0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000},
		{0.0000, 0.0000, 0.0000, -1.0201, -2.7994, 0.0401},
		{0.0000, 0.0000, 0.0000, -0.9401, -3.0594, 0.1601},
		{0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000},
		{0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000},
		{-1.0259, 2.1382, 0.2001, -1.0433, -2.5463, 0.1201},
		{0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000},
		{0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000},
		{0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000},
		{0.0000, 0.0000, 0.0000, -0.9833, -2.7663, -0.0599},
		{-0.8681, 2.4086, -0.3399, -0.8632, -2.7629, -0.2399},
		{0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000},
		{-0.8081, 2.6686, -0.1999, -0.9945, -2.6987, 0.0801},
		{-1.0938, 2.0255, 0.1001, -1.0579, -2.5378, -0.2799},
		{-0.9671, 2.4844, 0.0201, -0.9578, -2.7556, 0.0601},
		{-0.5897, 2.2607, -0.4399, -0.9183, -2.3388, -0.1399},
		{0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000},
		{-0.8841, 2.4094, -0.3399, -0.8685, -2.5676, 0.0201},
		{-0.7770, 2.6235, -0.0199, -0.6709, -2.7712, -0.1999},
		{ 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000},
		{-0.6104, 1.7180, 0.2201, -0.7074, -1.3681, 0.1201},
		{0.0000, 0.0000, 0.0000, -0.5919, -3.2353, 0.9601},
		{0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000},
		{0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000},
		{-1.1024, 2.5796, 0.0401, -1.1261, -2.6473, 0.1601},
		{-1.0971, 3.1462, 0.0401, -1.1327, -3.1055, 0.1601},
		{-0.8495, 2.5284, -0.0799, -0.8870, -2.7776, 0.0001},
		{-0.7905, 2.4656, -0.0599, -0.9075, -2.8130, 0.0001},
		{0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000},
		{-0.8513, 2.3630, -0.2199, -0.8275, -2.8485, 0.1401},
		{-1.0909, 2.3818, 0.0001, -1.1540, -2.1156, -0.0399},
		{-0.9219, 2.1787, 0.0401, -0.7095, -2.1087, 0.0801},
		{0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000},
		{-0.8915, 3.0670, 0.2201, -0.9740, -3.0460, 0.3601},
		{-0.7725, 2.4576, -0.1999, -1.1318, -3.4186, 0.1401},
		{-0.9152, 1.9097, -0.0355, -0.7552, -1.9266, -0.0355},
		{0.0, 0.0, 0.0, 0.0, 0.0, 0.0},
		{-0.8723, 2.5986, -0.1770, 0.0, 0.0, 0.0},
		{-0.8579, 2.3582, -0.0213, 0.0, 0.0, 0.0},
		{0.0, 0.0, 0.0, 0.0, 0.0, 0.0},
		{-1.1068, 2.5744, 0.0086, -1.1365, -2.6250, 0.1679},
		{-0.7672, 2.2106, -0.3185, -0.9113, -2.3474, -0.0273},
		{-1.1143, 2.6057, -0.0456, -1.1410, -2.9714, -0.0456},
		{-0.7012, 3.0199, -0.6678, -1.3807, -3.3356, 1.2628},
		{0.0, 0.0, 0.0, 0.0, 0.0, 0.0},
		{0.0, 0.0, 0.0, 0.0, 0.0, 0.0},
		{0.0, 0.0, 0.0, 0.0, 0.0, 0.0},
		{0.0, 0.0, 0.0, 0.0, 0.0, 0.0},
		{0.0, 0.0, 0.0, 0.0, 0.0, 0.0},
		{-1.2341, 4.2204, 0.0806, 0.0, 0.0, 0.0},
		{-1.4241, 4.4811, -0.7354, -1.2973, -4.8274, -0.8974},
		{-0.9512, 2.7208, -0.0543, -0.9926, -2.7809, -0.0348},
		{-0.9401, 2.7868, -0.0726, -1.0208, -2.7461, -0.1324},
		{-0.9166, 2.6548, -0.0487, -1.0124, -2.8219, -0.0487}, //fake
		{0.0, 0.0, 0.0, 0.0, 0.0, 0.0},
		{0.0, 0.0, 0.0, 0.0, 0.0, 0.0},
		{0.0, 0.0, 0.0, 0.0, 0.0, 0.0},
		{0.0, 0.0, 0.0, 0.0, 0.0, 0.0},
		{-0.2607, 0.6038, 0.2881, -0.1973, -0.9958, 0.0638},
		{-0.9279, 3.6538, -0.0473, -1.3003, -3.9309, -1.0661}, //fake back
		{-0.8576, 2.9431, 0.1425, -1.0428, -2.9851, -0.1486}, //fake back
		{-0.9421, 2.3087, -0.1128, -0.9559, -2.2882, -0.0411},
		{-0.9351, 2.4078, -0.0242, -0.9825, -2.2344, 0.0844},
		{-0.8783, 2.5102, -0.1526, -0.8133, -2.5965, -0.3237}, //fake back
		{-1.0177, 2.5256, 0.0698, -1.0505, -2.5713, 0.2047},
		{0.0, 0.0, 0.0, 0.0, 0.0, 0.0},
		{-0.4216, 1.5030, -0.1191, -0.5225, -1.0517, 0.4484}, //fake
		{-4.0331, 3.9619, -0.9118, -1.5976, -0.3739, 0.4484}, //fake!
		{-0.9410, 2.3774, 0.0985, -0.9852, -2.4663, -0.0020},
		{-1.0159, 2.9278, -0.1698, -0.8236, -2.7548, -0.0574},
		{-0.8265, 2.5014, -0.2084, -0.9267, -2.6058, -0.1784},
		{-0.8577, 2.3943, -0.1248, -0.8736, -3.0999, -0.0900},
		{0.0, 0.0, 0.0, 0.0, 0.0, 0.0},
		{0.0, 0.0, 0.0, 0.0, 0.0, 0.0},
		{0.0, 0.0, 0.0, 0.0, 0.0, 0.0},
		{-0.9827, 2.5810, -0.1248, -1.0597, -2.7121, -0.0842},
		{-0.6055, 2.3378, -0.2108, -0.7826, -2.1992, 0.0913},
		{-0.9712, 2.6252, -0.0064, -0.8281, -2.9729, -0.0577},
		{-0.8414, 2.2904, 0.0719, -0.9831, -2.6214, -0.0116}, //fake front
		{-0.7346, 3.5720, 0.0200, -0.8597, -3.2242, -0.5918},
		{-0.4372, 1.6776, -0.0400, -0.7955, -2.0453, -0.2888},
		{-1.1294, 1.0702, 0.0719, -1.0580, -2.6948, 0.0719},
		{-0.9582, 2.5222, 0.0271, -0.9937, -2.5915, 0.0719},
		{0.0, 0.0, 0.0, 0.0, 0.0, 0.0},
		{-0.9264, 2.4914, 0.0271, -0.9070, -2.5802, 0.0271},
		{-1.0477, 2.5642, -0.1807, -1.0302, -2.6549, -0.1297},
		{-0.9334, 2.6344, -0.0448, -0.9785, -3.0524, 0.0366},
		{-0.8757, 3.0634, 0.3600, -0.9933, -2.9119, 0.4752},
		{0.0, 0.0, 0.0, 0.0, 0.0, 0.0},
		{-0.9409, 2.5345, 0.0600, -1.1112, -2.8095, 0.0651},
		{-0.9236, 1.1282, -0.0462, 0.0, 0.0, 0.0},
		{-0.9686, 2.5396, 0.5800, -1.1128, -2.8895, 0.7691},
		{-0.9886, 2.4796, 0.7000, -1.0904, -2.7699, 0.6871},
		{-0.9452, 2.0854, 0.0836, -0.9187, -2.4047, 0.3185},
		{-0.9037, 2.4333, -0.0168, -0.8819, -2.2910, 0.1482},
		{-0.9347, 2.5097, -0.2644, -0.9639, -2.2337, 0.1259},
		{-0.9157, 2.5754, -0.0857, -0.9317, -2.5444, -0.0191},
		{-0.9299, 2.3759, 0.0201, -0.8575, -2.2773, 0.1659},
		{0.0, 0.0, 0.0, 0.0, 0.0, 0.0},
		{0.0, 0.0, 0.0, 0.0, 0.0, 0.0},
		{-0.8503, 2.0545, 0.0346, -0.9249, -1.9224, 0.0816},
		{-0.9539, 2.7226, 0.0346, -0.9506, -2.9199, 0.0346},
		{-0.9942, 2.9212, -0.1543, -1.0077, -2.9164, -0.1543},
		{-0.2962, 2.0729, -0.0171, -0.2384, -1.2180, 0.0720},
		{0.0, 0.0, 0.0, 0.0, 0.0, 0.0},
		{0.0, 0.0, 0.0, 0.0, 0.0, 0.0},
		{0.0, 0.0, 0.0, 0.0, 0.0, 0.0},
		{-0.3095, 0.7291, -0.0971, -0.4318, -0.8940, -0.0510},
		{-0.7949, 3.0624, -0.3371, -0.8727, -3.0917, -0.4540},
		{-0.4348, 1.6912, -0.2171, -0.4277, -1.1358, -0.2069},
		{-0.9483, 2.3252, 0.1334, -0.9173, -2.7359, -0.0291},
		{-0.9948, 2.4505, 0.1883, -0.9983, -3.1357, -0.0291},
		{0.0, 0.0, 0.0, 0.0, 0.0, 0.0},
		{-1.0478, 4.3687, -0.1800, -1.1188, -5.3472, -0.5099},
		{-1.0598, 2.3634, 0.1013, -1.0873, -2.7596, 0.1013},
		{-0.7970, 2.6313, -0.2429, -1.0776, -2.8302, 0.1013},
		{0.0, 0.0, 0.0, -0.1975, -1.0375, 0.3448},
		{-0.8583, 2.4404, -0.0571, -0.9214, -3.3625, 0.0521},
		{-0.5225, 1.3799, 0.2429, -0.5486, -1.5684, 0.2462},
		{0.0, 0.0, 0.0, -1.0452, -4.3338, -0.7298}, //trailer
		{-1.0068, 2.7905, 0.0907, -0.9760, -3.0160, 0.2088},
		{-0.2872, 0.5383, 0.2009, -0.1703, -1.3533, 0.2784},
		{-1.0236, 2.1415, -0.2834, -1.0832, -2.4851, 0.1047},
		{-1.0116, 3.3590, 0.1029, -1.0679, -3.9639, -0.3029},
		{-0.8107, 2.3905, 0.1834, -0.9605, -2.2799, 0.3761},
		{0.0, 0.0, 0.0, 0.0, 0.0, 0.0},
		{0.0, 0.0, 0.0, -1.0590, -3.9902, -1.0809}, //trailer
		{0.0, 0.0, 0.0, 0.0, 0.0, 0.0},
		{0.0, 0.0, 0.0, 0.0, 0.0, 0.0},
		{0.0, 0.0, 0.0, 0.0, 0.0, 0.0},
		{0.0, 0.0, 0.0, 0.0, 0.0, 0.0},
		{-1.0419, 2.2929, -0.0255, -1.0332, -2.6951, 0.0005},
		{-1.0419, 2.2929, -0.0255, -1.0332, -2.6951, 0.0005},
		{-1.0423, 2.3495, 0.0600, -1.0326, -2.6930, 0.0600},
		{-1.0837, 2.5663, 0.0301, -1.1267, -2.6290, 0.1451},
		{-0.8782, 2.6525, -0.0344, -1.0586, -2.6696, 0.0596},
		{-0.8094, 3.0084, 0.5429, -0.9321, -3.0808, 0.9071},
		{-1.0297, 2.0487, -0.0543, -0.8907, -2.5334, -0.3228},
		{-0.9069, 2.6672, -0.1335, -0.8647, -2.5991, -0.1335},
		{0.0, 0.0, 0.0, 0.0, 0.0, 0.0},
		{0.0, 0.0, 0.0, 0.0, 0.0, 0.0},
		{0.0, 0.0, 0.0, -0.5702, -1.5842, 0.7956}, //trailer
		{0.0, 0.0, 0.0, 0.0, 0.0, 0.0},
		{0.0, 0.0, 0.0, 0.0, 0.0, 0.0},
		{-0.8972, 3.0244, 0.2629, -0.9349, -2.9809, 0.2791},
		{0.0, 0.0, 0.0, 0.0, 0.0, 0.0},
		{0.0, 0.0, 0.0, 0.0, 0.0, 0.0}
	};
#endif

new EVF::VehicleTrailerID[MAX_VEHICLES],
	EVF::VehicleTempData[MAX_VEHICLES][EVF::VehicleData],
	EVF::PlayerTempData[MAX_PLAYERS][EVF::PlayerData],
	EVF::ModShopStatus[MAX_PLAYERS];
	
#if defined EVF_Streamer
	new STREAMER_TAG_OBJECT:EVF::VehicleNeon[MAX_VEHICLES][MAX_VEHICLE_NEON_SLOT][2],
		STREAMER_TAG_OBJECT:EVF::Blink[MAX_VEHICLES][4],
		EVF::BlinkSide[MAX_VEHICLES],
		Float:EVF::BlinkR[MAX_VEHICLES],
		bool:EVF::VehicleBlinking = false;
#endif

new const Float:EVF::TopSpeed[MAX_VEHICLE_MODELS] = {
	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,
	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,
	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,
	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,
	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,
	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, 
	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,
	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,
	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,
	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,
	151.0, 110.0, 169.0, 171.0, 148.0, 152.0, 0.0,   0.0,   0.0,   108.0, 0.0,   0.0
};

new const EVF::CarColors[][]={
	{16, 004, 001, 123, 001, 113, 001, 101, 001, 075, 001, 062, 001, 040, 001, 036, 001},
	{16, 041, 041, 047, 047, 052, 052, 066, 066, 074, 074, 087, 087, 091, 091, 113, 113},
	{16, 010, 010, 013, 013, 022, 022, 030, 030, 039, 039, 090, 090, 098, 098, 110, 110},
	{16, 036, 001, 037, 001, 030, 001, 028, 001, 025, 001, 040, 001, 101, 001, 113, 001},
	{16, 113, 039, 119, 050, 123, 092, 109, 100, 101, 101, 095, 105, 083, 110, 066, 025},
	{16, 011, 001, 024, 001, 036, 001, 040, 001, 075, 001, 091, 001, 123, 001, 004, 001},
	{2, 001, 001},
	{2, 003, 001},
	{2, 026, 026},
	{2, 001, 001},
	{16, 004, 001, 009, 001, 010, 001, 025, 001, 036, 001, 040, 001, 045, 001, 084, 001},
	{16, 012, 001, 064, 001, 123, 001, 116, 001, 112, 001, 106, 001, 080, 001, 075, 001},
	{16, 009, 001, 010, 008, 011, 001, 025, 008, 027, 001, 029, 008, 030, 001, 037, 008},
	{16, 087, 001, 088, 001, 091, 001, 105, 001, 109, 001, 119, 001, 004, 001, 025, 001},
	{16, 025, 001, 028, 001, 043, 001, 067, 001, 072, 001, 009, 001, 095, 001, 024, 001},
	{16, 020, 001, 025, 001, 036, 001, 040, 001, 062, 001, 075, 001, 092, 001, 000, 001},
	{2, 001, 003},
	{0, 000, 000},
	{16, 119, 119, 117, 227, 114, 114, 108, 108, 095, 095, 081, 081, 061, 061, 041, 041},
	{16, 045, 075, 047, 076, 033, 075, 013, 076, 054, 075, 069, 076, 059, 075, 087, 076},
	{2, 006, 001},
	{16, 004, 001, 013, 001, 025, 001, 030, 001, 036, 001, 040, 001, 075, 001, 095, 001},
	{14, 096, 025, 097, 025, 101, 025, 111, 031, 113, 036, 083, 057, 067, 059},
	{12, 001, 016, 001, 056, 001, 017, 001, 053, 001, 005, 001, 035},
	{16, 001, 000, 002, 002, 003, 002, 003, 006, 006, 016, 015, 030, 024, 053, 035, 061},
	{2, 043, 000},
	{16, 037, 037, 042, 042, 053, 053, 062, 062, 007, 007, 010, 010, 011, 011, 015, 015},
	{2, 000, 001},
	{2, 004, 075},
	{16, 012, 012, 013, 013, 014, 014, 001, 002, 002, 001, 001, 003, 003, 001, 010, 010},
	{2, 046, 026},
	{16, 071, 059, 075, 059, 092, 072, 047, 074, 055, 083, 059, 083, 071, 087, 082, 087},
	{2, 043, 000},
	{2, 043, 000},
	{14, 001, 001, 012, 012, 002, 002, 006, 006, 004, 004, 046, 046, 053, 053},
	{2, 001, 001},
	{14, 083, 001, 087, 001, 092, 001, 095, 001, 109, 001, 119, 045, 011, 001},
	{16, 054, 007, 079, 007, 087, 007, 095, 016, 098, 020, 105, 020, 123, 020, 125, 021},
	{2, 006, 076},
	{16, 057, 008, 008, 017, 043, 021, 054, 038, 067, 008, 037, 078, 065, 079, 025, 078},
	{16, 034, 034, 032, 032, 020, 020, 110, 110, 066, 066, 084, 084, 118, 118, 121, 121},
	{16, 002, 096, 079, 042, 082, 054, 067, 086, 126, 096, 070, 096, 110, 054, 067, 098},
	{16, 000, 000, 011, 105, 025, 109, 036, 000, 040, 036, 075, 036, 000, 036, 000, 109},
	{16, 004, 001, 020, 001, 024, 001, 025, 001, 036, 001, 040, 001, 054, 001, 084, 001},
	{12, 032, 036, 032, 042, 032, 053, 032, 066, 032, 014, 032, 032},
	{16, 034, 034, 035, 035, 037, 037, 039, 039, 041, 041, 043, 043, 045, 045, 047, 047},
	{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},
	{2, 075, 002},
	{2, 001, 003},
	{2, 001, 074},
	{2, 001, 001},
	{16, 123, 123, 125, 125, 036, 036, 016, 016, 018, 018, 046, 046, 061, 061, 075, 075},
	{16, 001, 003, 001, 005, 001, 016, 001, 022, 001, 035, 001, 044, 001, 053, 001, 057},
	{2, 056, 056},
	{2, 026, 026},
	{16, 084, 015, 084, 058, 084, 031, 032, 074, 043, 031, 001, 031, 077, 031, 032, 074},
	{16, 084, 063, 091, 063, 102, 065, 105, 072, 110, 093, 121, 093, 012, 095, 023, 001},
	{16, 058, 001, 002, 001, 063, 001, 018, 001, 032, 001, 045, 001, 013, 001, 034, 001},
	{16, 091, 001, 101, 001, 109, 001, 113, 001, 004, 001, 025, 001, 030, 001, 036, 001},
	{16, 026, 026, 028, 028, 044, 044, 051, 051, 057, 057, 072, 072, 106, 106, 112, 112},
	{16, 001, 003, 001, 009, 001, 018, 001, 030, 017, 023, 046, 023, 046, 032, 057, 034},
	{16, 036, 001, 037, 001, 043, 001, 053, 001, 061, 001, 075, 001, 079, 001, 088, 001},
	{16, 012, 012, 013, 013, 014, 014, 001, 002, 002, 001, 001, 003, 003, 001, 010, 010},
	{16, 079, 079, 084, 084, 007, 007, 011, 011, 019, 019, 022, 022, 036, 036, 053, 053},
	{2, 014, 075},
	{2, 014, 075},
	{16, 067, 076, 068, 076, 078, 076, 002, 076, 016, 076, 018, 076, 025, 076, 045, 088},
	{16, 051, 001, 058, 008, 060, 001, 068, 008, 002, 001, 013, 008, 022, 001, 036, 008},
	{8, 006, 006, 046, 046, 053, 053, 003, 003},
	{0, 000, 000},
	{2, 043, 000},
	{16, 120, 117, 103, 111, 120, 114, 074, 091, 120, 112, 074, 083, 120, 113, 066, 071},
	{4, 056, 015, 056, 053},
	{4, 056, 015, 056, 053},
	{16, 097, 001, 081, 001, 105, 001, 110, 001, 091, 001, 074, 001, 084, 001, 083, 001},
	{16, 002, 039, 009, 039, 017, 001, 021, 001, 033, 000, 037, 000, 041, 029, 056, 029},
	{16, 006, 007, 007, 006, 001, 006, 089, 091, 119, 117, 103, 102, 077, 087, 071, 077},
	{16, 092, 001, 094, 001, 101, 001, 121, 001, 000, 001, 022, 001, 036, 001, 075, 001},
	{16, 072, 001, 066, 001, 059, 001, 045, 001, 040, 001, 039, 001, 035, 001, 020, 001},
	{16, 027, 036, 059, 036, 060, 035, 055, 041, 054, 031, 049, 023, 045, 032, 040, 029},
	{14, 073, 045, 012, 012, 002, 002, 006, 006, 004, 004, 046, 046, 053, 053},
	{16, 001, 001, 003, 003, 006, 006, 046, 046, 065, 009, 014, 001, 012, 009, 026, 001},
	{16, 041, 041, 048, 048, 052, 052, 064, 064, 071, 071, 085, 085, 010, 010, 062, 062},
	{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},
	{8, 012, 035, 050, 032, 040, 026, 066, 036},
	{14, 001, 073, 001, 074, 001, 075, 001, 076, 001, 077, 001, 078, 001, 079},
	{2, 001, 001},
	{16, 026, 014, 029, 042, 026, 057, 054, 029, 026, 003, 003, 029, 012, 039, 074, 035},
	{4, 002, 026, 002, 029},
	{12, 013, 118, 014, 123, 120, 123, 112, 120, 084, 110, 076, 102},
	{2, 000, 000},
	{12, 040, 065, 071, 072, 052, 066, 064, 072, 030, 072, 060, 072},
	{16, 030, 026, 077, 026, 081, 027, 024, 055, 028, 056, 049, 059, 052, 069, 071, 107},
	{2, 036, 013},
	{16, 007, 094, 036, 088, 051, 075, 053, 075, 058, 067, 075, 067, 075, 061, 079, 062},
	{16, 123, 124, 119, 122, 118, 117, 116, 115, 114, 108, 101, 106, 088, 099, 005, 006},
	{16, 074, 072, 066, 072, 053, 056, 037, 019, 022, 022, 020, 020, 009, 014, 000, 000},
	{2, 000, 001},
	{16, 011, 123, 013, 120, 020, 117, 024, 112, 027, 107, 036, 105, 037, 107, 043, 093},
	{16, 109, 025, 109, 032, 112, 032, 010, 032, 030, 044, 032, 052, 084, 066, 084, 069},
	{16, 075, 084, 040, 084, 040, 110, 028, 119, 025, 119, 021, 119, 013, 119, 004, 119},
	{2, 014, 075},
	{16, 083, 066, 087, 074, 087, 075, 098, 083, 101, 100, 103, 101, 117, 116, 123, 036},
	{16, 036, 117, 036, 013, 042, 030, 042, 033, 054, 036, 075, 079, 092, 101, 098, 109},
	{16, 051, 039, 057, 038, 045, 029, 034, 009, 065, 009, 014, 001, 012, 009, 026, 001},
	{12, 013, 118, 014, 123, 120, 123, 112, 120, 084, 110, 076, 102},
	{10, 003, 003, 006, 006, 007, 007, 052, 052, 076, 076},
	{16, 037, 037, 042, 042, 053, 053, 062, 062, 007, 007, 010, 010, 011, 011, 015, 015},
	{2, 001, 001},
	{16, 007, 001, 074, 001, 061, 001, 016, 001, 025, 001, 030, 001, 036, 001, 053, 001},
	{16, 043, 043, 046, 046, 039, 039, 028, 028, 016, 016, 006, 006, 005, 005, 002, 002},
	{16, 003, 090, 004, 090, 007, 068, 008, 066, 012, 060, 027, 097, 034, 051, 037, 051},
	{16, 017, 039, 015, 123, 032, 112, 045, 088, 052, 071, 057, 067, 061, 096, 096, 096},
	{16, 038, 051, 021, 036, 021, 034, 030, 034, 054, 034, 055, 020, 048, 018, 051, 006},
	{16, 010, 001, 025, 001, 028, 001, 036, 001, 040, 001, 054, 001, 075, 001, 113, 001},
	{16, 013, 076, 024, 077, 063, 078, 042, 076, 054, 077, 039, 078, 011, 076, 062, 077},
	{16, 116, 001, 119, 001, 122, 001, 004, 001, 009, 001, 024, 001, 027, 001, 036, 001},
	{16, 037, 036, 036, 036, 040, 036, 043, 041, 047, 041, 051, 072, 054, 075, 055, 084},
	{16, 002, 039, 009, 039, 017, 001, 021, 001, 033, 000, 037, 000, 041, 029, 056, 029},
	{2, 001, 001},
	{0, 000, 000},
	{16, 074, 074, 075, 013, 087, 118, 092, 003, 115, 118, 025, 118, 036, 000, 118, 118},
	{16, 003, 003, 003, 008, 006, 025, 007, 079, 008, 082, 036, 105, 039, 106, 051, 118},
	{0, 000, 000},
	{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},
	{14, 001, 001, 017, 020, 018, 020, 022, 030, 036, 043, 044, 051, 052, 054},
	{16, 002, 039, 009, 039, 017, 001, 021, 001, 033, 000, 037, 000, 041, 029, 056, 029},
	{16, 052, 001, 053, 001, 066, 001, 075, 001, 076, 001, 081, 001, 095, 001, 109, 001},
	{0, 000, 000},
	{16, 037, 037, 042, 042, 053, 053, 062, 062, 007, 007, 010, 010, 011, 011, 015, 015},
	{16, 110, 001, 111, 001, 112, 001, 114, 001, 119, 001, 122, 001, 004, 001, 013, 001},
	{12, 002, 035, 036, 002, 051, 053, 091, 002, 011, 022, 040, 035},
	{0, 000, 000},
	{16, 073, 001, 074, 001, 075, 001, 077, 001, 079, 001, 083, 001, 084, 001, 091, 001},
	{16, 037, 037, 042, 042, 053, 053, 062, 062, 007, 007, 010, 010, 011, 011, 015, 015},
	{16, 003, 001, 028, 001, 031, 001, 055, 001, 066, 001, 097, 001, 123, 001, 118, 001},
	{16, 009, 001, 012, 001, 026, 096, 030, 096, 032, 001, 037, 001, 057, 096, 071, 096},
	{2, 001, 001},
	{2, 001, 001},
	{14, 096, 067, 086, 070, 079, 074, 070, 086, 061, 098, 075, 075, 075, 091},
	{16, 037, 037, 042, 042, 053, 053, 062, 062, 007, 007, 010, 010, 011, 011, 015, 015},
	{16, 051, 001, 058, 008, 060, 001, 068, 008, 002, 001, 013, 008, 022, 001, 036, 008},
	{16, 013, 118, 024, 118, 031, 093, 032, 092, 045, 092, 113, 092, 119, 113, 122, 113},
	{16, 076, 008, 032, 008, 043, 008, 067, 008, 011, 011, 008, 090, 002, 002, 083, 013},
	{2, 003, 001},
	{16, 050, 001, 047, 001, 044, 096, 040, 096, 039, 001, 030, 001, 028, 096, 009, 096},
	{16, 062, 037, 078, 038, 002, 062, 003, 087, 002, 078, 113, 078, 119, 062, 007, 078},
	{16, 122, 001, 123, 001, 125, 001, 010, 001, 024, 001, 037, 001, 055, 001, 066, 001},
	{2, 001, 001},
	{16, 074, 039, 072, 039, 075, 039, 079, 039, 083, 036, 084, 036, 089, 035, 091, 035},
	{16, 037, 037, 042, 042, 053, 053, 062, 062, 007, 007, 010, 010, 011, 011, 015, 015},
	{16, 067, 001, 072, 001, 075, 001, 083, 001, 091, 001, 101, 001, 109, 001, 020, 001},
	{6, 056, 056, 049, 049, 026, 124},
	{16, 038, 009, 055, 023, 061, 074, 071, 087, 091, 087, 098, 114, 102, 119, 111, 003},
	{16, 053, 032, 015, 032, 045, 032, 034, 030, 065, 032, 014, 032, 012, 032, 043, 032},
	{16, 051, 001, 058, 001, 060, 001, 068, 001, 002, 001, 013, 001, 022, 001, 036, 001},
	{2, 001, 001},
	{2, 001, 001},
	{16, 112, 001, 116, 001, 117, 001, 024, 001, 030, 001, 035, 001, 036, 001, 040, 001},
	{16, 051, 001, 058, 008, 060, 001, 068, 008, 002, 001, 013, 008, 022, 001, 036, 008},
	{16, 052, 039, 009, 039, 017, 001, 021, 001, 033, 000, 037, 000, 041, 029, 056, 029},
	{16, 057, 008, 008, 017, 043, 021, 054, 038, 067, 008, 037, 078, 065, 079, 025, 078},
	{16, 036, 001, 035, 001, 017, 001, 011, 001, 116, 001, 113, 001, 101, 001, 092, 001},
	{2, 001, 006},
	{0, 000, 000},
	{16, 037, 037, 042, 042, 053, 053, 062, 062, 007, 007, 010, 010, 011, 011, 015, 015},
	{16, 109, 001, 030, 008, 095, 001, 084, 008, 083, 001, 072, 008, 071, 001, 052, 008},
	{16, 097, 096, 088, 064, 090, 096, 093, 064, 097, 096, 099, 081, 102, 114, 114, 001},
	{16, 002, 039, 009, 039, 017, 001, 021, 001, 033, 000, 037, 000, 041, 029, 056, 029},
	{0, 000, 000},
	{2, 001, 001},
	{12, 002, 035, 036, 002, 051, 053, 091, 002, 011, 022, 040, 035},
	{16, 094, 001, 101, 001, 116, 001, 117, 001, 004, 001, 025, 001, 030, 001, 037, 001},
	{16, 091, 038, 115, 043, 085, 006, 079, 007, 078, 008, 077, 018, 079, 018, 086, 024},
	{2, 026, 026},
	{16, 012, 001, 019, 096, 031, 064, 025, 096, 038, 001, 051, 096, 057, 001, 066, 096},
	{16, 067, 001, 068, 096, 072, 001, 074, 008, 075, 096, 076, 008, 079, 001, 084, 096},
	{12, 001, 003, 008, 007, 008, 010, 008, 016, 023, 031, 040, 044},
	{2, 001, 001},
	{16, 037, 037, 042, 042, 053, 053, 062, 062, 007, 007, 010, 010, 011, 011, 015, 015},
	{18, 092, 092, 081, 081, 067, 067, 066, 066, 061, 061, 053, 053, 051, 051, 047, 047, 043, 043},
	{16, 054, 001, 058, 001, 066, 001, 072, 001, 075, 001, 087, 001, 101, 001, 036, 001},
	{16, 041, 010, 041, 020, 049, 011, 056, 123, 110, 113, 112, 116, 114, 118, 119, 101},
	{2, 001, 001},
	{2, 001, 001},
	{16, 037, 037, 042, 042, 053, 053, 062, 062, 007, 007, 010, 010, 011, 011, 015, 015},
	{16, 119, 001, 122, 001, 008, 001, 010, 001, 013, 001, 025, 001, 027, 001, 032, 001},
	{16, 036, 001, 040, 001, 043, 001, 053, 001, 072, 001, 075, 001, 095, 001, 101, 001},
	{2, 001, 001},
	{16, 037, 037, 031, 031, 023, 023, 022, 022, 007, 007, 124, 124, 114, 114, 112, 112},
	{0, 000, 000},
	{2, 001, 001},
	{2, 001, 001},
	{16, 051, 001, 058, 008, 060, 001, 068, 008, 002, 001, 013, 008, 022, 001, 036, 008},
	{0, 000, 000},
	{2, 112, 020},
	{2, 000, 001},
	{2, 000, 001},
	{2, 000, 001},
	{2, 000, 001},
	{16, 081, 008, 032, 008, 043, 008, 067, 008, 011, 011, 008, 090, 002, 002, 083, 013},
	{2, 001, 001},
	{16, 058, 001, 069, 001, 075, 077, 018, 001, 032, 001, 045, 045, 013, 001, 034, 001},
	{16, 058, 001, 069, 001, 075, 077, 018, 001, 032, 001, 045, 045, 013, 001, 034, 001},
	{16, 067, 076, 068, 076, 078, 076, 002, 076, 016, 076, 018, 076, 025, 076, 045, 088},
	{16, 061, 008, 032, 008, 043, 008, 067, 008, 011, 011, 008, 090, 002, 002, 083, 013},
	{0, 000, 000},
	{0, 000, 000},
	{2, 001, 001},
	{2, 036, 036},
	{0, 000, 000},
	{0, 000, 000}
};

new const EVF::VehicleSeats[MAX_VEHICLE_MODELS] = {
	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,
	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,
	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,
	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
};

new const EVF::VehicleDoors[MAX_VEHICLE_MODELS] = {
	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,
	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,
	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,
	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
};

new const EVF::ComponentPrice[][] = {
	{1005, 150},	{1004, 100},	{1012, 250},	{1011, 220},
	{1143, 150},	{1145, 100},	{1020, 250},	{1021, 200},
	{1022, 150},	{1019, 300},	{1018, 350},	{1013, 100},
	{1024, 50},		{1008, 500},	{1009, 200},	{1010, 1000},
	{1006, 80},		{1001, 550},	{1014, 400},	{1002, 200},
	{1023, 350},	{1015, 500},	{1016, 200},	{1003, 250},
	{1000, 400},	{1007, 500},	{1017, 500},	{1046, 710},
	{1045, 510},	{1153, 1200},	{1152, 910},	{1150, 1090},
	{1151, 840},	{1054, 210},	{1053, 130},	{1049, 810},
	{1050, 620},	{1047, 670},	{1048, 530},	{1065, 850},
	{1066, 750},	{1160, 1050},	{1173, 950},	{1159, 1050},
	{1161, 950},	{1067, 250},	{1068, 200},	{1162, 650},
	{1158, 550},	{1069, 550},	{1070, 450},	{1034, 790},
	{1037, 690},	{1171, 990},	{1172, 900},	{1149, 1000},
	{1148, 890},	{1038, 190},	{1035, 150},	{1147, 600},
	{1146, 490},	{1036, 500},	{1039, 390},	{1064, 830},
	{1059, 720},	{1155, 1030},	{1157, 930},	{1154, 1030},
	{1156, 920},	{1055, 230},	{1061, 180},	{1058, 620},
	{1060, 530},	{1056, 520},	{1057, 430},	{1028, 770},
	{1029, 680},	{1169, 970},	{1170, 880},	{1141, 980},
	{1140, 870},	{1032, 170},	{1033, 120},	{1138, 580},
	{1139, 470},	{1026, 480},	{1031, 370},	{1092, 750},
	{1089, 650},	{1166, 950},	{1165, 850},	{1168, 950},
	{1167, 850},	{1088, 150},	{1091, 100},	{1164, 550},
	{1163, 450},	{1090, 450},	{1093, 350},	{1128, 3340},
	{1103, 3250},	{1184, 2150},	{1183, 2040},	{1182, 2130},
	{1181, 2050},	{1104, 1610},	{1105, 1540},	{1108, 780},
	{1126, 3340},	{1127, 3250},	{1179, 2150},	{1185, 2040},
	{1180, 2130},	{1178, 2050},	{1122, 780},	{1106, 780},
	{1100, 940},	{1123, 860},	{1125, 1120},	{1130, 3380},
	{1131, 3290},	{1189, 2200},	{1188, 2080},	{1187, 2175},
	{1186, 2095},	{1129, 1650},	{1132, 1590},	{1133, 830},
	{1044, 500},	{1043, 500},	{1174, 1000},	{1175, 900},
	{1176, 1000},	{1177, 900},	{1042, 1000},	{1113, 3340},
	{1114, 3250},	{1117, 2040},	{1115, 2130},	{1116, 2050},
	{1109, 1610},	{1110, 1540},	{1118, 780},	{1119, 940},
	{1136, 1000},	{1135, 1500},	{1191, 1040},	{1190, 1200},
	{1192, 940},	{1193, 1100},	{1134, 800},	{1079, 1030},
	{1075, 980},	{1077, 1620},	{1083, 1560},	{1082, 820},
	{1085, 770},	{1074, 1030},	{1081, 1230},	{1080, 900},
	{1073, 1100},	{1078, 1200},	{1076, 1560},	{1084, 1350},
	{1025, 1000},	{1096, 1000},	{1097, 620},	{1098, 1140},
	{1086, 100},	{1087, 1500}
};

new const EVF::ValidComponent[][] = {
	{400, 1024, 1021, 1020, 1019, 1018, 1013, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{401, 1145, 1144, 1143, 1142, 1020, 1019, 1017, 1013, 1007, 1006, 1005, 1004, 1003, 1001, 0000, 0000, 0000, 0000},
	{402, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{403, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{404, 1021, 1020, 1019, 1017, 1016, 1013, 1007, 1002, 1000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{405, 1023, 1021, 1020, 1019, 1018, 1014, 1001, 1000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{406, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{407, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{408, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{409, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{410, 1024, 1023, 1021, 1020, 1019, 1017, 1013, 1007, 1003, 1001, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{411, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{412, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{413, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{414, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{415, 1023, 1019, 1018, 1017, 1007, 1003, 1001, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{416, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{417, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{418, 1021, 1020, 1016, 1006, 1002, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{419, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{420, 1021, 1019, 1005, 1004, 1003, 1001, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{421, 1023, 1021, 1020, 1019, 1018, 1016, 1014, 1000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{422, 1021, 1020, 1019, 1017, 1013, 1007, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{423, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{424, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{425, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{426, 1021, 1019, 1006, 1005, 1004, 1003, 1001, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{427, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{428, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{429, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{430, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{431, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{432, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{433, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{434, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{435, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{436, 1022, 1021, 1020, 1019, 1017, 1013, 1007, 1006, 1003, 1001, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{437, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{438, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{439, 1145, 1144, 1143, 1142, 1023, 1017, 1013, 1007, 1003, 1001, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{440, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{441, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{442, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{443, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{444, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{445, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{446, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{447, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{448, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{449, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{450, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{451, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{452, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{453, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{454, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{455, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{456, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{457, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{458, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{459, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{460, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{461, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{462, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{463, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{464, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{465, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{466, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{467, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{468, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{469, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{470, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{471, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{472, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{473, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{474, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{475, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{476, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{477, 1021, 1020, 1019, 1018, 1017, 1007, 1006, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{478, 1024, 1022, 1021, 1020, 1013, 1012, 1005, 1004, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{479, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{480, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{481, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{482, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{483, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{484, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{485, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{486, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{487, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{488, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{489, 1024, 1020, 1019, 1018, 1016, 1013, 1006, 1005, 1004, 1002, 1000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{490, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{491, 1145, 1144, 1143, 1142, 1023, 1021, 1020, 1019, 1018, 1017, 1014, 1007, 1003, 0000, 0000, 0000, 0000, 0000},
	{492, 1016, 1006, 1005, 1004, 1000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{493, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{494, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{495, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{496, 1143, 1142, 1023, 1020, 1019, 1017, 1011, 1007, 1006, 1003, 1002, 1001, 0000, 0000, 0000, 0000, 0000, 0000},
	{497, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{498, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{499, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{500, 1024, 1021, 1020, 1019, 1013, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{501, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{502, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{503, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{504, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{505, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{506, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{507, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{508, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{509, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{510, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{511, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{512, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{513, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{514, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{515, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{516, 1021, 1020, 1019, 1018, 1017, 1016, 1015, 1007, 1004, 1002, 1000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{517, 1145, 1144, 1143, 1142, 1023, 1020, 1019, 1018, 1017, 1016, 1007, 1003, 1002, 0000, 0000, 0000, 0000, 0000},
	{518, 1145, 1144, 1143, 1142, 1023, 1020, 1018, 1017, 1013, 1007, 1006, 1005, 1003, 1001, 0000, 0000, 0000, 0000},
	{519, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{520, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{521, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{522, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{523, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{524, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{525, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{526, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{527, 1021, 1020, 1018, 1017, 1015, 1014, 1007, 1001, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{528, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{529, 1023, 1020, 1019, 1018, 1017, 1012, 1011, 1007, 1006, 1003, 1001, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{530, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{531, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{532, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{533, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{534, 1185, 1180, 1179, 1178, 1127, 1126, 1125, 1124, 1123, 1122, 1106, 1101, 1100, 0000, 0000, 0000, 0000, 0000},
	{535, 1121, 1120, 1119, 1118, 1117, 1116, 1115, 1114, 1113, 1110, 1109, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{536, 1184, 1183, 1182, 1181, 1128, 1108, 1107, 1105, 1104, 1103, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{537, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{538, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{539, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{540, 1145, 1144, 1143, 1142, 1024, 1023, 1020, 1019, 1018, 1017, 1007, 1006, 1004, 1001, 0000, 0000, 0000, 0000},
	{541, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{542, 1145, 1144, 1021, 1020, 1019, 1018, 1015, 1014, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{543, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{544, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{545, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{546, 1145, 1144, 1143, 1142, 1024, 1023, 1019, 1018, 1017, 1007, 1006, 1004, 1002, 1001, 0000, 0000, 0000, 0000},
	{547, 1143, 1142, 1021, 1020, 1019, 1018, 1016, 1003, 1000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{548, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{549, 1145, 1144, 1143, 1142, 1023, 1020, 1019, 1018, 1017, 1012, 1011, 1007, 1003, 1001, 0000, 0000, 0000, 0000},
	{550, 1145, 1144, 1143, 1142, 1023, 1020, 1019, 1018, 1006, 1005, 1004, 1003, 1001, 0000, 0000, 0000, 0000, 0000},
	{551, 1023, 1021, 1020, 1019, 1018, 1016, 1006, 1005, 1003, 1002, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{552, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{553, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{554, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{555, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{556, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{557, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{558, 1168, 1167, 1166, 1165, 1164, 1163, 1095, 1094, 1093, 1092, 1091, 1090, 1089, 1088, 0000, 0000, 0000, 0000},
	{559, 1173, 1162, 1161, 1160, 1159, 1158, 1072, 1071, 1070, 1069, 1068, 1067, 1066, 1065, 0000, 0000, 0000, 0000},
	{560, 1170, 1169, 1141, 1140, 1139, 1138, 1033, 1032, 1031, 1030, 1029, 1028, 1027, 1026, 0000, 0000, 0000, 0000},
	{561, 1157, 1156, 1155, 1154, 1064, 1063, 1062, 1061, 1060, 1059, 1058, 1057, 1056, 1055, 0000, 0000, 0000, 0000},
	{562, 1172, 1171, 1149, 1148, 1147, 1146, 1041, 1040, 1039, 1038, 1037, 1036, 1035, 1034, 0000, 0000, 0000, 0000},
	{563, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{564, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{565, 1153, 1152, 1151, 1150, 1054, 1053, 1052, 1051, 1050, 1049, 1048, 1047, 1046, 1045, 0000, 0000, 0000, 0000},
	{566, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{567, 1189, 1188, 1187, 1186, 1133, 1132, 1131, 1130, 1129, 1102, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{568, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{569, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{570, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{571, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{572, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{573, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{574, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{575, 1177, 1176, 1175, 1174, 1099, 1044, 1043, 1042, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{576, 1193, 1192, 1191, 1190, 1137, 1136, 1135, 1134, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{577, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{578, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{579, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{580, 1023, 1020, 1018, 1017, 1007, 1006, 1001, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{581, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{582, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{583, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{584, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{585, 1145, 1144, 1143, 1142, 1020, 1019, 1018, 1013, 1006, 1001, 1023, 1003, 1007, 1017, 0000, 0000, 0000, 0000},
	{586, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{587, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{588, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{589, 1145, 1144, 1024, 1020, 1018, 1017, 1016, 1013, 1007, 1006, 1005, 1004, 1000, 0000, 0000, 0000, 0000, 0000},
	{590, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{591, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{592, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{593, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{594, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{595, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{596, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{597, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{598, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{599, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{600, 1022, 1020, 1018, 1017, 1013, 1007, 1006, 1005, 1004, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{601, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{602, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{603, 1145, 1144, 1143, 1142, 1024, 1023, 1020, 1019, 1018, 1017, 1007, 1006, 1001, 0000, 0000, 0000, 0000, 0000},
	{604, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{605, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{606, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{607, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{608, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{609, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{610, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000},
	{611, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000}
};

new const EVF::ComponentTypes[][] = {
	"Spoiler",
	"Hood",
	"Roof",
	"Sideskirt",
	"Lamps",
	"Nitro",
	"Exhaust",
	"Wheels",
	"Stereo",
	"Hydraulics",
	"Front Bumper",
	"Rear Bumber",
	"Right Vent",
	"Left Vent"
};

new const EVF::ComponentNames[][] = {
	"Pro",
	"Win",
	"Drag",
	"Alpha",
	"Champ Scoop",
	"Fury Scoop",
	"Roof Scoop",
	"Right Sideskirt",
	"5x Nitro",
	"2x Nitro",
	"10x Nitro",
	"Race Scoop",
	"Worx Scoop",
	"Round Fog",
	"Champ",
	"Race",
	"Worx",
	"Left Sideskirt",
	"Upswept",
	"Twin",
	"Large",
	"Medium",
	"Small",
	"Fury",
	"Square Fog",
	"Offroad",
	"Right Alien Sideskirt",
	"Left Alien Sideskirt",
	"Alien",
	"X-Flow",
	"Left X-Flow Sideskirt",
	"Right X-Flow Sideskirt",
	"Alien Roof Vent",
	"X-Flow Roof Vent",
	"Alien",
	"X-Flow Roof Vent",
	"Right Alien Sideskirt",
	"X-Flow",
	"Alien Roof Vent",
	"Left X-Flow Sideskirt",
	"Left Alien Sideskirt",
	"Right X-Flow Sideskirt",
	"Right Chrome Sideskirt",
	"Slamin",
	"Chrome",
	"X-Flow",
	"Alien",
	"Right Alien Sideskirt",
	"Right X-Flow Sideskirt",
	"Alien",
	"X-Flow",
	"Left Alien Sideskirt",
	"Left X-Flow Sideskirt",
	"X-Flow",
	"Alien",
	"Alien",
	"Right Alien Sideskirt",
	"Right X-Flow Sideskirt",
	"Alien",
	"X-Flow",
	"X-Flow",
	"X-Flow",
	"Left Alien Sideskirt",
	"Left X-Flow Sideskirt",
	"Alien",
	"Alien",
	"X-Flow",
	"Alien",
	"X-Flow",
	"Right Alien Sideskirt",
	"Right X-Flow Sideskirt",
	"Left Alien Sideskirt",
	"Left X-Flow Sideskirt",
	"Shadow",
	"Mega",
	"Rimshine",
	"Wires",
	"Classic",
	"Twist",
	"Cutter",
	"Switch",
	"Grove",
	"Import",
	"Dollar",
	"Trance",
	"Atomic",
	"Stereo",
	"Hydraulics",
	"Alien",
	"X-Flow",
	"Right Alien Sideskirt",
	"X-Flow",
	"Alien",
	"Right X-Flow Sideskirt",
	"Left Alien Sideskirt",
	"Right X-Flow Sideskirt",
	"Ahab",
	"Virtual",
	"Access",
	"Left Chrome Sideskirt",
	"Chrome Grill",
	"Left Chrome Flames Sideskirt",
	"Left Chrome Strip Sideskirt",
	"Covertible",
	"Chrome",
	"Slamin",
	"Right Chrome Arches",
	"Left Chrome Strip Sideskirt",
	"Right Chrome Strip Sideskirt",
	"Chrome",
	"Slamin",
	"Little Sign?",
	"Little Sign?",
	"Chrome",
	"Slamin",
	"Chrome",
	"Slamin",
	"Chrome",
	"Right Chrome Trim Sideskirt",
	"Right Wheelcovers Sideskirt",
	"Left Chrome Trim Sideskirt",
	"Left Wheelcovers Sideskirt",
	"Right Chrome Flames Sideskirt",
	"Bullbar Chrome Bars",
	"Left Chrome Arches Sideskirt",
	"Bullbar Chrome Lights",
	"Chrome Exhaust",
	"Slamin Exhaust",
	"Vinyl Hardtop",
	"Chrome",
	"Hardtop",
	"Softtop",
	"Slamin",
	"Right Chrome Strip Sideskirt",
	"Right Chrome Strip Sideskirt",
	"Slamin",
	"Chrome",
	"Left Chrome Strip Sideskirt",
	"Alien",
	"X-Flow",
	"X-Flow",
	"Alien",
	"Left Oval Vents",
	"Right Oval Vents",
	"Left Square Vents",
	"Right Square Vents",
	"X-Flow",
	"Alien",
	"X-Flow",
	"Alien",
	"Alien",
	"X-Flow",
	"X-Flow",
	"Alien",
	"Alien",
	"Alien",
	"X-Flow",
	"X-Flow",
	"X-Flow",
	"Alien",
	"Alien",
	"X-Flow",
	"Alien",
	"X-Flow",
	"Alien",
	"X-Flow",
	"Alien",
	"X-Flow",
	"Alien",
	"Alien",
	"X-Flow",
	"Alien",
	"X-Flow",
	"X-Flow",
	"Chrome",
	"Slamin",
	"Chrome",
	"Slamin",
	"Slamin",
	"Chrome",
	"Chrome",
	"Slamin",
	"Chrome",
	"Slamin",
	"Chrome",
	"Slamin",
	"Slamin",
	"Chrome",
	"Slamin",
	"Chrome",
	"Slamin",
	"Chrome",
	"Chrome",
	"Slamin"
};

#if defined _3D_Tryg
	#define EVF_WeaponDamage	Tryg3D_WeaponDamage
#else
	new const Float:EVF::WeaponDamage[] = {
		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,
		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
	};
#endif

#if !defined EVF_VehicleName
	new const EVF::VehicleName[MAX_VEHICLE_MODELS][] = {
		"Landstalker", "Bravura", "Buffalo", "Linerunner", "Perrenial", "Sentinel", "Dumper", "Firetruck", "Trashmaster", "Stretch",
		"Manana", "Infernus", "Voodoo", "Pony", "Mule", "Cheetah", "Ambulance", "Leviathan", "Moonbeam", "Esperanto", "Taxi", 
		"Washington", "Bobcat", "Mr Whoopee", "BF Injection", "Hunter", "Premier", "Enforcer", "Securicar", "Banshee", "Predator",
		"Bus", "Rhino", "Barracks", "Hotknife", "Trailer 1", "Previon", "Coach", "Cabbie", "Stallion", "Rumpo", "RC Bandit", "Romero",
		"Packer", "Monster", "Admiral", "Squalo", "Seasparrow", "Pizzaboy", "Tram", "Trailer 2", "Turismo", "Speeder", "Reefer", "Tropic",
		"Flatbed", "Yankee", "Caddy", "Solair", "Berkley's RC Van", "Skimmer", "PCJ-600", "Faggio", "Freeway", "RC Baron", "RC Raider",
		"Glendale", "Oceanic", "Sanchez", "Sparrow", "Patriot", "Quad", "Coastguard", "Dinghy", "Hermes", "Sabre", "Rustler", "ZR-350",
		"Walton", "Regina", "Comet", "BMX", "Burrito", "Camper", "Marquis", "Baggage", "Dozer", "Maverick", "News Chopper", "Rancher",
		"FBI Rancher", "Virgo", "Greenwood", "Jetmax", "Hotring", "Sandking", "Blista Compact", "Police Maverick", "Boxville", "Benson",
		"Mesa", "RC Goblin", "Hotring Racer A", "Hotring Racer B", "Bloodring Banger", "Rancher", "Super GT", "Elegant", "Journey",
		"Bike", "Mountain Bike", "Beagle", "Cropdust", "Stunt", "Tanker", "Roadtrain", "Nebula", "Majestic", "Buccaneer", "Shamal",
		"Hydra", "FCR-900", "NRG-500", "HPV1000", "Cement Truck", "Tow Truck", "Fortune", "Cadrona", "FBI Truck", "Willard", "Forklift",
		"Tractor", "Combine", "Feltzer", "Remington", "Slamvan", "Blade", "Freight", "Streak", "Vortex", "Vincent", "Bullet", "Clover",
		"Sadler", "Firetruck LA", "Hustler", "Intruder", "Primo", "Cargobob", "Tampa", "Sunrise", "Merit", "Utility", "Nevada", "Yosemite",
		"Windsor", "Monster A", "Monster B", "Uranus", "Jester", "Sultan", "Stratum", "Elegy", "Raindance", "RC Tiger", "Flash", "Tahoma",
		"Savanna", "Bandito", "Freight Flat", "Streak Carriage", "Kart", "Mower", "Duneride", "Sweeper", "Broadway", "Tornado", "AT-400",
		"DFT-30", "Huntley", "Stafford", "BF-400", "Newsvan", "Tug", "Trailer 3", "Emperor", "Wayfarer", "Euros", "Hotdog", "Club",
		"Freight Carriage", "Trailer 3", "Andromada", "Dodo", "RC Cam", "Launch", "Police Car (LSPD)", "Police Car (SFPD)",
		"Police Car (LVPD)", "Police Ranger", "Picador", "S.W.A.T. Tank", "Alpha", "Phoenix", "Glendale", "Sadler", "Luggage Trailer A",
		"Luggage Trailer B", "Stair Trailer", "Boxville", "Farm Plow", "Utility Trailer"
	};
#endif

#if (defined _FoX_Foreach)
	#define EVF_Foreach(%0) 					FoxForeach(%0,Character)
#elseif (defined _FOREACH_LOCAL_VERSION)
	#define EVF_Foreach(%0)						foreach(new %0 : Character)
#else
	#define EVF_Foreach(%0)						for(new %0 = 0, p_%0 = MAX_PLAYERS; %0 <= p_%0; %0++) if(IsPlayerConnected(%0))
#endif

#if (defined _FOREACH_LOCAL_VERSION && defined Vehicle@YSII_Sg)
	#define EVF_ForeachVehicle(%0)				foreach(new %0 : Vehicle)
#elseif (defined _FOREACH_LOCAL_VERSION && defined Vehicles@YSII_Sg)
	#define EVF_ForeachVehicle(%0)				foreach(new %0 : Vehicles)
#else
	#define EVF_ForeachVehicle(%0) 				for(new %0 = 1, %0_upp = MAX_VEHICLES; %0 <= %0_upp; %0++) if(IsValidVehicle(%0))
#endif

#define SetVehiclePropertyValue(%0,%1,%2)		EVF_VehicleProperty[(%0)][(%1)] = (%2)
#define GetVehiclePropertyValue(%0,%1)			EVF_VehicleProperty[(%0)][(%1)]
#define EVF_GetActiveCount() 					GetSVarInt("ADM:EVF:ACTIVE")
#define IsValidVehicleModelID(%0)				(400 <= (%0) <= 611)
#define SetVehicleInterior(%0,%1)				LinkVehicleToInterior(%0,%1)
#define IsValidVehicleDoor(%0,%1) 				(!((%1) > EVF::VehicleDoors[(GetVehicleModel(%0)-400)]))
#define RemoveVehiclePaintjob(%0)				ChangeVehiclePaintjob((%0),RESET_PAINTJOB_ID)
#define RestoreVehicleHorn(%0)					SetVehiclePropertyValue((%0),e_VEHICLE_HORN,0)
#define GetVehicleModelSeats(%0)				EVF::VehicleSeats[((%0)-400)]
#define GetVehicleSeats(%0)						GetVehicleModelSeats(GetVehicleModel(%0))
#define GetVehicleModelName(%0)					EVF::VehicleName[((%0)-400)]
#define GetVehicleName(%0)						GetVehicleModelName(GetVehicleModel(%0))
#define GetVehicleModelTopSpeed(%0)				EVF::TopSpeed[((%0)-400)]
#define GetVehicleTopSpeed(%0)					GetVehicleModelTopSpeed(GetVehicleModel(%0))
#define GetVehicleModelDoorAmount(%0)			EVF::VehicleDoors[((%0)-400)]
#define GetVehicleDoorAmount(%0)				GetVehicleModelDoorAmount(GetVehicleModel(%0))
#define SetVehicleSpeedCap(%0,%1) 				SetVehiclePropertyValue((%0),e_VEHICLE_SPEED_CAP,(_:%1))
#define GetVehicleSpeedCap(%0)					Float:GetVehiclePropertyValue((%0),e_VEHICLE_SPEED_CAP)
#define DisableVehicleSpeedCap(%0)				SetVehicleSpeedCap((%0),0)
#define SetVehicleHorn(%0,%1)					SetVehiclePropertyValue((%0),e_VEHICLE_HORN,(%1))
#define GetVehicleHorn(%0)						GetVehiclePropertyValue((%0),e_VEHICLE_HORN)
#define GetVehicleFuel(%0)						GetVehiclePropertyValue((%0),e_VEHICLE_FUEL)
#define SetVehicleFuel(%0,%1)					SetVehiclePropertyValue((%0),e_VEHICLE_FUEL,(%1))
#define IsVehicleFuelToggled(%0)				GetVehiclePropertyValue((%0),e_VEHICLE_FUEL_USE)
#define ToggleVehicleFuel(%0,%1)				SetVehiclePropertyValue((%0),e_VEHICLE_FUEL_USE,(_:%1))
#define IsVehicleSticky(%0)						GetVehiclePropertyValue((%0),e_VEHICLE_STICKY)
#define ToggleVehicleSticky(%0,%1)				SetVehiclePropertyValue((%0),e_VEHICLE_STICKY,(_:%1))
#define IsUnoccupiedDamageToggled(%0)			GetVehiclePropertyValue((%0),e_VEHICLE_UNO_DAMAGE)
#define ToggleUnoccupiedVehicleDamage(%0,%1)	SetVehiclePropertyValue((%0),e_VEHICLE_UNO_DAMAGE,(_:%1))
#define IsPetrolCapDestroyToggled(%0)			GetVehiclePropertyValue((%0),e_VEHICLE_CAP_DAMAGE)
#define ToggleVehiclePetrolCapDestroy(%0,%1)	SetVehiclePropertyValue((%0),e_VEHICLE_CAP_DAMAGE,(_:%1))
#define GetVehicleBomb(%0)						GetVehiclePropertyValue((%0),e_VEHICLE_BOMB)
#define IsVehicleBombed(%0)						(GetVehicleBomb(%0) > 0)
#define RemoveVehicleBomb(%0)					SetVehicleBomb((%0),0)
#define IsToggledVehicleBulletproof(%0)			GetVehiclePropertyValue((%0),e_VEHICLE_BULLETPROOF)
#define ToggleVehicleBulletproof(%0,%1)			SetVehiclePropertyValue((%0),e_VEHICLE_BULLETPROOF,(_:%1))

#if defined EVF_Streamer
	#define EVF_IsCarBlinking(%0)				(EVF::BlinkSide[(%0)] != EVF_CAR_BLINK_NONE)
	#define EVF_ToggleVehicleBlinking(%0)		EVF::VehicleBlinking = (%0)
	#define EVF_IsToggledVehicleBlinking()		EVF::VehicleBlinking
#endif


//Keys
#define EVF_KeyPressed(%0) 						(((newkeys & (%0)) == (%0)) && ((oldkeys & (%0)) != (%0)))
#define EVF_KeyReleased(%0)						(((newkeys & (%0)) != (%0)) && ((oldkeys & (%0)) == (%0)))
#define EVF_KeyHolding(%0) 						((newkeys & (%0)) == (%0))

//extra names:
#define GetVehicleDoorAmountByModelid			GetVehicleModelDoorAmount
#define ResetVehiclePaintjob					RemoveVehiclePaintjob
#define GetVehicleDriverID						GetVehicleDriver
#define SetVehicleColor 						ChangeVehicleColor
#define MAX_VEHICLE_MODEL						MAX_VEHICLE_MODELS
#define OnPlayerShootVehicle					OnPlayerShotVehicle

forward OnVehicleCreated(vehicleid);
forward OnVehicleDestroyed(vehicleid);
forward OnTrailerHooked(playerid,vehicleid,trailerid);
forward OnTrailerUnhooked(playerid,vehicleid,trailerid);
forward OnVehicleBombDeactivate(vehicleid);
forward OnVehicleBombExplode(vehicleid);
forward OnPlayerShotVehicle(playerid,vehicleid,weaponid,Float:amount,bodypart);
forward OnPlayerEditVehicle(playerid,vehicleid,response,Float:fX,Float:fY,Float:fZ,Float:fRotZ);
forward OnPlayerEditVehicleObject(playerid,vehicleid,response,Float:x,Float:y,Float:z,Float:rx,Float:ry,Float:rz);
forward OnPlayerReachSpeedCapLimit(playerid,vehicleid,Float:speed);
forward OnVehicleBombActivate(vehicleid);
forward OnVehicleModEx(playerid,vehicleid,componentid,price,illegal);
forward OnVehicleFuelChange(vehicleid,newfuel,oldfuel);

#if defined OnVehiclePosChange
	forward OnVehiclePosChange(vehicleid,Float:newx,Float:newy,Float:newz,Float:newangle,Float:oldx,Float:oldy,Float:oldz,Float:oldangle);
#endif

#if defined OnVehicleVelocityChange
	forward OnVehicleVelocityChange(vehicleid,Float:newx,Float:newy,Float:newz,Float:oldx,Float:oldy,Float:oldz);
#endif

#if defined OnVehicleHealthChange
	forward OnVehicleHealthChange(vehicleid,Float:newhealth,Float:oldhealth);
#endif

EVF::Function:: ResetVehicleProperties(vehicleid){
	EVF::VehicleTrailerID[vehicleid] = INVALID_VEHICLE_ID;
	for(new i = 0; i < _:(EVF::VehicleProperties); i++){
		EVF::VehicleProperty[vehicleid][EVF::VehicleProperties:i] = 0;
	}
}

EVF::Function:: GetComponentName(componentid,name[],len = sizeof(name)){
	if(MIN_VEHICLE_COMPONENT_ID <= componentid <= MAX_VEHICLE_COMPONENT_ID){
		componentid -= MIN_VEHICLE_COMPONENT_ID;
		format(name,len,"%s",EVF::ComponentNames[componentid]);
		return 1;
	}
	name[0] = '\0';
	return 0;
}

EVF::Function:: GetComponentTypeName(component){
    new slotid = GetVehicleComponentType(component), EVF::name[32];
    if(slotid >= 0 && slotid <= 13){
		format(EVF::name,sizeof(EVF::name),"%s",EVF::ComponentTypes[slotid]);
	}
    return EVF::name;
}

EVF::Function:: EVF::IsPlayerInModShop(playerid){
	if(IsPlayerConnected(playerid)) return EVF::ModShopStatus[playerid];
	return 0;
}

EVF::Function:: EVF::IsTrailer(vehicleid){
	switch(GetVehicleModel(vehicleid)){
		case 435, 450, 584, 591, 606: return 1;
	}
	return 0;
}

#if defined EVF_Streamer
	EVF::Function:: EVF::DisableCarBlinking(vehicleid){
		if(!IsValidVehicle(vehicleid)) return 0;
		if(!EVF::IsCarBlinking(vehicleid)) return 0;
		if(IsValidDynamicObject(EVF::Blink[vehicleid][0])) DestroyDynamicObject(EVF::Blink[vehicleid][0]);
		if(IsValidDynamicObject(EVF::Blink[vehicleid][1])) DestroyDynamicObject(EVF::Blink[vehicleid][1]);
		if(IsValidDynamicObject(EVF::Blink[vehicleid][2])) DestroyDynamicObject(EVF::Blink[vehicleid][2]);
		if(IsValidDynamicObject(EVF::Blink[vehicleid][3])) DestroyDynamicObject(EVF::Blink[vehicleid][3]);
		EVF::Blink[vehicleid][0] = EVF::Blink[vehicleid][1] = STREAMER_TAG_OBJECT:INVALID_STREAMER_ID;
		EVF::Blink[vehicleid][2] = EVF::Blink[vehicleid][3] = STREAMER_TAG_OBJECT:INVALID_STREAMER_ID;
		EVF::BlinkSide[vehicleid] = EVF_CAR_BLINK_NONE;
		return 1;
	}
	
	EVF::Function:: EVF::SetCarBlinking(vehicleid,side,bool:skip=false){
		if(!IsValidVehicle(vehicleid)) return 0;
		if(EVF::IsCarBlinking(vehicleid) && !skip) return EVF::DisableCarBlinking(vehicleid);
		new id = GetVehicleModel(vehicleid)-400, trailerid, STREAMER_TAG_OBJECT:obj[4];

		if(!skip) EVF::BlinkSide[vehicleid] = side;

		GetVehicleZAngle(vehicleid,EVF::BlinkR[vehicleid]);

		if(id > -1){
			if(EVF::BlinkOffsetData[id][EVF::X] != 0.0){
				switch(side){
					case EVF_CAR_BLINK_LEFT: {
						obj[0] = CreateDynamicObject(19294,0.0,0.0,-9000.0,0.0,0.0,0.0);
						EVF::Blink[vehicleid][0] = obj[0];
					}
					case EVF_CAR_BLINK_RIGHT: {
						obj[2] = CreateDynamicObject(19294,0.0,0.0,0.0,0.0,0.0,0.0);
						EVF::Blink[vehicleid][2] = obj[2];
					}
				}
			}
			if((trailerid = GetVehicleTrailer(vehicleid)) != 0){
				if(EVF::IsTrailer(trailerid)){
					switch(side){
						case EVF_CAR_BLINK_LEFT: {
							obj[1] = CreateDynamicObject(19294,0.0,0.0,-9000.0,0.0,0.0,0.0);
							EVF::Blink[vehicleid][1] = obj[1];
						}
						case EVF_CAR_BLINK_RIGHT: {
							obj[3] = CreateDynamicObject(19294,0.0,0.0,0.0,0.0,0.0,0.0);
							EVF::Blink[vehicleid][3] = obj[3];
						}
					}
				}
			} else {
				if(EVF::BlinkOffsetData[id][EVF::rX] != 0.0){
					switch(side){
						case EVF_CAR_BLINK_LEFT: {
							obj[1] = CreateDynamicObject(19294,0.0,0.0,0.0,0.0,0.0,0.0);
							EVF::Blink[vehicleid][1] = obj[1];
						}
						case EVF_CAR_BLINK_RIGHT: {
							obj[3] = CreateDynamicObject(19294,0.0,0.0,0.0,0.0,0.0,0.0);
							EVF::Blink[vehicleid][3] = obj[3];
						}
					}
				}
			}

			switch(side){
				case EVF_CAR_BLINK_LEFT: {
					if(obj[0] != STREAMER_TAG_OBJECT:INVALID_STREAMER_ID){
						AttachDynamicObjectToVehicle(obj[0],vehicleid,EVF::BlinkOffsetData[id][EVF::X],EVF::BlinkOffsetData[id][EVF::Y],EVF::BlinkOffsetData[id][EVF::Z],0.0,0.0,0.0);
					}
					if(trailerid != 0){
						id = GetVehicleModel(trailerid)-400;
						AttachDynamicObjectToVehicle(obj[1],trailerid,EVF::BlinkOffsetData[id][EVF::rX],EVF::BlinkOffsetData[id][EVF::rY],EVF::BlinkOffsetData[id][EVF::rZ],0.0,0.0,0.0);
					} else {
						if(obj[1] != STREAMER_TAG_OBJECT:INVALID_STREAMER_ID){
							AttachDynamicObjectToVehicle(obj[1],vehicleid,EVF::BlinkOffsetData[id][EVF::rX],EVF::BlinkOffsetData[id][EVF::rY],EVF::BlinkOffsetData[id][EVF::rZ],0.0,0.0,0.0);
						}
					}
				}
				case EVF_CAR_BLINK_RIGHT: {
					if(obj[2] != STREAMER_TAG_OBJECT:INVALID_STREAMER_ID){
						AttachDynamicObjectToVehicle(obj[2],vehicleid,-EVF::BlinkOffsetData[id][EVF::X],EVF::BlinkOffsetData[id][EVF::Y],EVF::BlinkOffsetData[id][EVF::Z],0.0,0.0,0.0);
					}
					if(trailerid != 0){
						id = GetVehicleModel(trailerid)-400;
						AttachDynamicObjectToVehicle(obj[3],trailerid,-EVF::BlinkOffsetData[id][EVF::rX],EVF::BlinkOffsetData[id][EVF::rY],EVF::BlinkOffsetData[id][EVF::rZ],0.0,0.0,0.0);
					} else {
						if(obj[3] != STREAMER_TAG_OBJECT:INVALID_STREAMER_ID){
							AttachDynamicObjectToVehicle(obj[3],vehicleid,-EVF::BlinkOffsetData[id][EVF::rX],EVF::BlinkOffsetData[id][EVF::rY],EVF::BlinkOffsetData[id][EVF::rZ],0.0,0.0,0.0);
						}
					}
				}
				case EVF_CAR_BLINK_EMERGENCY: {
					if(obj[0] != STREAMER_TAG_OBJECT:INVALID_STREAMER_ID){
						AttachDynamicObjectToVehicle(obj[0],vehicleid,EVF::BlinkOffsetData[id][EVF::X],EVF::BlinkOffsetData[id][EVF::Y],EVF::BlinkOffsetData[id][EVF::Z],0.0,0.0,0.0);
					}
					if(trailerid != 0){
						id = GetVehicleModel(trailerid)-400;
						AttachDynamicObjectToVehicle(obj[1],trailerid,EVF::BlinkOffsetData[id][EVF::rX],EVF::BlinkOffsetData[id][EVF::rY],EVF::BlinkOffsetData[id][EVF::rZ],0.0,0.0,0.0);
					} else {
						if(obj[1] != STREAMER_TAG_OBJECT:INVALID_STREAMER_ID){
							AttachDynamicObjectToVehicle(obj[1],vehicleid,EVF::BlinkOffsetData[id][EVF::rX],EVF::BlinkOffsetData[id][EVF::rY],EVF::BlinkOffsetData[id][EVF::rZ],0.0,0.0,0.0);
						}
					}
					if(obj[2] != STREAMER_TAG_OBJECT:INVALID_STREAMER_ID){
						AttachDynamicObjectToVehicle(obj[2],vehicleid,-EVF::BlinkOffsetData[id][EVF::X],EVF::BlinkOffsetData[id][EVF::Y],EVF::BlinkOffsetData[id][EVF::Z],0.0,0.0,0.0);
					}
					if(trailerid != 0){
						id = GetVehicleModel(trailerid)-400;
						AttachDynamicObjectToVehicle(obj[3],trailerid,-EVF::BlinkOffsetData[id][EVF::rX],EVF::BlinkOffsetData[id][EVF::rY],EVF::BlinkOffsetData[id][EVF::rZ],0.0,0.0,0.0);
					} else {
						if(obj[3] != STREAMER_TAG_OBJECT:INVALID_STREAMER_ID){
							AttachDynamicObjectToVehicle(obj[3],vehicleid,-EVF::BlinkOffsetData[id][EVF::rX],EVF::BlinkOffsetData[id][EVF::rY],EVF::BlinkOffsetData[id][EVF::rZ],0.0,0.0,0.0);
						}
					}
				}
			}
		}
		return 1;
	}
#endif

EVF::Function:: IsValidComponentForVehicle(vehicleid,componentid){
	new modelid = GetVehicleModel(vehicleid);
	// Check for nitrous, wheels, and hydraulics.
	if((1008 <= componentid <= 1010) || (componentid == 1025) || (1073 <= componentid <= 1087) || (1096 <= componentid <= 1098)){
		switch (modelid){
			case 581, 523, 462, 521, 463, 522, 461, 448, 468, 586,
				 509, 481, 510, 472, 473, 493, 595, 484, 430, 453,
				 452, 446, 454, 590, 569, 537, 538, 570, 449: return false;
			default: return true;
		}
	} else {
		modelid -= 400;
		for(new i = 0; i < sizeof(EVF::ValidComponent[]); i++){
			if(EVF::ValidComponent[modelid][i] == componentid) return true;
		}
	}
	return false;
}

EVF::Function:: GetVehicleComponentPrice(componentid){
	for(new i = 0; i < sizeof(EVF::ComponentPrice); i++){
		if(EVF::ComponentPrice[i][0] == componentid){
			return EVF::ComponentPrice[i][1];
		}
	}
	return 0;
}
	
#if defined EVF_Streamer
	EVF::Function:: SetVehicleNeonLights(vehicleid,bool:enable = true,color = RED_NEON,slotid = 0){
		if(slotid < 0 || slotid >= MAX_VEHICLE_NEON_SLOT) return 0;
		if(!IsValidVehicle(vehicleid)) return 0;
		new modelid = GetVehicleModel(vehicleid);
		if(!IsValidVehicleModelID(modelid)) return 0;
		modelid -= 400;
		
		if(IsValidDynamicObject(EVF::VehicleNeon[vehicleid][slotid][0])) DestroyDynamicObject(EVF::VehicleNeon[vehicleid][slotid][0]);
		if(IsValidDynamicObject(EVF::VehicleNeon[vehicleid][slotid][1])) DestroyDynamicObject(EVF::VehicleNeon[vehicleid][slotid][1]);
		EVF::VehicleNeon[vehicleid][slotid][0] = EVF::VehicleNeon[vehicleid][slotid][1] = STREAMER_TAG_OBJECT:INVALID_STREAMER_ID;
		
		if(!enable) return 1;
		if(18647 <= color <= 18652){
			EVF::VehicleNeon[vehicleid][slotid][0] = CreateDynamicObject(color,0.0,0.0,0.0,0.0,0.0,0.0);
			EVF::VehicleNeon[vehicleid][slotid][1] = CreateDynamicObject(color,0.0,0.0,0.0,0.0,0.0,0.0);
			AttachDynamicObjectToVehicle(EVF::VehicleNeon[vehicleid][slotid][0],vehicleid,EVF::NeonOffsetData[modelid][EVF::NeonX], EVF::NeonOffsetData[modelid][EVF::NeonY],EVF::NeonOffsetData[modelid][EVF::NeonZ],0.0,0.0,0.0);
			AttachDynamicObjectToVehicle(EVF::VehicleNeon[vehicleid][slotid][1],vehicleid,-EVF::NeonOffsetData[modelid][EVF::NeonX], EVF::NeonOffsetData[modelid][EVF::NeonY],EVF::NeonOffsetData[modelid][EVF::NeonZ],0.0,0.0,0.0);
			return 1;
		}
		return 0;
	}

	EVF::Function:: VehicleSupportsNeonLights(modelid){
		if(!IsValidVehicleModelID(modelid)) return 0;
		modelid -= 400;
		return !(EVF::NeonOffsetData[modelid][EVF::NeonX] == 0.0 && EVF::NeonOffsetData[modelid][EVF::NeonY] == 0.0 && EVF::NeonOffsetData[modelid][EVF::NeonZ] == 0.0);
	}

	EVF::Function:: GetVehicleNeonLightsState(vehicleid,slotid = 0){
		if(slotid < 0 || slotid >= MAX_VEHICLE_NEON_SLOT) return 0;
		if(!IsValidVehicle(vehicleid)) return 0;
		return (IsValidDynamicObject(EVF::VehicleNeon[vehicleid][slotid][0]) && IsValidDynamicObject(EVF::VehicleNeon[vehicleid][slotid][1]));
	}
#endif

//Detect YSF.inc
#if !defined _YSF_included
	
	#define GetVehicleInterior(%0)	GetVehiclePropertyValue((%0),e_VEHICLE_INTERIOR)
	#define GetVehiclePaintjob(%0)	GetVehiclePropertyValue((%0),e_VEHICLE_PAINTJOB)

	EVF::Function:: GetVehicleColor(vehicleid,&color1,&color2){
		if(IsValidVehicle(vehicleid)){
			color1 = GetVehiclePropertyValue(vehicleid,e_VEHICLE_COLOR_1);
			color2 = GetVehiclePropertyValue(vehicleid,e_VEHICLE_COLOR_2);
			return 1;
		}
		return 0;
	}
	
	EVF::Function:: bool:IsVehicleOccupied(vehicleid){
		EVF::Foreach(i){
			if(IsPlayerInVehicle(i,vehicleid)){
				return true;
			}
		}
		return false;
	}
#endif

#define EVF_GetVehicleInterior(%0)	GetVehiclePropertyValue((%0),e_VEHICLE_INTERIOR)
#define EVF_GetVehiclePaintjob(%0)	GetVehiclePropertyValue((%0),e_VEHICLE_PAINTJOB)

EVF::Function:: EVF::GetVehicleColor(vehicleid,&color1,&color2){
	if(IsValidVehicle(vehicleid)){
		color1 = GetVehiclePropertyValue(vehicleid,e_VEHICLE_COLOR_1);
		color2 = GetVehiclePropertyValue(vehicleid,e_VEHICLE_COLOR_2);
		return 1;
	}
	return 0;
}

EVF::Function:: bool:EVF::IsVehicleOccupied(vehicleid){
	EVF::Foreach(i){
		if(IsPlayerInVehicle(i,vehicleid)){
			return true;
		}
	}
	return false;
}

EVF::Function:: EVF::GetVehicleSpawnInfo(vehicleid,&Float:x,&Float:y,&Float:z,&Float:rotation,&worldid,&interiorid){
	x = Float:GetVehiclePropertyValue(vehicleid,e_VEHICLE_SPAWN_X);
	y = Float:GetVehiclePropertyValue(vehicleid,e_VEHICLE_SPAWN_Y);
	z = Float:GetVehiclePropertyValue(vehicleid,e_VEHICLE_SPAWN_Z);
	rotation = Float:GetVehiclePropertyValue(vehicleid,e_VEHICLE_SPAWN_A);
	worldid = GetVehiclePropertyValue(vehicleid,e_VEHICLE_SPAWN_VW);
	interiorid = GetVehiclePropertyValue(vehicleid,e_VEHICLE_SPAWN_INT);
	return true;
}

EVF::Function:: EVF::SetVehicleSpawnInfo(vehicleid,Float:x,Float:y,Float:z,Float:rotation,worldid,interiorid){
	SetVehiclePropertyValue(vehicleid,e_VEHICLE_SPAWN_X,_:x);
	SetVehiclePropertyValue(vehicleid,e_VEHICLE_SPAWN_Y,_:y);
	SetVehiclePropertyValue(vehicleid,e_VEHICLE_SPAWN_Z,_:z);
	SetVehiclePropertyValue(vehicleid,e_VEHICLE_SPAWN_A,_:rotation);
	SetVehiclePropertyValue(vehicleid,e_VEHICLE_SPAWN_VW,worldid);
	SetVehiclePropertyValue(vehicleid,e_VEHICLE_SPAWN_INT,interiorid);
}

EVF::Function:: SetVehicleBomb(vehicleid,time = 1000){
	if(IsVehicleBombed(vehicleid)){
		SetVehicleParams(vehicleid,VEHICLE_TYPE_ALARM,0);
		if(GetVehiclePropertyValue(vehicleid,e_VEHICLE_BOMB_TIMER) != -1){
			KillTimer(GetVehiclePropertyValue(vehicleid,e_VEHICLE_BOMB_TIMER));
			SetVehiclePropertyValue(vehicleid,e_VEHICLE_BOMB_TIMER,-1);
		}
	}
	return SetVehiclePropertyValue(vehicleid,e_VEHICLE_BOMB,time);
}

EVF::Function:: IsVehicleBombActivated(vehicleid){
	if(IsVehicleBombed(vehicleid)){
		if(GetVehiclePropertyValue(vehicleid,e_VEHICLE_BOMB_TIMER) != -1){
			return 1;
		}
	}
	return 0;
}

EVF::Function:: EVF::UpdateVehicleDamage(vehicleid,type){
	new panels, doors, lights, tires;
	GetVehicleDamageStatus(vehicleid,panels,doors,lights,tires);
	switch(type){
		case VEHICLE_DAMAGE_PANELS: panels = 0x03331111;
		case VEHICLE_DAMAGE_DOORS: doors = 0x04040404;
		case VEHICLE_DAMAGE_LIGHTS: lights = 0x0000000F;
	}
	UpdateVehicleDamageStatus(vehicleid,panels,doors,lights,tires);
	return 1;
}

EVF::Function:: EVF::UpdateVehicleDamageStatus(vehicleid,type,update){
	new panels, doors, lights, tires;
	GetVehicleDamageStatus(vehicleid,panels,doors,lights,tires);
	switch(type){
		case VEHICLE_DAMAGE_PANELS: return UpdateVehicleDamageStatus(vehicleid,update,doors,lights,tires);
		case VEHICLE_DAMAGE_DOORS: return UpdateVehicleDamageStatus(vehicleid,panels,update,lights,tires);
		case VEHICLE_DAMAGE_LIGHTS: return UpdateVehicleDamageStatus(vehicleid,panels,doors,update,tires);
		case VEHICLE_DAMAGE_TIRES: return UpdateVehicleDamageStatus(vehicleid,panels,doors,lights,update);
	}
	return false;
}

EVF::Function:: EVF::GetVehicleDamageStatus(vehicleid,type){
	new panels,doors,lights,tires;
	GetVehicleDamageStatus(vehicleid,panels,doors,lights,tires);
	switch(type){
		case VEHICLE_DAMAGE_PANELS: return panels;
		case VEHICLE_DAMAGE_DOORS: return doors;
		case VEHICLE_DAMAGE_LIGHTS: return lights;
		case VEHICLE_DAMAGE_TIRES: return tires;
	}
	return -1;
}

EVF::Function:: Float:EVF::GetVehicleSpeed(vehicleid){
	new Float:x,Float:y,Float:z;
	GetVehicleVelocity(vehicleid,x,y,z);
	return floatmul(VectorSize(x,y,z),VEHICLE_SPEED_MULTIPLIER);
}

EVF::Function:: GetVehicleRandomColors(modelid,&color1,&color2){
	if(!IsValidVehicleModelID(modelid)) return 0;
	static index = 0;
	
	color1 = color2 = 0;
	
	modelid -= 400;
	
	if(!EVF::CarColors[modelid][0]) return 0;
	
	if(EVF::CarColors[modelid][0] == 2){
		color1 = EVF::CarColors[modelid][1];
		color2 = EVF::CarColors[modelid][2];
	} else {
		index = random(EVF::CarColors[modelid][0]) & -2;
		color1 = EVF::CarColors[modelid][++index];
		color2 = EVF::CarColors[modelid][++index];
	}

	return 1;
}

EVF::Function:: GetVehicleParams(vehicleid,EVF::ParamTypes:type){
	new bool:EVF::params[MAX_VEHICLE_PARAMS];
	GetVehicleParamsEx(vehicleid,EVF::params[0],EVF::params[1],EVF::params[2],EVF::params[3],EVF::params[4],EVF::params[5],EVF::params[6]);
	return EVF::params[_:type];
}

EVF::Function:: SetVehicleParams(vehicleid,EVF::ParamTypes:type,bool:status,delay = 0){
	new bool:EVF::params[MAX_VEHICLE_PARAMS];
	if(GetVehicleParamsEx(vehicleid,EVF::params[0],EVF::params[1],EVF::params[2],EVF::params[3],EVF::params[4],EVF::params[5],EVF::params[6])){
		EVF::params[_:type] = status;
		if(delay > 0){
			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]);
		} else {
			SetVehicleParamsEx(vehicleid,EVF::params[0],EVF::params[1],EVF::params[2],EVF::params[3],EVF::params[4],EVF::params[5],EVF::params[6]);
		}
		return 1;
	}
	return 0;
}

EVF::Function:: ToggleVehicleDamageUpdate(vehicleid,type,toggle){
	if(!toggle){
		if(GetVehicleParams(vehicleid,VEHICLE_TYPE_ENGINE)){
			SetVehicleParams(vehicleid,VEHICLE_TYPE_ENGINE,false);
		}
	}
	switch(type){
		case VEHICLE_DAMAGE_PANELS:	return SetVehiclePropertyValue(vehicleid,e_VEHICLE_DAMAGE_PANELS,_:toggle);
		case VEHICLE_DAMAGE_DOORS:	return SetVehiclePropertyValue(vehicleid,e_VEHICLE_DAMAGE_DOORS,_:toggle);
		case VEHICLE_DAMAGE_LIGHTS:	return SetVehiclePropertyValue(vehicleid,e_VEHICLE_DAMAGE_LIGHTS,_:toggle);
		case VEHICLE_DAMAGE_TIRES:	return SetVehiclePropertyValue(vehicleid,e_VEHICLE_DAMAGE_TIRES,_:toggle);
	}
	return 0;
}

EVF::Function:: IsVehicleDamageToggled(vehicleid,type){
	switch(type){
		case VEHICLE_DAMAGE_PANELS:	return GetVehiclePropertyValue(vehicleid,e_VEHICLE_DAMAGE_PANELS);
		case VEHICLE_DAMAGE_DOORS:	return GetVehiclePropertyValue(vehicleid,e_VEHICLE_DAMAGE_DOORS);
		case VEHICLE_DAMAGE_LIGHTS:	return GetVehiclePropertyValue(vehicleid,e_VEHICLE_DAMAGE_LIGHTS);
		case VEHICLE_DAMAGE_TIRES:	return GetVehiclePropertyValue(vehicleid,e_VEHICLE_DAMAGE_TIRES);
	}
	return 0;
}

EVF::Function:: GetNearestVehicleToPos(Float:x,Float:y,Float:z,worldid=-1,interiorid=-1,Float:maxdist=0.0,bool:fast=true,except_vid=0){
	new Float:distance = -1.0, foundvid = INVALID_VEHICLE_ID, Float:px, Float:py, Float:pz, Float:tmpdistance;
	EVF::ForeachVehicle(vehicleid){
		if(except_vid == vehicleid) continue;
		if(GetVehicleModel(vehicleid) == 590) continue;
		if(worldid != -1 && GetVehicleVirtualWorld(vehicleid) != worldid) continue;
		if(interiorid != -1 && GetVehicleInterior(vehicleid) != interiorid) continue;
		GetVehiclePos(vehicleid,px,py,pz);

		tmpdistance = GetDistanceBetweenPoints3D(x,y,z,px,py,pz);
		if(maxdist > 0.0 && tmpdistance > maxdist) continue;
		if(fast && (distance == -1.0 || tmpdistance < distance) && (maxdist == 0.0 || (tmpdistance < maxdist))) return vehicleid;
		if(distance == -1.0 || tmpdistance < distance){
			distance = tmpdistance;
			foundvid = vehicleid;
		}
	}
	return foundvid;
}

EVF::Function:: GetNearestVehicleToPlayer(playerid,Float:maxdist=0.0,bool:fast=false){
	new Float:x,Float:y,Float:z;
	GetPlayerPos(playerid,x,y,z);
	return GetNearestVehicleToPos(x,y,z,GetPlayerVirtualWorld(playerid),GetPlayerInterior(playerid),maxdist,fast);
}

EVF::Function:: GetVehicleDriver1(vehicleid){
	EVF::Foreach(i){
		if(GetPlayerState(i) == PLAYER_STATE_DRIVER && IsPlayerInVehicle(i,vehicleid)){
			return i;
		}
	}
	return INVALID_PLAYER_ID;
}

EVF::Function:: IsVehicleSeatOccupied(vehicleid,seatid){
	if(!GetVehicleModel(vehicleid)) return 0;
	EVF::Foreach(i){
		if(IsPlayerInVehicle(i,vehicleid) && GetPlayerVehicleSeat(i) == seatid){
			return 1;
		}
	}
	return 0;
}

EVF::Function:: GetVehicleNextSeat(vehicleid,passenger = 1){
	new seats = GetVehicleSeats(vehicleid);
	if(seats > 1){
		for(new i = passenger; i < seats; i++){
			if(!IsVehicleSeatOccupied(vehicleid,i)){
				return i;
			}
		}
	}
	return INVALID_SEAT_ID;
}

#if defined EVF_Streamer
	EVF::Function:: STREAMER_TAG_OBJECT:GetVehicleSlotAttachedObject(vehicleid,slot){
		if(!IsValidDynamicObject(EVF::VehicleTempData[vehicleid][e_attached_object][slot])) return STREAMER_TAG_OBJECT:INVALID_STREAMER_ID;
		return EVF::VehicleTempData[vehicleid][e_attached_object][slot];
	}

	EVF::Function:: IsObjectAttachedToVehicle(STREAMER_TAG_OBJECT:objectid,vehicleid){
		for(new i = 0; i < MAX_VEHICLE_ATTACHED_OBJECTS; i++){
			if(IsValidDynamicObject(EVF::VehicleTempData[vehicleid][e_attached_object][i])){
				if(EVF::VehicleTempData[vehicleid][e_attached_object][i] == objectid) return 1;
			}
		}
		return 0;
	}
	
	EVF::Function:: EditVehicle(playerid,vehicleid){
		if(IsValidDynamicObject(STREAMER_TAG_OBJECT:GetVehiclePropertyValue(vehicleid,e_VEHICLE_EDITOR))) return false;

		new Float:pos[3];
		GetVehiclePos(vehicleid,pos[0],pos[1],pos[2]);
		SetVehiclePropertyValue(vehicleid,e_VEHICLE_EDITOR,_:CreateDynamicObject(19300,pos[0],pos[1],pos[2],0.0,0.0,0.0));

		EditDynamicObject(playerid,STREAMER_TAG_OBJECT:GetVehiclePropertyValue(vehicleid,e_VEHICLE_EDITOR));

		EVF::PlayerTempData[playerid][e_editor_vehicle] = vehicleid;
		EVF::PlayerTempData[playerid][e_editor_object] = STREAMER_TAG_OBJECT:INVALID_STREAMER_ID;
		return true;
	}

	EVF::Function:: EditVehicleObject(playerid,vehicleid,STREAMER_TAG_OBJECT:objectid){
		if(IsValidDynamicObject(STREAMER_TAG_OBJECT:GetVehiclePropertyValue(vehicleid,e_VEHICLE_EDITOR))) return false;

		if(!IsValidDynamicObject(objectid)) return false;

		SetVehiclePropertyValue(vehicleid,e_VEHICLE_EDITOR,_:objectid);

		new Float:pos[3];
		GetVehiclePos(vehicleid,pos[0],pos[1],pos[2]);

		new Float:angle;
		GetVehicleZAngle(vehicleid,angle);

		new model = Streamer_GetIntData(STREAMER_TYPE_OBJECT,objectid,E_STREAMER_MODEL_ID);

		DestroyDynamicObject(objectid);
		SetVehiclePropertyValue(vehicleid,e_VEHICLE_EDITOR,_:CreateDynamicObject(model,pos[0],pos[1],pos[2],angle,0.0,0.0));

		EditDynamicObject(playerid,STREAMER_TAG_OBJECT:GetVehiclePropertyValue(vehicleid,e_VEHICLE_EDITOR));

		SetVehicleZAngle(vehicleid,0.0);

		EVF::PlayerTempData[playerid][e_editor_vehicle] = vehicleid;
		EVF::PlayerTempData[playerid][e_editor_object] = objectid;
		return true;
	}
#endif

EVF::Function:: TeleportVehicle(vehicleid,Float:x,Float:y,Float:z,Float:angle,worldid = -1,interiorid = -1){
	EVF::Foreach(i){
		if(GetPlayerVehicleID(i) == vehicleid){
			if(worldid != -1){
				SetPlayerVirtualWorld(i,worldid);
			} else {
				SetPlayerVirtualWorld(i,GetVehicleVirtualWorld(vehicleid));
			}
			if(interiorid != -1){
				SetPlayerInterior(i,interiorid);
			} else {
				SetPlayerInterior(i,GetVehicleInterior(vehicleid));
			}
		}
	}

 	if(worldid != -1) SetVehicleVirtualWorld(vehicleid,worldid);
	if(interiorid != -1) SetVehicleInterior(vehicleid,interiorid);

	SetVehiclePos(vehicleid,x,y,z);
	SetVehicleZAngle(vehicleid,angle);
	return 1;
}

EVF::Function:: GetVehiclePanels(vehicleid,&front_left,&front_right,&rear_left,&rear_right,&windshield,&front_bumper,&rear_bumper){
	new panels,doors,lights,tires;
	GetVehicleDamageStatus(vehicleid,panels,doors,lights,tires);
	front_left = (panels & 0xF);
	front_right = (panels >> 4) & 0xF;
	rear_left = (panels >> 8) & 0xF;
	rear_right = (panels >> 12) & 0xF;
	windshield = (panels >> 16) & 0xF;
	front_bumper = (panels >> 20) & 0xF;
	rear_bumper = (panels >> 24) & 0xF;
}

EVF::Function:: SetVehiclePanels(vehicleid,front_left,front_right,rear_left,rear_right,windshield,front_bumper,rear_bumper){
	new panels,doors,lights,tires;
	GetVehicleDamageStatus(vehicleid,panels,doors,lights,tires);
	panels = (front_left | (front_right << 4) | (rear_left << 8) | (rear_right << 12) | (windshield << 16) | (front_bumper << 20) | (rear_bumper << 24));
	UpdateVehicleDamageStatus(vehicleid,panels,doors,lights,tires);
}

//Update by Freaksken
EVF::Function:: GetVehicleLights(vehicleid,&front_left_light,&front_right_light,&back_lights){
	new panels,doors,lights,tires;
	GetVehicleDamageStatus(vehicleid,panels,doors,lights,tires);
	front_left_light = (lights & 0x1);
	front_right_light = (lights >> 2 & 0x1);
	back_lights = (lights >> 6 & 0x1);
}

//Update by Freaksken
EVF::Function:: SetVehicleLights(vehicleid,front_left_light,front_right_light,back_lights){
	new panels,doors,lights,tires;
	GetVehicleDamageStatus(vehicleid,panels,doors,lights,tires);
	lights = (front_left_light | (front_right_light << 2) | (back_lights << 6));
	UpdateVehicleDamageStatus(vehicleid,panels,doors,lights,tires);
}

EVF::Function:: GetVehicleDoors(vehicleid,&bonnet,&boot,&driver_door,&passenger_door){
	new panels,doors,lights,tires;
	GetVehicleDamageStatus(vehicleid,panels,doors,lights,tires);
	bonnet = (doors & 0x7);
	boot = ((doors >> 8) & 0x7);
	driver_door = ((doors >> 16) & 0x7);
	passenger_door = ((doors >> 24) & 0x7);
}

EVF::Function:: SetVehicleDoors(vehicleid,bonnet,boot,driver_door,passenger_door){
	new panels,doors,lights,tires;
	GetVehicleDamageStatus(vehicleid,panels,doors,lights,tires);
	doors = (bonnet | (boot << 8) | (driver_door << 16) | (passenger_door << 24));
	UpdateVehicleDamageStatus(vehicleid,panels,doors,lights,tires);
}

EVF::Function:: GetVehicleTires(vehicleid,&front_left,&front_right,&rear_left,&rear_right){
	new panels,doors,lights,tires;
	GetVehicleDamageStatus(vehicleid,panels,doors,lights,tires);
	rear_right = (tires & 0x1);
	front_right = (tires >> 1 & 0x1);
	rear_left = (tires >> 2 & 0x1);
	front_left = (tires >> 3 & 0x1);
}

EVF::Function:: SetVehicleTires(vehicleid,front_left,front_right,rear_left,rear_right){
	new panels,doors,lights,tires;
	GetVehicleDamageStatus(vehicleid,panels,doors,lights,tires);
	tires = (rear_right | (front_right << 1) | (rear_left << 2) | (front_left << 3));
	UpdateVehicleDamageStatus(vehicleid,panels,doors,lights,tires);
}

EVF::Function:: SwitchVehicleEngine(vehicleid,bool:engine_status){
	new engine,lights,alarm,doors,bonnet,boot,objective;
	GetVehicleParamsEx(vehicleid,engine,lights,alarm,doors,bonnet,boot,objective);
	SetVehicleParamsEx(vehicleid,_:engine_status,lights,alarm,doors,bonnet,boot,objective);
}

EVF::Function:: SwitchVehicleLight(vehicleid,bool:light_status){
	new engine,lights,alarm,doors,bonnet,boot,objective;
	GetVehicleParamsEx(vehicleid,engine,lights,alarm,doors,bonnet,boot,objective);
	SetVehicleParamsEx(vehicleid,engine,_:light_status,alarm,doors,bonnet,boot,objective);
}

EVF::Function:: SwitchVehicleAlarm(vehicleid,bool:alarm_status){
	new engine,lights,alarm,doors,bonnet,boot,objective;
	GetVehicleParamsEx(vehicleid,engine,lights,alarm,doors,bonnet,boot,objective);
	SetVehicleParamsEx(vehicleid,engine,lights,_:alarm_status,doors,bonnet,boot,objective);
}

EVF::Function:: SwitchVehicleDoors(vehicleid,bool:doors_status){
	new engine,lights,alarm,doors,bonnet,boot,objective;
	GetVehicleParamsEx(vehicleid,engine,lights,alarm,doors,bonnet,boot,objective);
	SetVehicleParamsEx(vehicleid,engine,lights,alarm,_:doors_status,bonnet,boot,objective);
}

EVF::Function:: SwitchVehicleBonnet(vehicleid,bool:bonnet_status){
	new engine,lights,alarm,doors,bonnet,boot,objective;
	GetVehicleParamsEx(vehicleid,engine,lights,alarm,doors,bonnet,boot,objective);
	SetVehicleParamsEx(vehicleid,engine,lights,alarm,doors,_:bonnet_status,boot,objective);
}

EVF::Function:: SwitchVehicleBoot(vehicleid,bool:boot_status){
	new engine,lights,alarm,doors,bonnet,boot,objective;
	GetVehicleParamsEx(vehicleid,engine,lights,alarm,doors,bonnet,boot,objective);
	SetVehicleParamsEx(vehicleid,engine,lights,alarm,doors,bonnet,_:boot_status,objective);
}

EVF::Function:: SwitchVehicleObjective(vehicleid,bool:objective_status){
	new engine,lights,alarm,doors,bonnet,boot,objective;
	GetVehicleParamsEx(vehicleid,engine,lights,alarm,doors,bonnet,boot,objective);
	SetVehicleParamsEx(vehicleid,engine,lights,alarm,doors,bonnet,boot,_:objective_status);
}

EVF::Function:: GetVehicleWindowState(vehicleid,doorid){
	new driver,passenger,backleft,backright;
	GetVehicleParamsCarWindows(vehicleid,driver,passenger,backleft,backright);
	switch(doorid){
		case DOOR_DRIVER:		return (driver > 0);
		case DOOR_PASSENGER:	return (passenger > 0);
		case DOOR_BACKLEFF:		return (backleft > 0);
		case DOOR_BACKRIGHT:	return (backright > 0);
	}
	return 0;
}

EVF::Function:: SetVehicleWindowState(vehicleid,doorid,window_state){
	if(!IsValidVehicleDoor(vehicleid,doorid)) return 0;
	new driver,passenger,backleft,backright;
	driver = GetVehicleWindowState(vehicleid,DOOR_DRIVER);
	passenger = GetVehicleWindowState(vehicleid,DOOR_PASSENGER);
	backleft = GetVehicleWindowState(vehicleid,DOOR_BACKLEFF);
	backright = GetVehicleWindowState(vehicleid,DOOR_BACKRIGHT);
	switch(doorid){
		case DOOR_DRIVER:		SetVehicleParamsCarWindows(vehicleid,window_state,passenger,backleft,backright);
		case DOOR_PASSENGER:	SetVehicleParamsCarWindows(vehicleid,driver,window_state,backleft,backright);
		case DOOR_BACKLEFF:		SetVehicleParamsCarWindows(vehicleid,driver,passenger,window_state,backright);
		case DOOR_BACKRIGHT:	SetVehicleParamsCarWindows(vehicleid,driver,passenger,backleft,window_state);
	}
	return 1;
}

EVF::Function:: GetVehicleDoorState(vehicleid,doorid){
	new driver,passenger,backleft,backright;
	GetVehicleParamsCarDoors(vehicleid,driver,passenger,backleft,backright);
	switch(doorid){
		case DOOR_DRIVER:		return (driver > 0);
		case DOOR_PASSENGER:	return (passenger > 0);
		case DOOR_BACKLEFF:		return (backleft > 0);
		case DOOR_BACKRIGHT:	return (backright > 0);
	}
	return 0;
}

EVF::Function:: SetVehicleDoorState(vehicleid,doorid,door_state){
	if(!IsValidVehicleDoor(vehicleid,doorid)) return 0;
	new driver,passenger,backleft,backright;
	driver = GetVehicleDoorState(vehicleid,DOOR_DRIVER);
	passenger = GetVehicleDoorState(vehicleid,DOOR_PASSENGER);
	backleft = GetVehicleDoorState(vehicleid,DOOR_BACKLEFF);
	backright = GetVehicleDoorState(vehicleid,DOOR_BACKRIGHT);
	switch(doorid){
		case DOOR_DRIVER:		SetVehicleParamsCarDoors(vehicleid,door_state,passenger,backleft,backright);
		case DOOR_PASSENGER:	SetVehicleParamsCarDoors(vehicleid,driver,door_state,backleft,backright);
		case DOOR_BACKLEFF:		SetVehicleParamsCarDoors(vehicleid,driver,passenger,door_state,backright);
		case DOOR_BACKRIGHT:	SetVehicleParamsCarDoors(vehicleid,driver,passenger,backleft,door_state);
	}
	return 1;
}

EVF::Public:: OnVehicleTimeUpdate(){
	new Float:EVF::Vec[4];
	EVF::ForeachVehicle(vehicleid){
		if(EVF::VehicleProperty[vehicleid][e_VEHICLE_STORED]){
			GetVehiclePos(vehicleid,EVF::Vec[0],EVF::Vec[1],EVF::Vec[2]);
			GetVehicleZAngle(vehicleid,EVF::Vec[3]);
			if(IsVehicleSticky(vehicleid)){
				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){
					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));
				}
			}
			#if defined OnVehiclePosChange
				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){
					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])){
						EVF::VehicleTempData[vehicleid][e_pos_x] = EVF::Vec[0];
						EVF::VehicleTempData[vehicleid][e_pos_y] = EVF::Vec[1];
						EVF::VehicleTempData[vehicleid][e_pos_z] = EVF::Vec[2];
						EVF::VehicleTempData[vehicleid][e_pos_a] = EVF::Vec[3];
					} else {
						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));
					}
				}
			#endif

			GetVehicleVelocity(vehicleid,EVF::Vec[0],EVF::Vec[1],EVF::Vec[2]);
			if(IsVehicleFuelToggled(vehicleid)){
				//fuel system
				new Float:vehicle_speed = EVF::GetVehicleSpeed(vehicleid);
				//if vehicle out of fuel
				if(GetVehicleFuel(vehicleid) <= 0){
					SetVehicleParams(vehicleid,VEHICLE_TYPE_ENGINE,false);
					new vehicle_driver = GetVehicleDriverID(vehicleid);
					if(IsPlayerConnected(vehicle_driver)){
						GameTextForPlayer(vehicle_driver,"~r~Vehicle out of fuel !",5000,3);
					}
				} else {
					//if vehicle has some EVF::Vecitive fuel
					EVF::VehicleTempData[vehicleid][e_uptime] += 1;
					if(EVF::VehicleTempData[vehicleid][e_uptime] > 20){ // 250 ms * 20 = 5 seconds
						EVF::VehicleTempData[vehicleid][e_uptime] = 0;
						
						new fuel_consumption_level = 0;
						if(vehicle_speed == 0.0){
							if(GetVehicleParams(vehicleid,VEHICLE_TYPE_ENGINE)){
								fuel_consumption_level = MULTIPLIER_FUEL_SYSTEM;
							}
						} else {
							for(new i = 20, j = floatround(GetVehicleTopSpeed(vehicleid)); i <= j; i += 20){
								if(vehicle_speed > i){
									fuel_consumption_level += MULTIPLIER_FUEL_SYSTEM;
								}
							}
						}
						
						if(fuel_consumption_level > 0){
							new old_fuel = GetVehicleFuel(vehicleid), new_fuel = (old_fuel - fuel_consumption_level - 1);
							if(new_fuel < 0) new_fuel = 0;
							CallRemoteFunction("OnVehicleFuelChange","iii",vehicleid,new_fuel,old_fuel);
							SetVehicleFuel(vehicleid,new_fuel);
						}
					}
				}
			}
			
			#if defined OnVehicleVelocityChange
				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])){
					EVF::VehicleTempData[vehicleid][e_vel_x] = EVF::Vec[0];
					EVF::VehicleTempData[vehicleid][e_vel_y] = EVF::Vec[1];
					EVF::VehicleTempData[vehicleid][e_vel_z] = EVF::Vec[2];
				} else {
					return SetVehicleVelocity(vehicleid,EVF::VehicleTempData[vehicleid][e_vel_x],EVF::VehicleTempData[vehicleid][e_vel_y],EVF::VehicleTempData[vehicleid][e_vel_z]);
				}
			#endif
			
			GetVehicleHealth(vehicleid,EVF::Vec[0]);
			#if defined OnVehicleHealthChange
				if(EVF::Vec[0] != EVF::VehicleTempData[vehicleid][e_health]){
					if(CallRemoteFunction("OnVehicleHealthChange","iff",vehicleid,EVF::Vec[0],EVF::VehicleTempData[vehicleid][e_health])){
						EVF::VehicleTempData[vehicleid][e_health] = EVF::Vec[0];
					} else {
						return SetVehicleHealth(vehicleid,EVF::VehicleTempData[vehicleid][e_health]);
					}
				}
			#endif
		}
	}
	return 1;
}

EVF::Public:: EVF::SetVehicleParamsEx(vehicleid,bool:engine,bool:lights,bool:alarm,bool:doors,bool:bonnet,bool:boot,bool:objective){
	SetVehicleParamsEx(vehicleid,engine,lights,alarm,doors,bonnet,boot,objective);
}

EVF::Public:: EVF::OnVehicleBombActivate(playerid,vehicleid){
	SetVehicleParams(vehicleid,VEHICLE_TYPE_ALARM,true);
	SetVehiclePropertyValue(vehicleid,e_VEHICLE_BOMB_TIMER,SetTimerEx("EVF_OnVehicleBombExplode",1750,false,"ii",playerid,vehicleid));
	return 1;
}

EVF::Public:: EVF::ImportVehicle(vehicleid,modelid,Float:x,Float:y,Float:z,Float:angle,color1,color2,worldid,interiorid,unoccupied_damage){
	
	EVF::VehicleProperty[vehicleid][e_VEHICLE_SPAWN_X] = _:x;
	EVF::VehicleProperty[vehicleid][e_VEHICLE_SPAWN_Y] = _:y;
	EVF::VehicleProperty[vehicleid][e_VEHICLE_SPAWN_Z] = _:z;
	EVF::VehicleProperty[vehicleid][e_VEHICLE_SPAWN_A] = _:angle;
	
	EVF::VehicleProperty[vehicleid][e_VEHICLE_PAINTJOB] = RESET_PAINTJOB_ID;
	EVF::VehicleProperty[vehicleid][e_VEHICLE_INTERIOR] = interiorid;

	EVF::VehicleProperty[vehicleid][e_VEHICLE_COLOR_1] = color1;
	EVF::VehicleProperty[vehicleid][e_VEHICLE_COLOR_2] = color2;
	
	EVF::VehicleProperty[vehicleid][e_VEHICLE_HORN] = 0;
	EVF::VehicleProperty[vehicleid][e_VEHICLE_SPAWN_VW] = worldid;
	EVF::VehicleProperty[vehicleid][e_VEHICLE_SPAWN_INT] = interiorid;
	EVF::VehicleProperty[vehicleid][e_VEHICLE_SPEED_CAP] = 0;
	EVF::VehicleProperty[vehicleid][e_VEHICLE_FUEL_USE] = 0;
	EVF::VehicleProperty[vehicleid][e_VEHICLE_FUEL] = 0;
	EVF::VehicleProperty[vehicleid][e_VEHICLE_STICKY] = 0;
	EVF::VehicleProperty[vehicleid][e_VEHICLE_UNO_DAMAGE] = ((unoccupied_damage)?(1):(0));
	EVF::VehicleProperty[vehicleid][e_VEHICLE_CAP_DAMAGE] = 0;
	EVF::VehicleProperty[vehicleid][e_VEHICLE_EDITOR] = 0;
	EVF::VehicleProperty[vehicleid][e_VEHICLE_DAMAGE_PANELS] = 1;
	EVF::VehicleProperty[vehicleid][e_VEHICLE_DAMAGE_DOORS] = 1;
	EVF::VehicleProperty[vehicleid][e_VEHICLE_DAMAGE_LIGHTS] = 1;
	EVF::VehicleProperty[vehicleid][e_VEHICLE_DAMAGE_TIRES] = 1;
	EVF::VehicleProperty[vehicleid][e_VEHICLE_BOMB] = 0;
	EVF::VehicleProperty[vehicleid][e_VEHICLE_BOMB_TIMER] = -1;
	EVF::VehicleProperty[vehicleid][e_VEHICLE_BULLETPROOF] = 0;
	
	EVF::VehicleTempData[vehicleid][e_pos_x] = x;
	EVF::VehicleTempData[vehicleid][e_pos_y] = y;
	EVF::VehicleTempData[vehicleid][e_pos_z] = z;
	EVF::VehicleTempData[vehicleid][e_pos_a] = angle;

	EVF::VehicleTempData[vehicleid][e_vel_x] = 0.0;
	EVF::VehicleTempData[vehicleid][e_vel_y] = 0.0;
	EVF::VehicleTempData[vehicleid][e_vel_z] = 0.0;

	EVF::VehicleTempData[vehicleid][e_health] = 1000.0;
	
	EVF::VehicleTempData[vehicleid][e_uptime] = 0;
	
	SetVehiclePropertyValue(vehicleid,e_VEHICLE_STORED,1);
	
	return 1;
}

EVF::Public:: EVF::RemoveVehicle(vehicleid){
	SetVehiclePropertyValue(vehicleid,e_VEHICLE_STORED,0);
	return 1;
}

EVF::Public:: EVF::OnVehicleBombExplode(playerid,vehicleid){
	if(GetPlayerState(playerid) != PLAYER_STATE_DRIVER){
		if(!CallRemoteFunction("OnVehicleBombDeactivate","i",vehicleid)){
			return SetVehicleParams(vehicleid,VEHICLE_TYPE_ALARM,false);
		}
	}
	CallRemoteFunction("OnVehicleBombExplode","i",vehicleid);
	SetVehicleParams(vehicleid,VEHICLE_TYPE_ALARM,false);
	new Float:pos[3];
	GetVehiclePos(vehicleid,pos[0],pos[1],pos[2]);
	#if defined _3D_Tryg
		CreateDynamicExplosion(pos[0],pos[1],pos[2],3,30.0,GetVehicleVirtualWorld(vehicleid),GetVehicleInterior(vehicleid),-1,200.0);
	#else
		CreateExplosion(pos[0],pos[1],pos[2],3,30.0);
	#endif
	SetVehicleToRespawn(vehicleid);
	if(GetPlayerVehicleID(playerid) == vehicleid){
		SetPlayerHealth(playerid,0.0);
		GameTextForPlayer(playerid,"~r~Bombed !",3500,3);
	}
	SetVehiclePropertyValue(vehicleid,e_VEHICLE_BOMB_TIMER,-1);
	return 1;
}

//Hook: SetVehicleHealth
EVF::Function:: EVF::SetVehicleHealth(vehicleid,Float:health){
	if(SetVehicleHealth(vehicleid,health)){
		EVF::VehicleTempData[vehicleid][e_health] = health;
		return 1;
	}
	return 0;
}
#if defined _ALS_SetVehicleHealth
	#undef SetVehicleHealth
#else
	#define _ALS_SetVehicleHealth
#endif
#define SetVehicleHealth EVF_SetVehicleHealth

//Hook: SetVehiclePos
EVF::Function:: EVF::SetVehiclePos(vehicleid,Float:x,Float:y,Float:z){
	if(SetVehiclePos(vehicleid,Float:x,Float:y,Float:z)){
		EVF::VehicleTempData[vehicleid][e_pos_x] = x;
		EVF::VehicleTempData[vehicleid][e_pos_y] = y;
		EVF::VehicleTempData[vehicleid][e_pos_z] = z;
		return 1;
	}
	return 0;
}

#if defined _ALS_SetVehiclePos
	#undef SetVehiclePos
#else
	#define _ALS_SetVehiclePos
#endif
#define SetVehiclePos EVF_SetVehiclePos

//Hook: SetVehicleZAngle
EVF::Function:: EVF::SetVehicleZAngle(vehicleid,Float:angle){
	if(SetVehicleZAngle(vehicleid,angle)){
		EVF::VehicleTempData[vehicleid][e_pos_a] = angle;
		return 1;
	}
	return 0;
}

#if defined _ALS_SetVehicleZAngle
	#undef SetVehicleZAngle
#else
	#define _ALS_SetVehicleZAngle
#endif
#define SetVehicleZAngle EVF_SetVehicleZAngle

//Hook: LinkVehicleToInterior
EVF::Function:: EVF::LinkVehicleToInterior(vehicleid,interiorid){
	if(LinkVehicleToInterior(vehicleid,interiorid)){
		SetVehiclePropertyValue(vehicleid,e_VEHICLE_INTERIOR,interiorid);
		return 1;
	}
	return 0;
}

#if defined _ALS_LinkVehicleToInterior
	#undef LinkVehicleToInterior
#else
	#define _ALS_LinkVehicleToInterior
#endif
#define LinkVehicleToInterior EVF_LinkVehicleToInterior

//Hook: ChangeVehicleColor
EVF::Function:: EVF::ChangeVehicleColor(vehicleid,color1,color2){
	new randcolor1, randcolor2;
	if(GetVehicleRandomColors(GetVehicleModel(vehicleid),randcolor1,randcolor2)){
		if(color1 == -1) color1 = randcolor1;
		if(color2 == -1) color2 = randcolor2;
	}
	if(ChangeVehicleColours(vehicleid,color1,color2)){
		SetVehiclePropertyValue(vehicleid,e_VEHICLE_COLOR_1,color1);
		SetVehiclePropertyValue(vehicleid,e_VEHICLE_COLOR_2,color2);
		return 1;
	}
	return 0;
}

#if defined _ALS_ChangeVehicleColor
	#undef ChangeVehicleColor
#else
	#define _ALS_ChangeVehicleColor
#endif
#define ChangeVehicleColor EVF_ChangeVehicleColor

//Hook: ChangeVehiclePaintjob
EVF::Function:: EVF::ChangeVehiclePaintjob(vehicleid,paintjobid){
	if(ChangeVehiclePaintjob(vehicleid,paintjobid)){
		SetVehiclePropertyValue(vehicleid,e_VEHICLE_PAINTJOB,paintjobid);
		if(paintjobid == RESET_PAINTJOB_ID){
			new color1,color2;
			if(EVF::GetVehicleColor(vehicleid,color1,color2)){
				ChangeVehicleColours(vehicleid,color1,color2);
			}
		}
		return 1;
	}
	return 0;
}

#if defined _ALS_ChangeVehiclePaintjob
	#undef ChangeVehiclePaintjob
#else
	#define _ALS_ChangeVehiclePaintjob
#endif
#define ChangeVehiclePaintjob EVF_ChangeVehiclePaintjob

//Hook: OnVehicleRespray
public OnVehicleRespray(playerid,vehicleid,colour1,colour2){
	SetVehiclePropertyValue(vehicleid,e_VEHICLE_COLOR_1,colour1);
	SetVehiclePropertyValue(vehicleid,e_VEHICLE_COLOR_2,colour2);
	#if defined EVF_OnVehicleRespray
		EVF::OnVehicleRespray(playerid,vehicleid,colour1,colour2);
	#endif
	return 1;
}

#if defined _ALS_OnVehicleRespray
	#undef OnVehicleRespray
#else
	#define _ALS_OnVehicleRespray
#endif
#define OnVehicleRespray EVF_OnVehicleRespray
#if defined EVF_OnVehicleRespray
	forward EVF_OnVehicleRespray(playerid,vehicleid,colour1,colour2);
#endif

//Hook: OnVehiclePaintjob
public OnVehiclePaintjob(playerid,vehicleid,paintjob){
	SetVehiclePropertyValue(vehicleid,e_VEHICLE_PAINTJOB,paintjob);
	#if defined EVF_OnVehiclePaintjob
		EVF::OnVehiclePaintjob(playerid,vehicleid,paintjob);
	#endif
	return 1;
}

#if defined _ALS_OnVehiclePaintjob
	#undef OnVehiclePaintjob
#else
	#define _ALS_OnVehiclePaintjob
#endif
#define OnVehiclePaintjob EVF_OnVehiclePaintjob
#if defined EVF_OnVehiclePaintjob
	forward EVF_OnVehiclePaintjob(playerid,vehicleid,paintjob);
#endif

//Hook: CreateVehicle
EVF::Function:: EVF::CreateVehicle(modelid,Float:x,Float:y,Float:z,Float:angle,color1,color2,respawn_delay,bool:addsiren = false,worldid = 0,interiorid = 0,bool:unoccupied_damage = false){
	if(!IsValidVehicleModelID(modelid)) return INVALID_VEHICLE_ID;
	new vehicleid = INVALID_VEHICLE_ID, randcolor1, randcolor2;
	if(GetVehicleRandomColors(modelid,randcolor1,randcolor2)){
		if(color1 == -1) color1 = randcolor1;
		if(color2 == -1) color2 = randcolor2;
	}
	switch(modelid){
		case 569, 570, 537, 538: 	vehicleid = AddStaticVehicleEx(modelid,x,y,z,angle,color1,color2,respawn_delay,addsiren);
		default: 					vehicleid = CreateVehicle(modelid,x,y,z,angle,color1,color2,respawn_delay,addsiren);
	}
	if(vehicleid == INVALID_VEHICLE_ID || !IsValidVehicle(vehicleid)){
		printf("[ADM] Error: Your server have reached MAX_VEHICLES limit (%i).",MAX_VEHICLES);
		return INVALID_VEHICLE_ID;
	}
	
	ResetVehicleProperties(vehicleid);
	
	#if defined EVF_Streamer
		for(new i = 0; i < MAX_VEHICLE_ATTACHED_OBJECTS; i++){
			EVF::VehicleTempData[vehicleid][e_attached_object][i] = STREAMER_TAG_OBJECT:INVALID_STREAMER_ID;
		}
	#endif
	EVF::VehicleTempData[vehicleid][e_pos_x] = x;
	EVF::VehicleTempData[vehicleid][e_pos_y] = y;
	EVF::VehicleTempData[vehicleid][e_pos_z] = z;
	EVF::VehicleTempData[vehicleid][e_pos_a] = angle;

	EVF::VehicleTempData[vehicleid][e_vel_x] = 0.0;
	EVF::VehicleTempData[vehicleid][e_vel_y] = 0.0;
	EVF::VehicleTempData[vehicleid][e_vel_z] = 0.0;

	EVF::VehicleTempData[vehicleid][e_health] = 1000.0;
	
	EVF::VehicleTempData[vehicleid][e_uptime] = 0;
	
	LinkVehicleToInterior(vehicleid,interiorid);
	SetVehicleVirtualWorld(vehicleid,worldid);
	
	SetVehicleHorn(vehicleid,0);
	SetVehicleFuel(vehicleid,DEFAULT_VEHICLE_FUEL);
	SetVehicleSpeedCap(vehicleid,0.0);
	
	ToggleUnoccupiedVehicleDamage(vehicleid,unoccupied_damage);
	ToggleVehicleSticky(vehicleid,0);
	ToggleVehiclePetrolCapDestroy(vehicleid,0);
	ToggleVehicleFuel(vehicleid,0);
	
	SetVehiclePropertyValue(vehicleid,e_VEHICLE_COLOR_1,color1);
	SetVehiclePropertyValue(vehicleid,e_VEHICLE_COLOR_2,color2);
	SetVehiclePropertyValue(vehicleid,e_VEHICLE_PAINTJOB,RESET_PAINTJOB_ID);
	
	SetVehiclePropertyValue(vehicleid,e_VEHICLE_SPAWN_X,_:x);
	SetVehiclePropertyValue(vehicleid,e_VEHICLE_SPAWN_Y,_:y);
	SetVehiclePropertyValue(vehicleid,e_VEHICLE_SPAWN_Z,_:z);
	SetVehiclePropertyValue(vehicleid,e_VEHICLE_SPAWN_A,_:angle);
	SetVehiclePropertyValue(vehicleid,e_VEHICLE_SPAWN_VW,worldid);
	SetVehiclePropertyValue(vehicleid,e_VEHICLE_SPAWN_INT,interiorid);
	SetVehiclePropertyValue(vehicleid,e_VEHICLE_EDITOR,0);
	SetVehiclePropertyValue(vehicleid,e_VEHICLE_BOMB,0);
	SetVehiclePropertyValue(vehicleid,e_VEHICLE_BOMB_TIMER,-1);
	SetVehiclePropertyValue(vehicleid,e_VEHICLE_BULLETPROOF,0);
	SetVehiclePropertyValue(vehicleid,e_VEHICLE_STORED,1);
	
	for(new i = 0; i < 4; i++) ToggleVehicleDamageUpdate(vehicleid,i,1);
	
	CallRemoteFunction("OnVehicleCreated","i",vehicleid);
	return vehicleid;
}

#if defined _ALS_CreateVehicle
	#undef CreateVehicle
#else
	#define _ALS_CreateVehicle
#endif
#define CreateVehicle EVF_CreateVehicle

//Hook: AddStaticVehicle
EVF::Function:: EVF::AddStaticVehicle(modelid,Float:spawn_x,Float:spawn_y,Float:spawn_z,Float:z_angle,color1,color2){
	return EVF::CreateVehicle(modelid,spawn_x,spawn_y,spawn_z,z_angle,color1,color2,-1);
}

#if defined _ALS_AddStaticVehicle
	#undef AddStaticVehicle
#else
	#define _ALS_AddStaticVehicle
#endif
#define AddStaticVehicle 	EVF_AddStaticVehicle

//Hook: AddStaticVehicleEx
EVF::Function:: EVF::AddStaticVehicleEx(modelid,Float:spawn_x,Float:spawn_y,Float:spawn_z,Float:z_angle,color1,color2,respawn_delay,addsiren=0){
	return EVF::CreateVehicle(modelid,spawn_x,spawn_y,spawn_z,z_angle,color1,color2,respawn_delay,addsiren);
}

#if defined _ALS_AddStaticVehicleEx
	#undef AddStaticVehicleEx
#else
	#define _ALS_AddStaticVehicleEx
#endif
#define AddStaticVehicleEx EVF_CreateVehicle

//Hook: DestroyVehicle
EVF::Function:: EVF::DestroyVehicle(vehicleid){
	if(!IsValidVehicle(vehicleid)) return 0;
	EVF::Foreach(i){
		if(EVF::PlayerTempData[i][e_editor_vehicle] == GetVehiclePropertyValue(vehicleid,e_VEHICLE_EDITOR)){
			CancelEdit(i);
		}
	}
	#if defined EVF_Streamer
		new objectid = GetVehiclePropertyValue(vehicleid,e_VEHICLE_EDITOR);
		DestroyDynamicObject(STREAMER_TAG_OBJECT:objectid);
		for(new i = 0; i < MAX_VEHICLE_ATTACHED_OBJECTS; i++){
			if(IsValidDynamicObject(EVF::VehicleTempData[vehicleid][e_attached_object][i])){
				DestroyDynamicObject(EVF::VehicleTempData[vehicleid][e_attached_object][i]);
				EVF::VehicleTempData[vehicleid][e_attached_object][i] = STREAMER_TAG_OBJECT:INVALID_STREAMER_ID;
			}
		}
		for(new slotid = 0; slotid < MAX_VEHICLE_NEON_SLOT; slotid++){
			SetVehicleNeonLights(vehicleid,false,RED_NEON,slotid);
		}
	#endif
	EVF::VehicleTempData[vehicleid][e_uptime] = 0;
	CallRemoteFunction("OnVehicleDestroyed","i",vehicleid);
	ResetVehicleProperties(vehicleid);
	return DestroyVehicle(vehicleid);
}

#if defined _ALS_DestroyVehicle
	#undef DestroyVehicle
#else
	#define _ALS_DestroyVehicle
#endif
#define DestroyVehicle EVF_DestroyVehicle

//Hook: OnPlayerWeaponShot
public OnPlayerWeaponShot(playerid,weaponid,hittype,hitid,Float:fX,Float:fY,Float:fZ){
	if(hittype == BULLET_HIT_TYPE_VEHICLE){
		if(IsToggledVehicleBulletproof(hitid)) return 0;
		new Float:fHealth, bodypart = _:VEHICLE_BODYPART_UNKNOWN, Float:fDamage = EVF::WeaponDamage[GetPlayerWeapon(playerid)];
		GetVehicleHealth(hitid,fHealth);
		if(fHealth > 249.0){
			new fModelid = GetVehicleModel(hitid), Float:fOffSet[3], fUpdate;
			
			if(IsUnoccupiedDamageToggled(hitid)){
				//front wheels
				GetVehicleModelInfo(fModelid,VEHICLE_MODEL_INFO_WHEELSFRONT,fOffSet[0],fOffSet[1],fOffSet[2]);
				
				if(VectorSize(fX+fOffSet[0],fY-fOffSet[1],fZ-fOffSet[2]) <= 0.4){
					//left
					fUpdate = EVF::GetVehicleDamageStatus(hitid,VEHICLE_DAMAGE_TIRES) + 8;
					if(fUpdate > 15){
						EVF::UpdateVehicleDamageStatus(hitid,VEHICLE_DAMAGE_TIRES,fUpdate);
					}
					bodypart = _:VEHICLE_BODYPART_FL_WHEEL;
				} else if(VectorSize(fX-fOffSet[0],fY-fOffSet[1],fZ-fOffSet[2]) <= 0.4){
					//right
					fUpdate = EVF::GetVehicleDamageStatus(hitid,VEHICLE_DAMAGE_TIRES) + 2;
					if(fUpdate > 15){
						EVF::UpdateVehicleDamageStatus(hitid,VEHICLE_DAMAGE_TIRES,fUpdate);
					}
					bodypart = _:VEHICLE_BODYPART_FR_WHEEL;
				} else {
					//back wheels
					GetVehicleModelInfo(fModelid,VEHICLE_MODEL_INFO_WHEELSREAR,fOffSet[0],fOffSet[1],fOffSet[2]);
					if(VectorSize(fX+fOffSet[0],fY-fOffSet[1],fZ-fOffSet[2]) <= 0.4){
						//left
						fUpdate = EVF::GetVehicleDamageStatus(hitid,VEHICLE_DAMAGE_TIRES) + 4;
						if(fUpdate > 15){
							EVF::UpdateVehicleDamageStatus(hitid,VEHICLE_DAMAGE_TIRES,fUpdate);
						}
						bodypart = _:VEHICLE_BODYPART_BL_WHEEL;
					} else if(VectorSize(fX-fOffSet[0],fY-fOffSet[1],fZ-fOffSet[2]) <= 0.4){
						//right
						fUpdate = EVF::GetVehicleDamageStatus(hitid,VEHICLE_DAMAGE_TIRES) + 1;
						if(fUpdate > 15){
							EVF::UpdateVehicleDamageStatus(hitid,VEHICLE_DAMAGE_TIRES,fUpdate);
						}
						bodypart = _:VEHICLE_BODYPART_BR_WHEEL;
					}
				}
			}
			
			if(!bodypart){
				//petrolcap
				GetVehicleModelInfo(fModelid,VEHICLE_MODEL_INFO_PETROLCAP,fOffSet[0],fOffSet[1],fOffSet[2]);
				if(VectorSize(fX-fOffSet[0],fY-fOffSet[1],fZ-fOffSet[2]) <= 0.2){
					if(IsPetrolCapDestroyToggled(hitid)){
						if(IsUnoccupiedDamageToggled(hitid) || IsVehicleOccupied(hitid)){
							bodypart = _:VEHICLE_BODYPART_PETROLCAP;
							new Float:pos[3];
							GetVehiclePos(hitid,pos[0],pos[1],pos[2]);
							#if defined _3D_Tryg
								CreateDynamicExplosion(pos[0],pos[1],pos[2],3,25.0,GetVehicleVirtualWorld(hitid),GetVehicleInterior(hitid),-1,200.0);
							#else
								CreateExplosion(pos[0],pos[1],pos[2],3,25.0);
							#endif
							return SetVehicleToRespawn(hitid);
						}
					} else {
						fHealth -= fDamage;
						SetVehicleHealth(hitid,fHealth);
						switch(floatround(fHealth)){
							case 251..399: return EVF::UpdateVehicleDamage(hitid,VEHICLE_DAMAGE_DOORS);
							case 400..599: return EVF::UpdateVehicleDamage(hitid,VEHICLE_DAMAGE_PANELS);
							case 600..700: return EVF::UpdateVehicleDamage(hitid,VEHICLE_DAMAGE_LIGHTS);
						}
					}
				}
			}
			if(!bodypart){
				if(IsUnoccupiedDamageToggled(hitid)){
					fHealth -= fDamage;
					SetVehicleHealth(hitid,fHealth);
					switch(floatround(fHealth)){
						case 251..399: return EVF::UpdateVehicleDamage(hitid,VEHICLE_DAMAGE_DOORS);
						case 400..599: return EVF::UpdateVehicleDamage(hitid,VEHICLE_DAMAGE_PANELS);
						case 600..700: return EVF::UpdateVehicleDamage(hitid,VEHICLE_DAMAGE_LIGHTS);
					}
				}
			}
		}
		CallRemoteFunction("OnPlayerShotVehicle","dddfd",playerid,hitid,weaponid,fDamage,bodypart);
	}
	#if defined EVF_OnPlayerWeaponShot
		EVF::OnPlayerWeaponShot(playerid,weaponid,hittype,hitid,fX,fY,fZ);
	#endif
	return 1;
}

#if defined _ALS_OnPlayerWeaponShot
	#undef OnPlayerWeaponShot
#else
	#define _ALS_OnPlayerWeaponShot
#endif
#define OnPlayerWeaponShot EVF_OnPlayerWeaponShot
#if defined EVF_OnPlayerWeaponShot
	forward EVF_OnPlayerWeaponShot(playerid,weaponid,hittype,hitid,Float:fX,Float:fY,Float:fZ);
#endif

//Hook: OnPlayerConnect
public OnPlayerConnect(playerid){
	EVF::ModShopStatus[playerid] = false;
	#if defined EVF_OnPlayerConnect
		return EVF::OnPlayerConnect(playerid);
	#else
		return 1;
	#endif
}

#if defined _ALS_OnPlayerConnect
	#undef OnPlayerConnect
#else
	#define _ALS_OnPlayerConnect
#endif
#define OnPlayerConnect EVF_OnPlayerConnect
#if defined EVF_OnPlayerConnect
	forward EVF_OnPlayerConnect(playerid);
#endif

//Hook: OnEnterExitModShop
public OnEnterExitModShop(playerid,enterexit,interiorid){
	EVF::ModShopStatus[playerid] = enterexit;
	#if defined EVF_OnEnterExitModShop
	    return EVF::OnEnterExitModShop(playerid, enterexit, interiorid);
	#else
	    return 1;
	#endif
}

#if defined _ALS_OnEnterExitModShop
	#undef OnEnterExitModShop
#else
	#define _ALS_OnEnterExitModShop
#endif
#define OnEnterExitModShop EVF_OnEnterExitModShop
#if defined EVF_OnEnterExitModShop
	forward EVF_OnEnterExitModShop(playerid, enterexit, interiorid);
#endif

//Hook: OnVehicleMod
public OnVehicleMod(playerid,vehicleid,component){
	if(!IsValidComponentForVehicle(vehicleid,component) || !EVF::ModShopStatus[playerid] || GetPlayerState(playerid) == PLAYER_STATE_PASSENGER){
	    CallRemoteFunction("OnVehicleModEx","iiiii",playerid,vehicleid,component,GetVehicleComponentPrice(component),true);
	    return 0;
	}
	CallRemoteFunction("OnVehicleModEx","iiiii",playerid,vehicleid,component,GetVehicleComponentPrice(component),false);
	#if defined EVF_OnVehicleMod
	    return EVF::OnVehicleMod(playerid,vehicleid,component);
	#else
	    return 1;
	#endif
}

#if defined _ALS_OnVehicleMod
	#undef OnVehicleMod
#else
	#define _ALS_OnVehicleMod
#endif
#define OnVehicleMod EVF_OnVehicleMod
#if defined EVF_OnVehicleMod
	forward EVF_OnVehicleMod(playerid, vehicleid, component);
#endif

#if defined EVF_Streamer
	EVF::Function:: EVF::AttachObjectToVehicle(STREAMER_TAG_OBJECT:objectid,vehicleid,Float:OffsetX,Float:OffsetY,Float:OffsetZ,Float:RotX,Float:RotY,Float:RotZ){
		for(new i = 0; i < MAX_VEHICLE_ATTACHED_OBJECTS; i++){
			if(!IsValidDynamicObject(EVF::VehicleTempData[vehicleid][e_attached_object][i])){
				if(AttachDynamicObjectToVehicle(objectid,vehicleid,OffsetX,OffsetY,OffsetZ,RotX,RotY,RotZ)){
					EVF::VehicleTempData[vehicleid][e_attached_object][i] = objectid;
					return true;
				}
			}
		}
		return false;
	}

	#if defined _ALS_AttachDynamicObjectToV
		#undef AttachDynamicObjectToVehicle
	#else
		#define _ALS_AttachDynamicObjectToV
	#endif
	#define AttachDynamicObjectToVehicle EVF_AttachObjectToVehicle
	
	//Hook: OnPlayerEditDynamicObject
	public OnPlayerEditDynamicObject(playerid,STREAMER_TAG_OBJECT:objectid,response,Float:x,Float:y,Float:z,Float:rx,Float:ry,Float:rz){
		if(IsValidVehicle(EVF::PlayerTempData[playerid][e_editor_vehicle])){
			if(EVF::PlayerTempData[playerid][e_editor_object] == STREAMER_TAG_OBJECT:INVALID_STREAMER_ID){
				if(GetVehiclePropertyValue(EVF::PlayerTempData[playerid][e_editor_vehicle],e_VEHICLE_EDITOR) == _:objectid){
					SetVehiclePos(EVF::PlayerTempData[playerid][e_editor_vehicle],x,y,z);
					SetVehicleZAngle(EVF::PlayerTempData[playerid][e_editor_vehicle],rz);

					CallLocalFunction("OnPlayerEditVehicle","iiiffff",playerid,EVF::PlayerTempData[playerid][e_editor_vehicle],response,x,y,z,rz);

					switch(response){
						case EDIT_RESPONSE_CANCEL, EDIT_RESPONSE_FINAL:{
							DestroyDynamicObject(objectid);
							SetVehiclePropertyValue(EVF::PlayerTempData[playerid][e_editor_vehicle],e_VEHICLE_EDITOR,INVALID_STREAMER_ID);

							SetVehicleVelocity(EVF::PlayerTempData[playerid][e_editor_vehicle],0.0,0.0,0.0);

							EVF::PlayerTempData[playerid][e_editor_vehicle] = INVALID_VEHICLE_ID;
							EVF::PlayerTempData[playerid][e_editor_object] = STREAMER_TAG_OBJECT:INVALID_STREAMER_ID;
						}
					}
				}
			} else {
				if(GetVehiclePropertyValue(EVF::PlayerTempData[playerid][e_editor_vehicle],e_VEHICLE_EDITOR) == _:objectid){
					switch(response){
						case EDIT_RESPONSE_CANCEL, EDIT_RESPONSE_FINAL:{
							new Float:pos[4];
							GetVehiclePos(EVF::PlayerTempData[playerid][e_editor_vehicle],pos[0],pos[1],pos[2]);
							GetVehicleZAngle(EVF::PlayerTempData[playerid][e_editor_vehicle],pos[3]);

							new Float:new_pos[4];
							new_pos[0] = x - pos[0];
							new_pos[1] = y - pos[1];
							new_pos[2] = z - pos[2];
							new_pos[3] = rz - pos[3];

							new Float:final_pos[2];
							final_pos[0] = (new_pos[0] * floatcos(new_pos[3],degrees)) + (new_pos[1] * floatsin(new_pos[3],degrees));
							final_pos[1] = (new_pos[1] * floatcos(new_pos[3],degrees)) - (new_pos[0] * floatsin(new_pos[3],degrees));

							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]);

							SetVehiclePropertyValue(EVF::PlayerTempData[playerid][e_editor_vehicle],e_VEHICLE_EDITOR,0);

							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]);
							
							EVF::PlayerTempData[playerid][e_editor_vehicle] = INVALID_VEHICLE_ID;
							EVF::PlayerTempData[playerid][e_editor_object] = STREAMER_TAG_OBJECT:INVALID_STREAMER_ID;
						}
						default: {
							CallLocalFunction("OnPlayerEditVehicleObject","iiiffffff",playerid,EVF::PlayerTempData[playerid][e_editor_vehicle],response,x,y,z,rx,ry,rz);
						}
					}
				}
			}
		}
		#if defined EVF_OnPlayerEditDynamicObject
			EVF::OnPlayerEditDynamicObject(playerid,objectid,response,x,y,z,rx,ry,rz);
		#endif
		return 1;
	}

	#if defined _ALS_OnPlayerEditDynamicObject
		#undef OnPlayerEditDynamicObject
	#else
		#define _ALS_OnPlayerEditDynamicObject
	#endif
	#define OnPlayerEditDynamicObject EVF_OnPlayerEditDynamicObject
	#if defined EVF_OnPlayerEditDynamicObject
		forward EVF_OnPlayerEditDynamicObject(playerid,STREAMER_TAG_OBJECT:objectid,response,Float:x,Float:y,Float:z,Float:rx,Float:ry,Float:rz);
	#endif
#endif

//Hook: OnPlayerUpdate
public OnPlayerUpdate(playerid){
 	if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER){
		new vehicleid = GetPlayerVehicleID(playerid), Float:speedcap = GetVehicleSpeedCap(vehicleid);
		if(speedcap != 0.0){
			new Float:vel[3], Float:speed;
			GetVehicleVelocity(vehicleid,vel[0],vel[1],vel[2]);
			speed = EVF::GetVehicleSpeed(vehicleid);
			if(speed > speedcap && speed > 0.0){
				CallRemoteFunction("OnPlayerReachSpeedCapLimit","iif",playerid,vehicleid,speed);
				vel[0] = (vel[0] / speed) * speedcap;
				vel[1] = (vel[1] / speed) * speedcap;
				vel[2] = (vel[2] / speed) * speedcap;
				SetVehicleVelocity(vehicleid,vel[0],vel[1],vel[2]);
			}
		}
		new trailerid = GetVehicleTrailer(vehicleid);
		if(EVF::VehicleTrailerID[vehicleid] != trailerid){
			if(trailerid != 0){
				CallRemoteFunction("OnTrailerHooked","iii",playerid,vehicleid,trailerid);
				#if defined EVF_Streamer
					EVF::SetCarBlinking(trailerid,EVF::BlinkSide[vehicleid]);
				#endif
			} else {
				if(EVF::VehicleTrailerID[vehicleid] != INVALID_VEHICLE_ID){
					CallRemoteFunction("OnTrailerUnhooked","iii",playerid,vehicleid,EVF::VehicleTrailerID[vehicleid]);
				
					#if defined EVF_Streamer
						if(GetPlayerVehicleSeat(playerid) == 0){
							EVF::DisableCarBlinking(EVF::VehicleTrailerID[vehicleid]);
						}
					#endif
				}
			}
			EVF::VehicleTrailerID[vehicleid] = trailerid;
		}
	}
	#if defined EVF_OnPlayerUpdate
		EVF::OnPlayerUpdate(playerid);
	#endif
	return 1;
}

#if defined EVF_OnPlayerUpdate
	forward EVF_OnPlayerUpdate(playerid);
#endif
#if defined _ALS_OnPlayerUpdate
	#undef OnPlayerUpdate
#else
	#define _ALS_OnPlayerUpdate
#endif
#define OnPlayerUpdate EVF_OnPlayerUpdate

//Hook: OnPlayerStateChange
public OnPlayerStateChange(playerid,newstate,oldstate){
	if(newstate == PLAYER_STATE_DRIVER){
		new vehicleid = GetPlayerVehicleID(playerid);
		if(IsVehicleBombed(vehicleid)){
			if(!IsVehicleBombActivated(vehicleid)){
				CallRemoteFunction("OnVehicleBombActivate","i",vehicleid);
				new interval = (GetVehicleBomb(vehicleid) - 1750);
				if(interval < 1750){
					SetVehicleParams(vehicleid,VEHICLE_TYPE_ALARM,true);
					SetVehiclePropertyValue(vehicleid,e_VEHICLE_BOMB_TIMER,SetTimerEx("EVF_OnVehicleBombExplode",GetVehicleBomb(vehicleid),false,"ii",playerid,vehicleid));
				} else {
					SetVehiclePropertyValue(vehicleid,e_VEHICLE_BOMB_TIMER,SetTimerEx("EVF_OnVehicleBombActivate",interval,false,"ii",playerid,vehicleid));
				}
			}
		}
		if(IsVehicleSticky(vehicleid)){
			SetVehicleParams(vehicleid,VEHICLE_TYPE_ENGINE,false);
		}
	}
	if(oldstate == PLAYER_STATE_DRIVER){
		new vehicleid = GetPlayerVehicleID(playerid);
		if(IsVehicleSticky(vehicleid)){
			SetVehicleParams(vehicleid,VEHICLE_TYPE_ENGINE,true);
		}
		#if defined EVF_Streamer
			EVF::DisableCarBlinking(vehicleid);
			new trailerid = GetVehicleTrailer(vehicleid);
			if(IsValidVehicle(trailerid)) EVF::DisableCarBlinking(trailerid);
		#endif
	}
	#if defined EVF_OnPlayerStateChange
		EVF::OnPlayerStateChange(playerid,newstate,oldstate);
	#endif
	return 1;
}
#if defined EVF_OnPlayerStateChange
	forward EVF_OnPlayerStateChange(playerid,newstate,oldstate);
#endif
#if defined _ALS_OnPlayerStateChange
	#undef OnPlayerStateChange
#else
	#define _ALS_OnPlayerStateChange
#endif
#define OnPlayerStateChange EVF_OnPlayerStateChange

//Hook: OnPlayerKeyStateChange
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys){
	if(newkeys & KEY_CROUCH){
		if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER){
			new horn = GetVehicleHorn(GetPlayerVehicleID(playerid));
			if(horn != 0){
				new Float:pos[3];
				GetPlayerPos(playerid,pos[0],pos[1],pos[2]);
				EVF::Foreach(i){
					if(IsPlayerInRangeOfPoint(i,35.0,pos[0],pos[1],pos[2])){
						PlayerPlaySound(playerid,horn,pos[0],pos[1],pos[2]);
					}
				}
			}
		}
	}
	
	#if defined EVF_Streamer
		if(EVF::IsToggledVehicleBlinking()){
			new vehicleid = GetPlayerVehicleID(playerid);
			if(IsValidVehicle(vehicleid)){
				if(GetPlayerVehicleSeat(playerid) == 0){
					if(EVF::KeyPressed(KEY_LOOK_BEHIND)){
						if(!EVF::IsCarBlinking(vehicleid)){
							EVF::SetCarBlinking(vehicleid,EVF_CAR_BLINK_EMERGENCY);
						} else {
							EVF::DisableCarBlinking(vehicleid);
						}
					}
					if(EVF::KeyPressed(KEY_LOOK_LEFT)){
						if(!EVF::IsCarBlinking(vehicleid)){
							EVF::SetCarBlinking(vehicleid,EVF_CAR_BLINK_LEFT);
						} else {
							EVF::DisableCarBlinking(vehicleid);
						}
					} else if(EVF::KeyPressed(KEY_LOOK_RIGHT)){
						if(!EVF::IsCarBlinking(vehicleid)){
							EVF::SetCarBlinking(vehicleid,EVF_CAR_BLINK_RIGHT);
						} else {
							EVF::DisableCarBlinking(vehicleid);
						}
					}
					if(EVF::IsCarBlinking(vehicleid)){
						new Float:tmp_a, Float:tmp_b = EVF::BlinkR[vehicleid];
						GetVehicleZAngle(vehicleid,tmp_a);
						
						switch(EVF::BlinkSide[vehicleid]){
							case EVF_CAR_BLINK_LEFT: {
								tmp_b += 55.0;
								if(tmp_b > 360.0) tmp_b -= 360.0;
								if(tmp_a < tmp_b-180.0) tmp_a = tmp_a+360.0;
								if(tmp_b < tmp_a-180.0) tmp_b = tmp_b+360.0;

								if(tmp_a > tmp_b){
									EVF::DisableCarBlinking(vehicleid);
								}
							}
							case EVF_CAR_BLINK_RIGHT: {
								tmp_b -= 55.0;
								if(tmp_b < 0.0) tmp_b = 360.0 + tmp_b;
								if(tmp_a < tmp_b-180.0) tmp_a = tmp_a+360.0;
								if(tmp_b < tmp_a-180.0) tmp_b = tmp_b+360.0;

								if(tmp_a < tmp_b){
									EVF::DisableCarBlinking(vehicleid);
								}
							}
						}
					}
				}
			}
		}
	#endif
	
	#if defined EVF_OnPlayerKeyStateChange
		EVF::OnPlayerKeyStateChange(playerid, newkeys, oldkeys);
	#endif
	return 1;
}

#if defined EVF_OnPlayerKeyStateChange
	forward EVF_OnPlayerKeyStateChange(playerid, newkeys, oldkeys);
#endif
#if defined _ALS_OnPlayerKeyStateChange
	#undef OnPlayerKeyStateChange
#else
	#define _ALS_OnPlayerKeyStateChange
#endif
#define OnPlayerKeyStateChange EVF_OnPlayerKeyStateChange

//Hook: OnVehicleDamageStatusUpdate
public OnVehicleDamageStatusUpdate(vehicleid, playerid){
	new panels, doors, lights, tires;
	GetVehicleDamageStatus(vehicleid, panels, doors, lights, tires);

	if(!IsVehicleDamageToggled(vehicleid,VEHICLE_DAMAGE_PANELS)) EVF::UpdateVehicleDamageStatus(vehicleid,VEHICLE_DAMAGE_PANELS,0);
	if(!IsVehicleDamageToggled(vehicleid,VEHICLE_DAMAGE_DOORS)) EVF::UpdateVehicleDamageStatus(vehicleid,VEHICLE_DAMAGE_DOORS,0);
	if(!IsVehicleDamageToggled(vehicleid,VEHICLE_DAMAGE_LIGHTS)) EVF::UpdateVehicleDamageStatus(vehicleid,VEHICLE_DAMAGE_LIGHTS,0);
	if(!IsVehicleDamageToggled(vehicleid,VEHICLE_DAMAGE_TIRES)) EVF::UpdateVehicleDamageStatus(vehicleid,VEHICLE_DAMAGE_TIRES,0);

	#if defined EVF_OVDSU
		EVF::OVDSU(vehicleid,playerid);
	#endif
	return 1;
}
#if defined EVF_OVDSU
	forward EVF_OVDSU(vehicleid, playerid);
#endif
#if defined _ALS_OnVehicleDamageStatusU
	#undef OnVehicleDamageStatusUpdate
#else
	#define _ALS_OnVehicleDamageStatusU
#endif
#define OnVehicleDamageStatusUpdate EVF_OVDSU

//Hook: OnVehicleSpawn
public OnVehicleSpawn(vehicleid){
	SetVehiclePropertyValue(vehicleid,e_VEHICLE_PAINTJOB,RESET_PAINTJOB_ID);

	new color1,color2;
	if(EVF::GetVehicleColor(vehicleid,color1,color2)){
		ChangeVehicleColor(vehicleid,color1,color2);
	}
	
	#if defined EVF_Streamer
		EVF::DisableCarBlinking(vehicleid);
	#endif

	new Float:pos[3];
	GetVehiclePos(vehicleid,pos[0],pos[1],pos[2]);

	new Float:angle;
	GetVehicleZAngle(vehicleid,angle);

	new Float:vehicle_pos[3],Float:vehicle_angle,vehicle_worldid,vehicle_interiorid;
	EVF::GetVehicleSpawnInfo(vehicleid,vehicle_pos[0],vehicle_pos[1],vehicle_pos[2],vehicle_angle,vehicle_worldid,vehicle_interiorid);

	if(vehicle_pos[0] != 0.0 && vehicle_pos[1] != 0.0 && vehicle_pos[2] != 0.0){
		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)){
			TeleportVehicle(vehicleid,vehicle_pos[0],vehicle_pos[1],vehicle_pos[2],vehicle_angle,vehicle_worldid,vehicle_interiorid);
		}
	}

	#if defined EVF_OnVehicleSpawn
		EVF::OnVehicleSpawn(vehicleid);
	#endif
	return 1;
}

#if defined EVF_OnVehicleSpawn
	forward EVF_OnVehicleSpawn(vehicleid);
#endif
#if defined _ALS_OnVehicleSpawn
	#undef OnVehicleSpawn
#else
	#define _ALS_OnVehicleSpawn
#endif
#define OnVehicleSpawn EVF_OnVehicleSpawn

//Hook: OnVehicleDeath
public OnVehicleDeath(vehicleid,killerid){
	
	#if defined EVF_Streamer
		EVF::DisableCarBlinking(vehicleid);
	#endif

	#if defined EVF_OnVehicleDeath
		EVF::OnVehicleDeath(vehicleid,killerid);
	#endif
	return 1;
}

#if defined EVF_OnVehicleDeath
	forward EVF_OnVehicleDeath(vehicleid,killerid);
#endif
#if defined _ALS_OnVehicleDeath
	#undef OnVehicleDeath
#else
	#define _ALS_OnVehicleDeath
#endif
#define OnVehicleDeath EVF_OnVehicleDeath

EVF::Public:: EVF::OnRequestResponse(index, response_code, data[]){
	if(response_code == 200){
		if(isnull(data)) return 0;
		new EVF::version[16], EVF::ver, EVF::file_ver = EVF_Version;
		strmid(EVF::version,data,0,strlen(data));
		EVF::ver = strval(EVF::version);
		if(EVF::ver > EVF::file_ver){
			print(" ");
			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));
			print("http://adm.ct8.pl/d/EVF.inc");
			print(" ");
		}
	}
	return 1;
}

new EVF::UpdateTimer = -1;

EVF::Function:: EVF::Init(){
	SetSVarInt("ADM:EVF:ACTIVE",EVF::GetActiveCount()+1);
	
	//Welcome to EVF
	new EVF::ver_name[16];
	format(EVF::ver_name,sizeof(EVF::ver_name),"%d.%d.%d",(EVF_Version / 10000),((EVF_Version % 10000) / 100),((EVF_Version % 10000) % 100));
	if(GetSVarInt("ADM:EVF:INIT") == 0){
		SetSVarInt("ADM:EVF:INIT",1);
		printf("[ADM] Info: Load EVF v%s for SA:MP %s by Abyss Morgan",EVF::ver_name,EVF_SAMP_Version);
	}
	
	if(GetSVarInt("ADM:EVF:VERCHECK") == 0){
		SetSVarInt("ADM:EVF:VERCHECK",1);
		new EVF::send_data[128];
		format(EVF::send_data,sizeof(EVF::send_data),"adm.ct8.pl/detector/_check.php?module=EVF&version=%d",EVF_Version);
		HTTP(0,HTTP_GET,EVF::send_data,"","EVF_OnRequestResponse");
	}
	
	EVF::UpdateTimer = SetTimerEx("OnVehicleTimeUpdate",VEHICLE_UPDATE_INTERVAL,true,"");
}

EVF::Function:: EVF::Exit(){
	SetSVarInt("ADM:EVF:ACTIVE",EVF::GetActiveCount()-1);
	
	//Goodbye EVF
	new EVF::ver_name[16];
	format(EVF::ver_name,sizeof(EVF::ver_name),"%d.%d.%d",(EVF_Version / 10000),((EVF_Version % 10000) / 100),((EVF_Version % 10000) % 100));
	if(EVF::GetActiveCount() == 0){
		SetSVarInt("ADM:EVF:INIT",0);
		printf("[ADM] Info: Unload EVF v%s for SA:MP %s by Abyss Morgan",EVF::ver_name,EVF_SAMP_Version);
	}
	if(EVF::UpdateTimer != -1) KillTimer(EVF::UpdateTimer);
}

new bool:CRC_EVFInit = true,
	bool:CRC_EVFExit = true;
	
//Hook: OnFilterScriptInit
public OnFilterScriptInit(){
	if(CRC_EVFInit){
		CRC_EVFInit = false;
		EVF::Init();
	}
	#if defined EVF_OnFilterScriptInit
		EVF::OnFilterScriptInit();
	#endif
	return 1;
}

#if defined _ALS_OnFilterScriptInit
	#undef OnFilterScriptInit
#else
	#define _ALS_OnFilterScriptInit
#endif
#define OnFilterScriptInit EVF_OnFilterScriptInit
#if defined EVF_OnFilterScriptInit
	forward EVF_OnFilterScriptInit();
#endif

//Hook: OnGameModeInit
public OnGameModeInit(){
	if(CRC_EVFInit){
		CRC_EVFInit = false;
		EVF::Init();
	}
	#if defined EVF_OnGameModeInit
		EVF::OnGameModeInit();
	#endif
	return 1;
}

#if defined _ALS_OnGameModeInit
	#undef OnGameModeInit
#else
	#define _ALS_OnGameModeInit
#endif
#define OnGameModeInit EVF_OnGameModeInit
#if defined EVF_OnGameModeInit
	forward EVF_OnGameModeInit();
#endif

//Hook: OnFilterScriptExit
public OnFilterScriptExit(){
	if(CRC_EVFExit){
		CRC_EVFExit = false;
		EVF::Exit();
	}
	#if defined EVF_OnFilterScriptExit
		EVF::OnFilterScriptExit();
	#endif
	return 1;
}

#if defined _ALS_OnFilterScriptExit
	#undef OnFilterScriptExit
#else
	#define _ALS_OnFilterScriptExit
#endif
#define OnFilterScriptExit EVF_OnFilterScriptExit
#if defined EVF_OnFilterScriptExit
	forward EVF_OnFilterScriptExit();
#endif

//Hook: OnGameModeExit
public OnGameModeExit(){
	if(CRC_EVFExit){
		CRC_EVFExit = false;
		EVF::Exit();
	}
	#if defined EVF_OnGameModeExit
		EVF::OnGameModeExit();
	#endif
	return 1;
}

#if defined _ALS_OnGameModeExit
	#undef OnGameModeExit
#else
	#define _ALS_OnGameModeExit
#endif
#define OnGameModeExit EVF_OnGameModeExit
#if defined EVF_OnGameModeExit
	forward EVF_OnGameModeExit();
#endif

#pragma unused EVF_VehicleName
#pragma unused EVF_TopSpeed
#pragma unused EVF_PlayerTempData
#pragma unused EVF_NeonOffsetData

#if !defined _3D_Tryg
	#pragma unused EVF_WeaponDamage
#endif

//EOF