Files
wnsrc/lua/entities/gmod_sent_vehicle_fphysics_base/shared.lua
lifestorm 9c918c46e5 Upload
2024-08-04 23:12:27 +03:00

315 lines
9.6 KiB
Lua

--[[
| This file was obtained through the combined efforts
| of Madbluntz & Plymouth Antiquarian Society.
|
| Credits: lifestorm, Gregory Wayne Rossel JR.,
| Maloy, DrPepper10 @ RIP, Atle!
|
| Visit for more: https://plymouth.thetwilightzone.ru/
--]]
ENT.Base = "lvs_base"
ENT.PrintName = "Comedy Effect"
ENT.Author = "Blu"
ENT.Information = ""
ENT.Category = "Fun + Games"
ENT.Spawnable = false
ENT.AdminSpawnable = false
ENT.AutomaticFrameAdvance = true
ENT.RenderGroup = RENDERGROUP_BOTH
ENT.Editable = true
-- this needs to be here for some addons
ENT.IsSimfphyscar = true
ENT.LVSsimfphys = true
ENT.MaxHealth = -1
ENT.MouseSteerAngle = 20
ENT.MouseSteerExponent = 2
ENT.lvsDisableZoom = false
ENT.DoNotDuplicate = true
function ENT:SetupDataTables()
self:AddDT( "Int", "AITEAM", { KeyName = "aiteam", Edit = { type = "Int", order = 0,min = 0, max = 3, category = "AI"} } )
self:AddDT( "Float", "SteerSpeed", { KeyName = "steerspeed", Edit = { type = "Float", order = 1,min = 1, max = 16, category = "Steering"} } )
self:AddDT( "Float", "FastSteerConeFadeSpeed", { KeyName = "faststeerconefadespeed", Edit = { type = "Float", order = 2,min = 1, max = 5000, category = "Steering"} } )
self:AddDT( "Float", "FastSteerAngle", { KeyName = "faststeerangle", Edit = { type = "Float", order = 3,min = 0, max = 1, category = "Steering"} } )
self:AddDT( "Float", "FrontSuspensionHeight", { KeyName = "frontsuspensionheight", Edit = { type = "Float", order = 4,min = -1, max = 1, category = "Suspension" } } )
self:AddDT( "Float", "RearSuspensionHeight", { KeyName = "rearsuspensionheight", Edit = { type = "Float", order = 5,min = -1, max = 1, category = "Suspension" } } )
self:AddDT( "Int", "EngineSoundPreset", { KeyName = "enginesoundpreset", Edit = { type = "Int", order = 6,min = -1, max = 23, category = "Engine"} } )
self:AddDT( "Int", "IdleRPM", { KeyName = "idlerpm", Edit = { type = "Int", order = 7,min = 1, max = 25000, category = "Engine"} } )
self:AddDT( "Int", "LimitRPM", { KeyName = "limitrpm", Edit = { type = "Int", order = 8,min = 4, max = 25000, category = "Engine"} } )
self:AddDT( "Int", "PowerBandStart", { KeyName = "powerbandstart", Edit = { type = "Int", order = 9,min = 2, max = 25000, category = "Engine"} } )
self:AddDT( "Int", "PowerBandEnd", { KeyName = "powerbandend", Edit = { type = "Int", order = 10,min = 3, max = 25000, category = "Engine"} } )
self:AddDT( "Float", "MaxTorque", { KeyName = "maxtorque", Edit = { type = "Float", order = 11,min = 20, max = 1000, category = "Engine"} } )
self:AddDT( "Bool", "Revlimiter", { KeyName = "revlimiter", Edit = { type = "Boolean", order = 12, category = "Engine"} } )
self:AddDT( "Bool", "TurboCharged", { KeyName = "turbocharged", Edit = { type = "Boolean", order = 13, category = "Engine"} } )
self:AddDT( "Bool", "SuperCharged", { KeyName = "supercharged", Edit = { type = "Boolean", order = 14, category = "Engine"} } )
self:AddDT( "Bool", "BackFire", { KeyName = "backfire", Edit = { type = "Boolean", order = 15, category = "Engine"} } )
self:AddDT( "Bool", "DoNotStall", { KeyName = "donotstall", Edit = { type = "Boolean", order = 16, category = "Engine"} } )
self:AddDT( "Float", "DifferentialGear", { KeyName = "differentialgear", Edit = { type = "Float", order = 17,min = 0.2, max = 6, category = "Transmission"} } )
self:AddDT( "Float", "BrakePower", { KeyName = "brakepower", Edit = { type = "Float", order = 18,min = 0.1, max = 500, category = "Wheels"} } )
self:AddDT( "Float", "PowerDistribution", { KeyName = "powerdistribution", Edit = { type = "Float", order = 19,min = -1, max = 1, category = "Wheels"} } )
self:AddDT( "Float", "Efficiency", { KeyName = "efficiency", Edit = { type = "Float", order = 20,min = 0.2, max = 4, category = "Wheels"} } )
self:AddDT( "Float", "MaxTraction", { KeyName = "maxtraction", Edit = { type = "Float", order = 21,min = 5, max = 1000, category = "Wheels"} } )
self:AddDT( "Float", "TractionBias", { KeyName = "tractionbias", Edit = { type = "Float", order = 22,min = -0.99, max = 0.99, category = "Wheels"} } )
self:AddDT( "Bool", "BulletProofTires", { KeyName = "bulletprooftires", Edit = { type = "Boolean", order = 23, category = "Wheels"} } )
self:AddDT( "Vector", "TireSmokeColor", { KeyName = "tiresmokecolor", Edit = { type = "VectorColor", order = 24, category = "Wheels"} } )
self:AddDT( "Float", "FlyWheelRPM" )
self:AddDT( "Float", "Throttle" )
self:AddDT( "Float", "WheelVelocity" )
self:AddDT( "Int", "Gear" )
self:AddDT( "Int", "Clutch" )
self:AddDT( "Bool", "IsCruiseModeOn" )
self:AddDT( "Bool", "IsBraking" )
self:AddDT( "Bool", "LightsEnabled" )
self:AddDT( "Bool", "LampsEnabled" )
self:AddDT( "Bool", "EMSEnabled" )
self:AddDT( "Bool", "FogLightsEnabled" )
self:AddDT( "Bool", "HandBrakeEnabled" )
self:AddDT( "Bool", "lvsLockedStatus" )
self:AddDT( "Bool", "lvsReady" )
self:AddDT( "Float", "VehicleSteer" )
self:AddDT( "Float", "CurHealth" )
self:AddDT( "Entity", "Driver" )
self:AddDT( "Entity", "DriverSeat" )
self:AddDT( "Entity", "FuelTank" )
self:AddDT( "Bool", "Active" )
self:AddDT( "String", "Spawn_List")
self:AddDT( "String", "Lights_List")
self:AddDT( "String", "Soundoverride")
self:AddDT( "Vector", "FuelPortPosition" )
if SERVER then
self:SetCurHealth( 1 )
self:NetworkVarNotify( "FrontSuspensionHeight", self.OnFrontSuspensionHeightChanged )
self:NetworkVarNotify( "RearSuspensionHeight", self.OnRearSuspensionHeightChanged )
self:NetworkVarNotify( "TurboCharged", self.OnTurboCharged )
self:NetworkVarNotify( "SuperCharged", self.OnSuperCharged )
self:NetworkVarNotify( "Active", self.OnActiveChanged )
self:NetworkVarNotify( "Throttle", self.OnThrottleChanged )
self:NetworkVarNotify( "CurHealth", self.OnHealthChanged )
end
self:AddDataTables()
end
function ENT:AddDataTables()
end
local VehicleMeta = FindMetaTable("Entity")
local OldIsVehicle = VehicleMeta.IsVehicle
function VehicleMeta:IsVehicle()
if self.LVSsimfphys then
return true
end
return OldIsVehicle( self )
end
function ENT:GetSelectedWeapon()
return 0
end
function ENT:GetAI()
return false
end
function ENT:SetHP( nHealth )
self:SetCurHealth( nHealth )
end
function ENT:GetShield()
return 0
end
function ENT:SetShield()
end
function ENT:GetHP()
return self:GetCurHealth()
end
function ENT:GetMaxHP()
return self:GetMaxHealth()
end
function ENT:GetMaxHealth()
return self:GetNWFloat( "MaxHealth", 2000 )
end
function ENT:GetMaxFuel()
return self:GetNWFloat( "MaxFuel", 60 )
end
function ENT:GetFuel()
return self:GetNWFloat( "Fuel", self:GetMaxFuel() )
end
function ENT:GetFuelUse()
return self:GetNWFloat( "FuelUse", 0 )
end
function ENT:GetFuelType()
return self:GetNWInt( "FuelType", 1 )
end
function ENT:GetFuelPos()
return self:LocalToWorld( self:GetFuelPortPosition() )
end
function ENT:OnSmoke()
return self:GetNWBool( "OnSmoke", false )
end
function ENT:OnFire()
return self:GetNWBool( "OnFire", false )
end
function ENT:GetIsVehicleLocked()
return self:GetlvsLockedStatus()
end
function ENT:SetIsVehicleLocked( lock )
self:SetlvsLockedStatus( lock )
end
function ENT:GetBackfireSound()
return self:GetNWString( "backfiresound" )
end
function ENT:SetBackfireSound( the_sound )
self:SetNWString( "backfiresound", the_sound )
end
function ENT:BodyGroupIsValid( bodygroups )
for index, groups in pairs( bodygroups ) do
local mygroup = self:GetBodygroup( index )
for g_index = 1, table.Count( groups ) do
if mygroup == groups[g_index] then return true end
end
end
return false
end
function ENT:GetVehicleClass()
return self:GetSpawn_List()
end
function ENT:CalcMainActivityPassenger( ply )
if not istable( self.PassengerSeats ) then
if not self.HasCheckedpSeats then
self.HasCheckedpSeats = true
self.PassengerSeats = list.Get( "simfphys_vehicles" )[ self:GetSpawn_List() ].Members.PassengerSeats
end
return
end
local Pod = ply:GetVehicle()
local pSeatTBL = self.PassengerSeats[ Pod:GetNWInt( "pPodIndex", -1 ) - 1 ]
if not istable( pSeatTBL ) then return end
local seq = pSeatTBL.anim
if not isstring( seq ) then return end
if ply.m_bWasNoclipping then
ply.m_bWasNoclipping = nil
ply:AnimResetGestureSlot( GESTURE_SLOT_CUSTOM )
if CLIENT then
ply:SetIK( true )
end
end
ply.CalcIdeal = ACT_STAND
ply.CalcSeqOverride = ply:LookupSequence( seq )
return ply.CalcIdeal, ply.CalcSeqOverride
end
function ENT:CalcMainActivity( ply )
if ply ~= self:GetDriver() then return self:CalcMainActivityPassenger( ply ) end
if ply.m_bWasNoclipping then
ply.m_bWasNoclipping = nil
ply:AnimResetGestureSlot( GESTURE_SLOT_CUSTOM )
if CLIENT then
ply:SetIK( true )
end
end
ply.CalcIdeal = ACT_STAND
if isstring( self.SeatAnim ) then
ply.CalcSeqOverride = ply:LookupSequence( self.SeatAnim )
else
if not self.HasCheckedSeat then
self.HasCheckedSeat = true
self.SeatAnim = list.Get( "simfphys_vehicles" )[ self:GetSpawn_List() ].Members.SeatAnim
end
ply.CalcSeqOverride = ply:LookupSequence( "drive_jeep" )
end
return ply.CalcIdeal, ply.CalcSeqOverride
end
function ENT:UpdateAnimation( ply, velocity, maxseqgroundspeed )
ply:SetPlaybackRate( 1 )
if CLIENT then
if ply == self:GetDriver() then
ply:SetPoseParameter( "vehicle_steer", self:GetVehicleSteer() )
ply:InvalidateBoneCache()
end
GAMEMODE:GrabEarAnimation( ply )
GAMEMODE:MouthMoveAnimation( ply )
end
return false
end
function ENT:StartCommand( ply, cmd )
if self:GetDriver() ~= ply then return end
if SERVER then
self:SetRoadkillAttacker( ply )
end
end
function ENT:GetVehicleType()
return "car"
end