dobrograd-13-06-2022/garrysmod/addons/feature-wire/lua/entities/gmod_wire_igniter.lua
Jonny_Bro (Nikita) e4d5311906 first commit
2023-11-16 15:01:19 +05:00

70 lines
1.9 KiB
Lua

AddCSLuaFile()
DEFINE_BASECLASS( "base_wire_entity" )
ENT.PrintName = "Wire Igniter"
ENT.RenderGroup = RENDERGROUP_BOTH
ENT.WireDebugName = "Igniter"
function ENT:SetupDataTables()
self:NetworkVar( "Float", 0, "BeamLength" )
end
if CLIENT then return end -- No more client
function ENT:Initialize()
self:PhysicsInit( SOLID_VPHYSICS )
self:SetMoveType( MOVETYPE_VPHYSICS )
self:SetSolid( SOLID_VPHYSICS )
self.Inputs = Wire_CreateInputs(self, { "A", "Length", "Extinguish" })
self.IgniteLength = 10
self:Setup(false, 2048)
end
function ENT:Setup(trgply,Range)
self.TargetPlayers = trgply
if Range then self:SetBeamLength(Range) end
end
function ENT:DoTrace()
local vStart = self:GetPos()
local vForward = self:GetUp()
local trace = {}
trace.start = vStart
trace.endpos = vStart + (vForward * self:GetBeamLength())
trace.filter = { self }
local trace = util.TraceLine( trace )
local cvarTargetPlayers = GetConVarNumber('sbox_wire_igniters_allowtrgply') > 0
if not IsValid(trace.Entity) then return false end
if not gamemode.Call("CanProperty", self:GetPlayer(), "ignite", trace.Entity) then return false end
if (trace.Entity:IsPlayer() and (not self.TargetPlayers or not cvarTargetPlayers)) then return false end
if (trace.Entity:IsWorld()) then return false end
return trace.Entity
end
function ENT:TriggerInput(iname, value)
if (iname == "A") then
if (value ~= 0) then
local target = self:DoTrace()
if target == false then return false end
target:Extinguish()
target:Ignite( self.IgniteLength, 0 )
end
elseif (iname == "Length") then
self.IgniteLength = math.min(value,GetConVarNumber("sbox_wire_igniters_maxlen"))
elseif (iname == "Extinguish") then
if value ~= 0 then
local target = self:DoTrace()
if target == false then return false end
target:Extinguish()
end
end
end
duplicator.RegisterEntityClass("gmod_wire_igniter", WireLib.MakeWireEnt, "Data", "TargetPlayers", "Range")