add sborka

This commit is contained in:
2026-03-31 10:27:04 +03:00
commit f5e5f56c84
2345 changed files with 382127 additions and 0 deletions

View File

@@ -0,0 +1,271 @@
AddCSLuaFile()
ENT.Base = "lvs_base_wheeldrive"
DEFINE_BASECLASS( "lvs_base_wheeldrive" )
ENT.PrintName = "[LVS] Truck Base"
ENT.Author = "Luna"
ENT.Information = "Luna's Vehicle Script"
ENT.Category = "[LVS] - Trucks - Pack"
ENT.Spawnable = false
ENT.AdminSpawnable = false
ENT.WheelBrakeApplySound = "LVS.Brake.Apply"
ENT.WheelBrakeReleaseSound = "LVS.Brake.Release"
ENT.EngineRevLimited = true
ENT.EngineIgnitionTime = 0
ENT.EngineStartStopVolume = 1.0
ENT.EngineStartSound = "common/null.wav"
ENT.EngineStopSound = "common/null.wav"
ENT.TransShiftSound = "common/null.wav"
if CLIENT then
ENT.TireSoundTypes = {
["roll"] = "lvs/vehicles/generic/heavywheel_roll.wav",
["roll_racing"] = "lvs/vehicles/generic/wheel_roll.wav",
["roll_dirt"] = "lvs/vehicles/generic/heavywheel_roll_dirt.wav",
["roll_wet"] = "lvs/vehicles/generic/wheel_roll_wet.wav",
["roll_damaged"] = "lvs/wheel_damaged_loop.wav",
["skid"] = "lvs/vehicles/generic/heavywheel_skid.wav",
["skid_racing"] = "lvs/vehicles/generic/wheel_skid_racing.wav",
["skid_dirt"] = "lvs/vehicles/generic/heavywheel_skid_dirt.wav",
["skid_wet"] = "lvs/vehicles/generic/wheel_skid_wet.wav",
["tire_damage_layer"] = "lvs/wheel_destroyed_loop.wav",
}
function ENT:TireSoundThink()
for snd, _ in pairs( self.TireSoundTypes ) do
local T = self:GetTireSoundTime( snd )
if T > 0 then
local speed = self:GetVelocity():Length()
local sound = self:StartTireSound( snd )
if string.StartsWith( snd, "skid" ) or snd == "tire_damage_layer" then
local vel = speed
speed = math.max( math.abs( self:GetWheelVelocity() ) - vel, 0 ) * 5 + vel
end
local volume = math.min(speed / 400,1) ^ 2 * T
local pitch = 100 + math.Clamp((speed - 50) / 20,0,155)
sound:ChangeVolume( volume, 0 )
sound:ChangePitch( pitch )
else
self:StopTireSound( snd )
end
end
end
function ENT:LVSHudPaintInfoText( X, Y, W, H, ScrX, ScrY, ply )
BaseClass.LVSHudPaintInfoText( self, X, Y, W, H, ScrX, ScrY, ply )
if ply ~= self:GetDriver() then return end
local Throttle = self:GetThrottle()
local MaxThrottle = self:GetMaxThrottle()
if self:GetRacingHud() or MaxThrottle >= 0.99 then return end
if MaxThrottle <= 0.51 then
MaxThrottle = math.min(Throttle,MaxThrottle)
end
local hX = X + W - H * 0.5
local hY = Y + H * 0.25 + H * 0.25
local radius = H * 0.35
local rad1 = radius * 0.8
local rad2 = radius * 1.2
local ang = math.rad( 92 + MaxThrottle * 360 )
surface.SetDrawColor( 255, 0, 0, 255 )
for i = -8,8 do
local printang = ang + math.rad( i * 0.35 )
local startX = hX + math.cos( printang ) * rad1
local startY = hY + math.sin( printang ) * rad1
local endX = hX + math.cos( printang ) * rad2
local endY = hY + math.sin( printang ) * rad2
surface.DrawLine( startX, startY, endX, endY )
end
end
return
end
function ENT:UpdateReverseSound()
local EntTable = self:GetTable()
local ReverseSoundHandler = EntTable._ReverseSoundHandler
if not IsValid( ReverseSoundHandler ) then return end
local IsActive = ReverseSoundHandler:GetActive()
local ShouldActive = self:GetActive() and self:GetReverse()
if ShouldActive then
if self:GetVelocity():LengthSqr() < 250 and self:GetThrottle() == 0 then
ShouldActive = false
end
end
if IsActive == ShouldActive then return end
ReverseSoundHandler:SetActive( ShouldActive )
end
function ENT:AddReverseSound( pos, snd, snd_interior )
if IsValid( self._ReverseSoundHandler ) then return end
if not snd then snd = "lvs/vehicles/generic/reverse_warning_beep.wav" end
self._ReverseSoundHandler = self:AddSoundEmitter( pos, snd, snd_interior )
self._ReverseSoundHandler:SetSoundLevel( 65 )
return self._ReverseSoundHandler
end
function ENT:LerpBrake( Brake )
local Old = self:GetBrake()
BaseClass.LerpBrake( self, Brake )
local New = self:GetBrake()
self:OnBrakeChanged( Old, New )
end
function ENT:OnBrakeChanged( Old, New )
if Old == New then return end
local BrakeActive = New ~= 0
if BrakeActive == self._OldBrakeActive then return end
self._OldBrakeActive = BrakeActive
if BrakeActive then
if self:GetVelocity():Length() > 100 then
self:EmitSound( self.WheelBrakeApplySound, 75, 100, 1 )
end
return
end
self:EmitSound( self.WheelBrakeReleaseSound, 75, math.random(90,110), 1 )
end
function ENT:PostInitialize( PObj )
BaseClass.PostInitialize( self, PObj )
self:OnCoupleChanged( nil, nil, false )
end
function ENT:OnCoupleChanged( targetVehicle, targetHitch, active )
self.HitchIsHooked = active
end
function ENT:GetEngineTorque()
local EntTable = self:GetTable()
local MaxVelocity = EntTable.MaxVelocity
local Velocity = self:GetVelocity():Length()
local Geared = (MaxVelocity / EntTable.TransGears) * 0.5
local TargetValue = EntTable.HitchIsHooked and 1 or math.min( math.max( 1 - (math.max( Velocity - Geared, 0 ) / Geared) , 0.5 ) + math.max( (Velocity / MaxVelocity) ^ 2 - 0.5, 0 ), 1 )
if TargetValue ~= self:GetMaxThrottle() then
self:SetMaxThrottle( TargetValue )
end
return BaseClass.GetEngineTorque( self )
end
function ENT:OnHandbrakeActiveChanged( Active )
if Active then
if self:GetVelocity():Length() > 100 then
self:EmitSound( self.WheelBrakeApplySound, 75, 100, 1 )
self._AllowReleaseSound = true
end
else
if self._AllowReleaseSound then
self._AllowReleaseSound = nil
self:EmitSound( self.WheelBrakeReleaseSound, 75, math.random(90,110), 1 )
end
end
end
function ENT:HandleStart()
self:UpdateReverseSound()
BaseClass.HandleStart( self )
local Engine = self:GetEngine()
if not IsValid( Engine ) then return end
local EntTable = self:GetTable()
local ShouldStart = EntTable.DoEngineStart == true
local T = CurTime()
if EntTable.OldShouldStart ~= ShouldStart then
EntTable.OldShouldStart = ShouldStart
if ShouldStart then
EntTable.EngineStartTime = T + EntTable.EngineIgnitionTime
Engine:EmitSound( self.EngineStartSound, 75, 100, self.EngineStartStopVolume )
end
end
if not EntTable.EngineStartTime or EntTable.EngineStartTime > T then return end
EntTable.EngineStartTime = nil
if self:GetEngineActive() then return end
self:StartEngine()
end
function ENT:ToggleEngine()
local Engine = self:GetEngine()
if not IsValid( Engine ) or Engine:GetDestroyed() then
BaseClass.ToggleEngine( self )
return
end
if self:GetEngineActive() then
self:StopEngine()
else
self.DoEngineStart = true
end
end
function ENT:StopEngine()
BaseClass.StopEngine( self )
self.EngineStartTime = nil
self.DoEngineStart = false
self.OldShouldStart = false
local Engine = self:GetEngine()
if not IsValid( Engine ) then return end
Engine:EmitSound( self.EngineStopSound, 75, 100, self.EngineStartStopVolume )
end