Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add legality checks for seats #381

Merged
merged 3 commits into from
Dec 31, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 44 additions & 0 deletions lua/acf/contraption/seats_sv.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
-- Optional functionality for legality checking on all vehicles

hook.Add("OnEntityCreated", "ACF_SeatLegality", function(Entity)
timer.Simple(0, function()
if not IsValid(Entity) then return end
if Entity:GetClass() ~= "prop_vehicle_prisoner_pod" then return end
if Entity.fphysSeat then return end -- simfphys vehicles will make non-solid seats that should be ignored

local PhysObj = Entity:GetPhysicsObject()
if not IsValid(PhysObj) then return end

Entity.ACF = {}
Entity.ACF.PhysObj = PhysObj
Entity.ACF.LegalMass = PhysObj:GetMass()
Entity.ACF.Model = Entity:GetModel()
Entity.ACF.LegalSeat = true
Entity.WireDebugName = Entity.WireDebugName or (Entity.VehicleTable and Entity.VehicleTable.Name) or "ACF Legal Vehicle"

Entity.Enable = function()
Entity.ACF.LegalSeat = true
end

Entity.Disable = function()
Entity.ACF.LegalSeat = false

local Driver = Entity:GetDriver()
if not IsValid(Driver) then return end
Driver:ExitVehicle()
end

if not ACF.VehicleLegalChecks then return end

ACF.CheckLegal(Entity)
end)
end)

hook.Add("CanPlayerEnterVehicle", "ACF_SeatLegality", function(Player, Entity)
if not Entity.ACF then return end

if not Entity.ACF.LegalSeat then
ACF.SendNotify(Player, false, "Seat is not legal and is currently disabled.")
return false
end
end)
1 change: 1 addition & 0 deletions lua/acf/core/globals.lua
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ do -- ACF global vars

-- General Settings
ACF.LegalChecks = true -- Whether or not IsLegal checks should be run on ACF entities
ACF.VehicleLegalChecks = true -- Whether or not IsLegal checks should be run on vehicle entities
ACF.Year = 1945
ACF.IllegalDisableTime = 30 -- Time in seconds for an entity to be disabled when it fails ACF.IsLegal
ACF.RestrictInfo = true -- If enabled, players will be only allowed to get info from entities they're allowed to mess with.
Expand Down
13 changes: 12 additions & 1 deletion lua/acf/menu/data_callbacks.lua
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,18 @@ local Settings = {

if CLIENT and not IsValid(Player) then return end

Message("Info", "Legality checks have been " .. (Bool and "enabled." or "disabled."))
Message("Info", "Legality checks for ACF entities have been " .. (Bool and "enabled." or "disabled."))
end,
VehicleLegalChecks = function(Player, _, Value)
local Bool = tobool(Value)

if ACF.VehicleLegalChecks == Bool then return end

ACF.VehicleLegalChecks = Bool

if CLIENT and not IsValid(Player) then return end

Message("Info", "Legality checks for vehicles have been " .. (Bool and "enabled." or "disabled."))
end,
GunsCanFire = function(Player, _, Value)
local Bool = tobool(Value)
Expand Down
8 changes: 8 additions & 0 deletions lua/acf/menu/items_cl/settings.lua
Original file line number Diff line number Diff line change
Expand Up @@ -139,6 +139,14 @@ do -- Serverside settings
return Value
end)

local VehicleLegalChecks = Base:AddCheckBox("Enable legality checks on vehicle entities.")
VehicleLegalChecks:SetServerData("VehicleLegalChecks", "OnChange")
VehicleLegalChecks:DefineSetter(function(Panel, _, _, Value)
Panel:SetValue(Value)

return Value
end)

local GunFire = Base:AddCheckBox("Allow guns to fire.")
GunFire:SetServerData("GunsCanFire", "OnChange")
GunFire:DefineSetter(function(Panel, _, _, Value)
Expand Down
1 change: 1 addition & 0 deletions lua/acf/persisted_vars/vars_sv.lua
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

-- Settings
ACF.PersistServerData("LegalChecks", true)
ACF.PersistServerData("VehicleLegalChecks", true)
ACF.PersistServerData("ServerDataAllowAdmin", false)
ACF.PersistServerData("RestrictInfo", true)
ACF.PersistServerData("GunsCanFire", true)
Expand Down
Loading