From bd632c18b2ef04b46df82149da584457f6b09b6e Mon Sep 17 00:00:00 2001 From: kosmik641 Date: Fri, 23 Jan 2026 04:30:29 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A3=D0=B4=D0=B0=D0=BB=D0=B5=D0=BD=20=D0=BB?= =?UTF-8?q?=D0=B8=D1=88=D0=BD=D0=B8=D0=B9=20=D1=86=D0=B8=D0=BA=D0=BB=20?= =?UTF-8?q?=D0=B2=20=D1=80=D0=B0=D1=81=D1=87=D1=91=D1=82=D0=B0=D1=85=20?= =?UTF-8?q?=D0=BF=D0=BE=D1=82=D1=80=D0=B5=D0=B1=D0=BB=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D1=8F=20=D1=8D=D0=BB=D0=B5=D0=BA=D1=82=D1=80=D0=BE=D1=8D=D0=BD?= =?UTF-8?q?=D0=B5=D1=80=D0=B3=D0=B8=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lua/metrostroi/sv_util.lua | 71 +++++++++++++++++--------------------- 1 file changed, 31 insertions(+), 40 deletions(-) diff --git a/lua/metrostroi/sv_util.lua b/lua/metrostroi/sv_util.lua index dfceb75..43dccc8 100644 --- a/lua/metrostroi/sv_util.lua +++ b/lua/metrostroi/sv_util.lua @@ -511,55 +511,46 @@ hook.Add("Think", "Metrostroi_ElectricConsumptionThink", function() for k,v in pairs(Metrostroi.Currents) do Metrostroi.Currents[k] = 0 end for train in pairs(Metrostroi.SpawnedTrains) do if not train.Electric then continue end - + + if train.Electric.EnergyChange then Metrostroi.TotalRateWatts = Metrostroi.TotalRateWatts + math.max(0, train.Electric.EnergyChange) end + local current = math.max(0, train.Electric.Itotal or 0) - math.max(0, train.Electric.Iexit or 0) + local fB = IsValid(train.FrontBogey) and train.FrontBogey - if fB then - if fB.Feeder then - Metrostroi.Currents[fB.Feeder] = Metrostroi.Currents[fB.Feeder] + fB.DropByPeople - else - Metrostroi.Current = Metrostroi.Current + fB.DropByPeople - end - end - local rB = IsValid(train.RearBogey) and train.RearBogey - if rB then - if rB.Feeder then - Metrostroi.Currents[rB.Feeder] = Metrostroi.Currents[rB.Feeder] + rB.DropByPeople + + local fBDropByPeople = fb and fB.DropByPeople or 0 + local rBDropByPeople = rb and rB.DropByPeople or 0 + + if fB and (not fB.ContactStates or (not fB.ContactStates[1] and not fB.ContactStates[2])) then fB = nil end -- Don't have contact with TR + if rB and (not rB.ContactStates or (not rB.ContactStates[1] and not rB.ContactStates[2])) then rB = nil end -- Don't have contact with TR + + local fBfeeder = fB and fB.Feeder + local rBfeeder = rB and rB.Feeder + + if fBfeeder then + Metrostroi.Currents[fBfeeder] = Metrostroi.Currents[fBfeeder] + fBDropByPeople + + if not rBfeeder or fBfeeder == rBfeeder then + consumeFromFeeder(current, fBfeeder) -- Feeders are same else - Metrostroi.Current = Metrostroi.Current + rB.DropByPeople + consumeFromFeeder(current * 0.5, fBfeeder) -- Feeders are different end + else + Metrostroi.Current = Metrostroi.Current + fBDropByPeople end - end - for train in pairs(Metrostroi.SpawnedTrains) do - if train.Electric then - if train.Electric.EnergyChange then Metrostroi.TotalRateWatts = Metrostroi.TotalRateWatts + math.max(0, train.Electric.EnergyChange) end - local current = math.max(0, train.Electric.Itotal or 0) - math.max(0, train.Electric.Iexit or 0) - local fB = IsValid(train.FrontBogey) and train.FrontBogey - local rB = IsValid(train.RearBogey) and train.RearBogey - if fB and (not fB.ContactStates or (not fB.ContactStates[1] and not fB.ContactStates[2])) then fB = nil end -- Don't have contact with TR - if rB and (not rB.ContactStates or (not rB.ContactStates[1] and not rB.ContactStates[2])) then rB = nil end -- Don't have contact with TR + if rBfeeder then + Metrostroi.Currents[rBfeeder] = Metrostroi.Currents[rBfeeder] + rBDropByPeople - local fBfeeder = fB and fB.Feeder - local rBfeeder = rB and rB.Feeder - - if fBfeeder then - if not rBfeeder or fBfeeder == rBfeeder then - consumeFromFeeder(current, fBfeeder) -- Feeders are same - else - consumeFromFeeder(current * 0.5, fBfeeder) -- Feeders are different - end + if not fBfeeder then + consumeFromFeeder(current, rBfeeder) -- Feeders are same + elseif fBfeeder ~= rBfeeder then + consumeFromFeeder(current * 0.5, rBfeeder) -- Feeders are different end - - if rBfeeder then - if not fBfeeder then - consumeFromFeeder(current, rBfeeder) -- Feeders are same - elseif fBfeeder ~= rBfeeder then - consumeFromFeeder(current * 0.5, rBfeeder) -- Feeders are different - end - end - if not rBfeeder and not fBfeeder then consumeFromFeeder(current) end + else + Metrostroi.Current = Metrostroi.Current + rBDropByPeople end + if not rBfeeder and not fBfeeder then consumeFromFeeder(current) end end -- Ignore invalid values if Metrostroi.TotalRateWatts > 1e8 then Metrostroi.TotalRateWatts = 0 end