From 9569ba7783892e2ee76da79299df246980732fbe Mon Sep 17 00:00:00 2001 From: kosmik641 Date: Sun, 15 Feb 2026 17:58:33 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9E=D0=BF=D1=82=D0=B8=D0=BC=D0=B8=D0=B7?= =?UTF-8?q?=D0=B0=D1=86=D0=B8=D1=8F=20=D0=BE=D0=B1=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D0=BA=D0=B8=20=D0=BA=D0=BE=D0=BC=D0=B0=D0=BD=D0=B4=20?= =?UTF-8?q?=D1=81=D0=B8=D0=B3=D0=BD=D0=B0=D0=BB=D0=B8=D0=BA=D0=B8=20=D0=B8?= =?UTF-8?q?=D0=B7=20=D1=87=D0=B0=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lua/entities/gmod_track_signal/init.lua | 55 ++++++++++++------------- 1 file changed, 27 insertions(+), 28 deletions(-) diff --git a/lua/entities/gmod_track_signal/init.lua b/lua/entities/gmod_track_signal/init.lua index 3dfdc0d..3654620 100644 --- a/lua/entities/gmod_track_signal/init.lua +++ b/lua/entities/gmod_track_signal/init.lua @@ -77,14 +77,29 @@ function ENT:CloseRoute(route) end end +local cmds = { + ["!sactiv"] = {1,9}, + ["!sdeactiv"] = {2,11}, + ["!sclose"] = {3,9}, + ["!sopen"] = {4,8}, + ["!sopps"] = {5,8}, + ["!sclps"] = {6,8}, + ["!senao"] = {7,8}, + ["!sdisao"] = {8,9} +} + function MSignalSayHook(ply, comm, fromULX) if ulx and not fromULX then return end - for i,sig in pairs(ents.FindByClass("gmod_track_signal")) do - local comm = comm - if comm:sub(1,8) == "!sactiv " then - comm = comm:sub(9,-1):upper() + local argv = string.Explode(" ",comm) + local cmdInfo = cmds[argv[1]] - comm = string.Explode(":",comm) + if not cmdInfo or #argv < 2 then return end + + local cmd = cmdInfo[1] + local comm = string.Explode(":",comm:sub(cmdInfo[2],-1):upper()) + + for sig in pairs(Metrostroi.SignalEntityPositions) do + if cmd == 1 then -- !sactiv if sig.Routes then for k,v in pairs(sig.Routes) do if (v.RouteName and v.RouteName:upper() == comm[1] or comm[1] == "*") and v.Emer then @@ -94,10 +109,7 @@ function MSignalSayHook(ply, comm, fromULX) end end end - elseif comm:sub(1,10) == "!sdeactiv " then - comm = comm:sub(11,-1):upper() - - comm = string.Explode(":",comm) + elseif cmd == 2 then -- !sdeactiv if sig.Routes then for k,v in pairs(sig.Routes) do if (v.RouteName and v.RouteName:upper() == comm[1] or comm[1] == "*") and v.Emer then @@ -106,10 +118,7 @@ function MSignalSayHook(ply, comm, fromULX) end end end - elseif comm:sub(1,8) == "!sclose " then - comm = comm:sub(9,-1):upper() - - comm = string.Explode(":",comm) + elseif cmd == 3 then -- !sclose if comm[1] == sig.Name then if sig.Routes[1] and sig.Routes[1].Manual then sig:CloseRoute(1) @@ -134,9 +143,7 @@ function MSignalSayHook(ply, comm, fromULX) end end end - elseif comm:sub(1,7) == "!sopen " then - comm = comm:sub(8,-1):upper() - comm = string.Explode(":",comm) + elseif cmd == 4 then -- !sopen if comm[1] == sig.Name then if comm[2] then if sig.NextSignals[comm[2]] then @@ -161,27 +168,19 @@ function MSignalSayHook(ply, comm, fromULX) end end end - elseif comm:sub(1,7) == "!sopps " then - comm = comm:sub(8,-1):upper() - comm = string.Explode(":",comm) + elseif cmd == 5 then -- !sopps if comm[1] == sig.Name then sig.InvationSignal = true end - elseif comm:sub(1,7) == "!sclps " then - comm = comm:sub(8,-1):upper() - comm = string.Explode(":",comm) + elseif cmd == 6 then -- !sclps if comm[1] == sig.Name then sig.InvationSignal = false end - elseif comm:sub(1,7) == "!senao " then - comm = comm:sub(8,-1):upper() - comm = string.Explode(":",comm) + elseif cmd == 7 then -- !senao if comm[1] == sig.Name then if sig.AODisabled then sig.AODisabled = false end end - elseif comm:sub(1,8) == "!sdisao " then - comm = comm:sub(9,-1):upper() - comm = string.Explode(":",comm) + elseif cmd == 8 then -- !sdisao if comm[1] == sig.Name then if sig.ARSSpeedLimit == 2 then sig.AODisabled = true end end