local wheelsSides = { "rb", "rf", "lb", "lf" }
local wheelsShaders = {}
local wheelsShaders2 = {}
local spoilerSahder = {}
local wheelsSize = {
[504] = {0.7, 0.7},
[404] = {0.68, 0.68},
[410] = {0.63, 0.63},
[418] = {0.7, 0.7},
[547] = {0.7, 0.7},
[474] = {0.7, 0.7},
[600] = {0.72, 0.72},
[536] = {0.7, 0.7},
[420] = {0.72, 0.72},
[496] = {0.71, 0.71},
[458] = {0.74, 0.74},
[598] = {0.71, 0.71},
[467] = {0.69, 0.69},
[602] = {0.71, 0.71},
[565] = {0.65, 0.65},
[421] = {0.66, 0.66},
[559] = {0.71, 0.71},
[551] = {0.76, 0.76},
[542] = {0.72, 0.72},
[566] = {0.72, 0.72},
[597] = {0.71, 0.71},
[558] = {0.72, 0.72},
[533] = {0.72, 0.72},
[518] = {0.68, 0.68},
[423] = {0.71, 0.71},
[560] = {0.71, 0.71},
[527] = {0.71, 0.71},
[405] = {0.71, 0.71},
[429] = {0.72, 0.72},
[540] = {0.71, 0.71},
[596] = {0.72, 0.72},
[529] = {0.71, 0.71},
[413] = {0.73, 0.73},
[480] = {0.71, 0.71},
[554] = {0.86, 0.86},
[549] = {0.7, 0.7},
[479] = {0.72, 0.72},
[436] = {0.71, 0.71},
[575] = {0.71, 0.71},
[415] = {0.7, 0.7},
[445] = {0.7, 0.7},
[505] = {0.93, 0.93},
[489] = {0.92, 0.92},
[400] = {0.79, 0.79},
[579] = {0.86, 0.86},
[470] = {0.88, 0.88},
[490] = {0.94, 0.94},
[412] = {0.71, 0.71},
[459] = {0.72, 0.72},
[534] = {0.72, 0.72},
[567] = {0.72, 0.72},
[434] = {0.75, 0.75},
[589] = {0.75, 0.75},
[528] = {0.82, 0.82},
[411] = {0.71, 0.71},
[552] = {0.83, 0.83},
[500] = {0.8, 0.8},
[477] = {0.79, 0.79},
[609] = {0.79, 0.79},
[541] = {0.75, 0.75},
[576] = {0.71, 0.71},
[451] = {0.7, 0.74},
[562] = {0.7, 0.7},
[506] = {0.71, 0.71},
[499] = {0.8, 0.8},
[440] = {0.72, 0.72},
[582] = {0.79, 0.79},
[508] = {0.81, 0.81},
[535] = {0.6, 0.6},
[419] = {0.65, 0.65},
[517] = {0.7, 0.7},
[401] = {0.73, 0.73},
[526] = {0.71, 0.71},
[587] = {0.7, 0.7},
[475] = {0.7, 0.7},
[402] = {0.71, 0.71},
[491] = {0.69, 0.69},
[603] = {0.72, 0.72},
[545] = {0.73, 0.73},
[588] = {0.85, 0.85},
[424] = {0.84, 0.9},
[605] = {0.7, 0.7},
}
local wheelsWidth = {
[504] = 1,
[404] = 1,
[410] = 1,
[418] = 1,
[547] = 1,
[474] = 1,
[600] = 1,
[536] = 1,
[420] = 1,
[496] = 1,
[458] = 1,
[598] = 1,
[467] = 1,
[602] = 1,
[565] = 1,
[421] = 1,
[559] = 1,
[551] = 1,
[542] = 1,
[566] = 1,
[597] = 1,
[558] = 1,
[533] = 1,
[518] = 1,
[423] = 1,
[560] = 1,
[527] = 1,
[405] = 1,
[429] = 1,
[540] = 1,
[596] = 1,
[529] = 1,
[413] = 1,
[480] = 1,
[554] = 1,
[549] = 1,
[479] = 1,
[436] = 1,
[575] = 1,
[415] = 1,
[445] = 1,
[505] = 1.3,
[489] = 1.3,
[400] = 1.3,
[579] = 1.3,
[470] = 1.2,
[490] = 1.3,
[412] = 1,
[459] = 1,
[534] = 1,
[567] = 1,
[434] = 1.2,
[589] = 1,
[528] = 1,
[411] = 1,
[552] = 1,
[500] = 1,
[477] = 1,
[609] = 1,
[541] = 1,
[576] = 1,
[451] = 1,
[562] = 1,
[506] = 1,
[499] = 1,
[440] = 1,
[582] = 1,
[508] = 1,
[535] = 0.8,
[419] = 1,
[517] = 1,
[401] = 1,
[526] = 1,
[587] = 1,
[475] = 1,
[402] = 1,
[491] = 1,
[603] = 1,
[545] = 1,
[588] = 1.1,
[424] = 1.3,
[605] = 1,
}
local tableColosa1 = {}
local tableColosa2 = {}
local tableColosa3 = {}
local tableColosa4 = {}
local tableColosa5 = {}
local tableColosa6 = {}
function createWheels ( vehicle )
if isElement ( vehicle ) and isElementStreamedIn ( vehicle ) then
if getElementDimension ( vehicle ) == getElementDimension ( localPlayer ) then
local col1, col2, col3, col4, col5, col6, col7, col8, col9, col10, col11, col12 = getVehicleColor ( vehicle, true )
local spoler = getElementData ( vehicle, "estSpoiler" ) or false
if spoler then
if not spoilerSahder[vehicle] then
spoilerSahder[vehicle] = dxCreateShader ( "fx/wheels.fx" )
dxSetShaderValue ( spoilerSahder[vehicle], "scaleOffset", {1, 1, 1, 1})
else
engineRemoveShaderFromWorldTexture ( spoilerSahder[vehicle], "tws-spoiler-main", spoler )
end
dxSetShaderValue ( spoilerSahder[vehicle], "gColor", {col4 / 255 * 0.5, col5 / 255 * 0.5, col6 / 255 * 0.5, 1} )
engineApplyShaderToWorldTexture ( spoilerSahder[vehicle], "tws-spoiler-main", spoler )
end
local wh = getElementData ( vehicle, "wheels:objects" ) or {}
if #wh > 0 then
for i, v in pairs ( wh ) do
if isElement ( v ) then
engineRemoveShaderFromWorldTexture ( wheelsShaders[vehicle], "wheelDX", v )
engineRemoveShaderFromWorldTexture ( wheelsShaders2[vehicle], "wheelDX", v )
destroyElement ( v )
end
end
end
local wh = getElementData ( vehicle, "wheels:objects_hidden" ) or {}
if #wh > 0 then
for i, v in pairs ( wh ) do
if isElement ( v ) then
destroyElement ( v )
end
end
end
local upgrades = checkVehicleAddons ( vehicle )
if upgrades then
povernut = 0
local x,y,z = getElementPosition ( vehicle )
local model = getElementModel ( vehicle )
local wheels = {}
local wheels_hidden = {}
tableColosa1[vehicle] = getElementData ( vehicle, "tolst" ) or wheelsWidth[model]
tableColosa2[vehicle] = getElementData ( vehicle, "vynos" ) or 0
tableColosa3[vehicle] = getElementData ( vehicle, "razval" ) or 0
tableColosa4[vehicle] = getElementData ( vehicle, "tolst1" ) or wheelsWidth[model]
tableColosa5[vehicle] = getElementData ( vehicle, "vynos1" ) or 0
tableColosa6[vehicle] = getElementData ( vehicle, "razval1" ) or 0
if not wheelsShaders[vehicle] then
wheelsShaders[vehicle] = dxCreateShader ( "fx/wheels.fx" )
dxSetShaderValue ( wheelsShaders[vehicle], "scaleOffset", {1, 1, 1, 1})
end
if not wheelsShaders2[vehicle] then
wheelsShaders2[vehicle] = dxCreateShader ( "fx/wheels.fx" )
dxSetShaderValue ( wheelsShaders2[vehicle], "scaleOffset", {1, 1, 1, 1})
end
for i, v in ipairs ( wheelsSides ) do
setVehicleComponentVisible ( vehicle, "wheel_"..v.."_dummy", false )
local hiddenWheelObject = createObject ( upgrades, x, y, z )
setElementDimension ( hiddenWheelObject, getElementDimension ( vehicle ) )
setElementInterior ( hiddenWheelObject, getElementInterior ( vehicle ) )
setElementAlpha(hiddenWheelObject,0)
local wheelObject = createObject ( upgrades, x, y, z )
setElementDimension ( wheelObject, getElementDimension ( vehicle ) )
setElementInterior ( wheelObject, getElementInterior ( vehicle ) )
local xc, yc, zc = getVehicleComponentPosition ( vehicle, "wheel_"..v.."_dummy", "parent" )
attachElements ( wheelObject, vehicle, xc, yc, zc )
table.insert ( wheels_hidden, hiddenWheelObject )
table.insert ( wheels, wheelObject )
if v == "rf" or v == "lf" then
setObjectScale ( hiddenWheelObject, tableColosa1[vehicle], wheelsSize[model][1], wheelsSize[model][1] )
setObjectScale ( wheelObject, tableColosa1[vehicle], wheelsSize[model][1], wheelsSize[model][1] )
dxSetShaderValue ( wheelsShaders[vehicle], "gColor", {col7 / 255 * 0.5, col8 / 255 * 0.5, col9 / 255 * 0.5, 1} )
engineApplyShaderToWorldTexture ( wheelsShaders[vehicle], "wheelDX", wheelObject )
else
setObjectScale ( hiddenWheelObject, tableColosa4[vehicle], wheelsSize[model][2], wheelsSize[model][2] )
setObjectScale ( wheelObject, tableColosa4[vehicle], wheelsSize[model][2], wheelsSize[model][2] )
dxSetShaderValue ( wheelsShaders2[vehicle], "gColor", {col10 / 255 * 0.5, col11 / 255 * 0.5, col12 / 255 * 0.5, 1} )
engineApplyShaderToWorldTexture ( wheelsShaders2[vehicle], "wheelDX", wheelObject )
end
end
setElementData ( vehicle, "wheels:objects_hidden", wheels_hidden, false )
setElementData ( vehicle, "wheels:objects", wheels, false )
end
end
end
end
addEvent ( "createWheels", true )
addEventHandler ( "createWheels", root, createWheels )
addEventHandler ( "onClientElementStreamIn", getRootElement (),
function ()
if getElementType ( source ) == "vehicle" then
if not getElementData ( source, "wheels:objects" ) or not isElement ( getElementData ( source, "wheels:objects" )[1] ) then
createWheels ( source )
else
setVehicleComponentVisible ( source, "wheel_rb_dummy", true )
setVehicleComponentVisible ( source, "wheel_rf_dummy", true )
setVehicleComponentVisible ( source, "wheel_lf_dummy", true )
setVehicleComponentVisible ( source, "wheel_lb_dummy", true )
end
end
end
)
addEventHandler ( "onClientElementStreamOut", getRootElement(),
function ()
if getElementType( source ) == "vehicle" then
local spoler = getElementData ( source, "estSpoiler" ) or false
if spoler then
if spoilerSahder[source] then
engineRemoveShaderFromWorldTexture ( spoilerSahder[source], "tws-spoiler-main", spoler )
end
end
local wheels = getElementData ( source, "wheels:objects" ) or {}
if #wheels > 0 then
for i, v in pairs ( wheels ) do
if isElement ( v ) then
engineRemoveShaderFromWorldTexture ( wheelsShaders[source], "wheelDX", v )
engineRemoveShaderFromWorldTexture ( wheelsShaders2[source], "wheelDX", v )
destroyElement ( v )
end
end
setVehicleComponentVisible ( source, "wheel_rb_dummy", true )
setVehicleComponentVisible ( source, "wheel_rf_dummy", true )
setVehicleComponentVisible ( source, "wheel_lf_dummy", true )
setVehicleComponentVisible ( source, "wheel_lb_dummy", true )
end
end
end
)
addEventHandler ( "onClientRender", root,
function()
for i, vehicle in ipairs ( getElementsByType ( "vehicle", root, true) ) do
local wheels = getElementData ( vehicle, "wheels:objects" ) or {}
local wheels_hidden = getElementData ( vehicle, "wheels:objects_hidden" ) or {}
if #wheels > 0 then
local driftType = getElementData ( vehicle, "TypeDrift" )
local podrulivanie = getElementData ( localPlayer, "podrulivanie" )
if getVehicleController ( vehicle ) == localPlayer then
da = true
if podrulivanie and driftType then
Angle, AngleDir = 0, 0 --GetDriftAngle ( vehicle )
vheelsPovorot = getVehicleHandling ( vehicle )[ "steeringLock" ] / 1.5
if Angle and Angle > vheelsPovorot then
Angle = vheelsPovorot
end
end
else
da = false
end
for i, v in ipairs ( wheels ) do
if isElement ( v ) then
local xc,yc,zc = getVehicleComponentPosition ( vehicle, "wheel_"..wheelsSides[i].."_dummy", "parent" )
local xr,yr,zr = getVehicleComponentRotation ( vehicle, "wheel_"..wheelsSides[i].."_dummy" )
setVehicleComponentVisible ( vehicle, "wheel_"..wheelsSides[i].."_dummy", false )
local povorot = 0
if driftType and podrulivanie and da then
if wheelsSides[i] == "lf" then
zr = 180
if AngleDir == "right" then
povorot = Angle
elseif AngleDir == "left" then
povorot = -Angle
end
elseif wheelsSides[i] == "rf" then
zr = 0
if AngleDir == "right" then
povorot = Angle
elseif AngleDir == "left" then
povorot = -Angle
end
end
end
attachElements ( wheels_hidden[i], vehicle, xc, yc, zc, 0, 0, povorot )
if wheelsSides[i] == "rb" then
wynos = tableColosa5[vehicle] or 0
attachElements ( v, wheels_hidden[i], wynos, 0, 0, xr, -tableColosa6[vehicle], zr )
elseif wheelsSides[i] == "rf" then
wynos = tableColosa2[vehicle] or 0
attachElements ( v, wheels_hidden[i], wynos, 0, 0, xr, -tableColosa3[vehicle], zr )
elseif wheelsSides[i] == "lf" then
wynos = -tableColosa2[vehicle] or 0
attachElements ( v, wheels_hidden[i], wynos, 0, 0, xr, -tableColosa3[vehicle], zr )
elseif wheelsSides[i] == "lb" then
wynos = -tableColosa5[vehicle] or 0
attachElements ( v, wheels_hidden[i], wynos, 0, 0, xr, -tableColosa6[vehicle], zr )
end
end
end
else
setVehicleComponentVisible ( vehicle, "wheel_rb_dummy", true )
setVehicleComponentVisible ( vehicle, "wheel_rf_dummy", true )
setVehicleComponentVisible ( vehicle, "wheel_lf_dummy", true )
setVehicleComponentVisible ( vehicle, "wheel_lb_dummy", true )
end
end
end
)
addEventHandler ( "onClientElementDestroy", getRootElement(),
function ()
if getElementType ( source ) == "vehicle" then
local spoler = getElementData ( source, "estSpoiler" ) or false
if spoler then
if spoilerSahder[source] then
engineRemoveShaderFromWorldTexture ( spoilerSahder[source], "tws-spoiler-main", spoler )
end
end
local wheels = getElementData ( source, "wheels:objects" ) or {}
if #wheels > 0 then
for i, v in pairs ( wheels ) do
if isElement ( v ) then
engineRemoveShaderFromWorldTexture ( wheelsShaders[source], "wheelDX", v )
engineRemoveShaderFromWorldTexture ( wheelsShaders2[source], "wheelDX", v )
destroyElement ( v )
end
end
end
local wh = getElementData ( source, "wheels:objects_hidden" ) or {}
if #wh > 0 then
for i, v in pairs ( wh ) do
if isElement ( v ) then
destroyElement ( v )
end
end
end
end
end
)
addEventHandler ("onClientVehicleExplode", getRootElement(),
function()
if isElement ( source ) then
local wheels = getElementData ( source, "wheels:objects" ) or {}
if #wheels > 0 then
for i, v in pairs ( wheels ) do
if isElement ( v ) then
engineRemoveShaderFromWorldTexture ( wheelsShaders[source], "wheelDX", v )
engineRemoveShaderFromWorldTexture ( wheelsShaders2[source], "wheelDX", v )
destroyElement ( v )
end
end
end
end
end
)
function checkVehicleAddons ( vehicle )
local upgrade = getVehicleUpgradeOnSlot ( vehicle, 12 )
if upgrade then
if upgrade == 0 then
return false
else
return upgrade
end
end
return false
end
addEventHandler ( "onClientVehicleEnter", getRootElement(),
function ( thePlayer, seat )
if thePlayer == getLocalPlayer() then
setControlState ( "vehicle_left", false )
setControlState ( "vehicle_right", false )
end
end
)
function carSpeed ( veh )
local vx, vy, vz = getElementVelocity ( veh )
local speed = math.floor ( ( ( vx ^ 2 + vy ^ 2 + vz ^ 2 ) ^ ( 0.6 ) ) * 200 ) / 2
return speed
end