add sborka
This commit is contained in:
@@ -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
|
||||
Reference in New Issue
Block a user