mirror of
https://github.com/metrostroi-repo/MetrostroiAddon.git
synced 2026-05-02 00:42:29 +00:00
* Global change. Замена всех устаревших функции на аналогичные * Global change. Добавил локальные переменные там, где это было рентабельно.
111 lines
4.0 KiB
Lua
111 lines
4.0 KiB
Lua
TOOL.Category = "Metro"
|
|
TOOL.Name = "Switch Tool"
|
|
TOOL.Command = nil
|
|
TOOL.ConfigName = ""
|
|
if SERVER then util.AddNetworkString "metrostroi-stool-switch" end
|
|
TOOL.ClientConVar["name"] = ""
|
|
TOOL.ClientConVar["channel"] = 1
|
|
TOOL.ClientConVar["locked"] = 0
|
|
TOOL.ClientConVar["controllable"] = 1
|
|
TOOL.ClientConVar["invert"] = 0
|
|
if CLIENT then
|
|
language.Add("Tool.switch.name", "Switch Tool")
|
|
language.Add("Tool.switch.desc", "Sets switch tool channel")
|
|
language.Add("Tool.switch.0", "Primary: Set channel 1\nSecondary: Set channel 2\nReload: Lock switch")
|
|
end
|
|
|
|
function TOOL:LeftClick(trace)
|
|
if CLIENT then return true end
|
|
|
|
local ply = self:GetOwner()
|
|
if (ply:IsValid()) and (not ply:IsAdmin()) then return false end
|
|
if not trace then return false end
|
|
if trace.Entity and trace.Entity:IsPlayer() then return false end
|
|
|
|
local entlist = ents.FindInSphere(trace.HitPos,64)
|
|
for k,v in pairs(entlist) do
|
|
if v:GetClass() == "gmod_track_switch" then
|
|
v.Name = self:GetClientInfo("name") ~= "" and self:GetClientInfo("name") or nil
|
|
v:SetChannel(self:GetClientNumber("channel"))
|
|
v.LockedSignal = self:GetClientNumber("lock") == 1 and self:GetClientNumber("channel") or nil
|
|
v.NotChangePos = self:GetClientNumber("controllable") == 0
|
|
v.Invertred = self:GetClientNumber("invert") == 1
|
|
print(Format("Name:%s, Channel:%d, It's %slocked, %scontrllable and %sinverted",self:GetClientInfo("name") ~= "" and self:GetClientInfo("name") or "track index",self:GetClientNumber("channel"),self:GetClientNumber("lock") == 1 and "not " or "",self:GetClientNumber("controllable") == 0 and "not " or "",self:GetClientNumber("invert") == 0 and "not " or ""))
|
|
end
|
|
end
|
|
return true
|
|
end
|
|
|
|
function TOOL:RightClick(trace)
|
|
if CLIENT then return true end
|
|
--[[
|
|
local ply = self:GetOwner()
|
|
if (ply:IsValid()) and (not ply:IsAdmin()) then return false end
|
|
if not trace then return false end
|
|
if trace.Entity and trace.Entity:IsPlayer() then return false end
|
|
|
|
local entlist = ents.FindInSphere(trace.HitPos,64)
|
|
for k,v in pairs(entlist) do
|
|
if v:GetClass() == "gmod_track_switch" then
|
|
v:SetChannel(2)
|
|
print("Set channel 2")
|
|
end
|
|
end]]
|
|
return true
|
|
end
|
|
|
|
function TOOL:Reload(trace)
|
|
if CLIENT then return true end
|
|
|
|
local ply = self:GetOwner()
|
|
if (ply:IsValid()) and (not ply:IsAdmin()) then return false end
|
|
if not trace then return false end
|
|
if trace.Entity and trace.Entity:IsPlayer() then return false end
|
|
|
|
local entlist = ents.FindInSphere(trace.HitPos,64)
|
|
for k,v in pairs(entlist) do
|
|
if v:GetClass() == "gmod_track_switch" then
|
|
net.Start("metrostroi-stool-switch")
|
|
net.WriteString(v.Name or "")
|
|
net.WriteUInt(v:GetChannel(),2)
|
|
net.WriteBool(v.LockedSignal)
|
|
net.WriteBool(not v.NotChangePos)
|
|
net.WriteBool(v.Invertred)
|
|
net.Send(self:GetOwner())
|
|
|
|
--if self:GetClientNumber("lock") == 1 then
|
|
--if v.LockedSignal then v.LockedSignal = nil else v.LockedSignal = v.LastSignal end
|
|
--print("Locked switch signal",v.LockedSignal)
|
|
--else
|
|
--not v.NotChangePos
|
|
--print(v.NotChangePos and "Disabled" or "Enabled")
|
|
--end
|
|
end
|
|
end
|
|
return true
|
|
end
|
|
|
|
function TOOL.BuildCPanel(panel)
|
|
panel = panel or controlpanel.Get("switch")
|
|
panel:SetName("#Tool.switch.name")
|
|
panel:Help("#Tool.switch.desc")
|
|
panel:TextEntry("Name","switch_name")
|
|
local CBChannel = panel:ComboBox( "Channel", "switch_channel" )
|
|
CBChannel:AddChoice("None",0)
|
|
CBChannel:AddChoice("1",1)
|
|
CBChannel:AddChoice("2",2)
|
|
panel:CheckBox("Locked","switch_locked")
|
|
panel:CheckBox("Controllable","switch_controllable")
|
|
panel:CheckBox("Invert","switch_invert")
|
|
end
|
|
|
|
|
|
net.Receive("metrostroi-stool-switch", function(_, ply)
|
|
local TOOL = LocalPlayer and LocalPlayer():GetTool("signalling") or ply:GetTool("signalling")
|
|
|
|
RunConsoleCommand("switch_name",net.ReadString())
|
|
RunConsoleCommand("switch_channel",net.ReadUInt(2))
|
|
RunConsoleCommand("switch_locked",net.ReadBool() and 1 or 0)
|
|
RunConsoleCommand("switch_controllable",net.ReadBool() and 1 or 0)
|
|
RunConsoleCommand("switch_invert",net.ReadBool() and 1 or 0)
|
|
end) |