mirror of
https://github.com/metrostroi-repo/MetrostroiAddon.git
synced 2026-05-02 00:42:29 +00:00
1551 lines
68 KiB
Lua
1551 lines
68 KiB
Lua
--------------------------------------------------------------------------------
|
||
-- ПА-М Поездная Аппаратура Модифицированная
|
||
-- PA-M Modified Train Equipment
|
||
--------------------------------------------------------------------------------
|
||
Metrostroi.DefineSystem("PA-M")
|
||
TRAIN_SYSTEM.DontAccelerateSimulation = true
|
||
function TRAIN_SYSTEM:Initialize()
|
||
self.Train:LoadSystem("BRight","Relay","Switch",{bass = true})
|
||
self.Train:LoadSystem("BEsc","Relay","Switch",{bass = true})
|
||
self.Train:LoadSystem("BF","Relay","Switch",{bass = true})
|
||
self.Train:LoadSystem("BM","Relay","Switch",{bass = true})
|
||
self.Train:LoadSystem("BP","Relay","Switch",{bass = true})
|
||
|
||
self.TriggerNames = {
|
||
"B7",
|
||
"B8",
|
||
"B9",
|
||
"BLeft",
|
||
"BRight",
|
||
"B4",
|
||
"B5",
|
||
"B6",
|
||
"BUp",
|
||
"B1",
|
||
"B2",
|
||
"B3",
|
||
"BDown",
|
||
"B0",
|
||
"BMinus",
|
||
"BPlus",
|
||
"BEnter",
|
||
"BEsc",
|
||
"BF",
|
||
"BM",
|
||
"BP",
|
||
}
|
||
self.Triggers = {}
|
||
self.Pass = "777"
|
||
self.EnteredPass = ""
|
||
self.Timer = CurTime()
|
||
self.Line = 1
|
||
self.State = 0
|
||
self.RealState = 99
|
||
self.RouteNumber = ""
|
||
self.FirstStation = ""
|
||
self.LastStation = ""
|
||
self.AutoTimer = false
|
||
self.Corrections = {
|
||
[110] = 1.50,
|
||
[111] = -0.10,
|
||
[113] = -0.05,
|
||
--[114] = -0.05,
|
||
[114] = -0.25,
|
||
[117] = -0.15,
|
||
[118] = 1.40,
|
||
[121] = -0.10,
|
||
[122] = -0.10,
|
||
[123] = 3.00,
|
||
[322] = 3.00,
|
||
}
|
||
self.MenuChoosed = 1
|
||
self.State75 = 1
|
||
end
|
||
function TRAIN_SYSTEM:ClientInitialize()
|
||
self.STR1r = {}
|
||
self.STR2r = {}
|
||
self.STR1x = 1
|
||
self.STR2x = 1
|
||
self.Positions = {
|
||
[-3] = "T2",
|
||
[-2] = "T1a",
|
||
[-1] = "T1",
|
||
[0] = "0",
|
||
[1] = "X1",
|
||
[2] = "X2",
|
||
[3] = "X3",
|
||
--[4] = "RR0",
|
||
[5] = "0ХТ",
|
||
[6] = "T2",
|
||
}
|
||
self.TypesRussian = {
|
||
[0] = "ЭПВ",
|
||
[1] = "КС",
|
||
[2] = "ОД",
|
||
[3] = "КВ",
|
||
[4] = "УА",
|
||
[5] = "ОС",
|
||
}
|
||
self.TypesEnglish = {
|
||
[0] = "EPV",
|
||
[1] = "KS",
|
||
[2] = "OD",
|
||
[3] = "KV",
|
||
[4] = "UA",
|
||
[5] = "OS",
|
||
}
|
||
self.QuestionsRussian = {
|
||
[1] = "проверку наката",
|
||
[5] = "движение с Vф=0",
|
||
[6] = "изменение станции оборота",
|
||
[7] = "режим фиксации станции",
|
||
}
|
||
self.QuestionsEnglish = {
|
||
[1] = "overrun check",
|
||
[5] = "drive if Vf=0",
|
||
[6] = "change station rotation",
|
||
[7] = "lock station mode",
|
||
}
|
||
|
||
local translate = file.Read("metrostroi_data/language/pam_en.json")
|
||
if translate then
|
||
self.i18n = util.JSONToTable(translate)
|
||
end
|
||
self.T = function (source)
|
||
if self.i18n and self.BlokEN and self.i18n[source] ~= nil then
|
||
return self.i18n[source]
|
||
else
|
||
if self.i18n and self.BlokEN then print("Need translation for \""..source.."\"") end
|
||
return source
|
||
end
|
||
end
|
||
self.BlokEN=false
|
||
self.Types=self.TypesRussian
|
||
self.Questions=self.QuestionsRussian
|
||
self.AutoTimer = false
|
||
end
|
||
|
||
if TURBOSTROI then return end
|
||
function TRAIN_SYSTEM:Inputs()
|
||
return { "Press" }
|
||
end
|
||
|
||
if CLIENT then
|
||
surface.CreateFont("Metrostroi_PAM30", {
|
||
font = "Arial",
|
||
size = 30,
|
||
weight = 700,
|
||
blursize = 0,
|
||
antialias = true,
|
||
underline = false,
|
||
italic = false,
|
||
strikeout = false,
|
||
symbol = false,
|
||
rotary = false,
|
||
shadow = false,
|
||
additive = false,
|
||
outline = false,
|
||
extended = true,
|
||
extended = true,
|
||
})
|
||
surface.CreateFont("Metrostroi_PAM50", {
|
||
font = "Arial",
|
||
size = 50,
|
||
weight = 800,
|
||
blursize = 0,
|
||
antialias = true,
|
||
underline = false,
|
||
italic = false,
|
||
strikeout = false,
|
||
symbol = false,
|
||
rotary = false,
|
||
shadow = false,
|
||
additive = false,
|
||
outline = false,
|
||
extended = true,
|
||
})
|
||
surface.CreateFont("Metrostroi_PAM60", {
|
||
font = "Arial",
|
||
size = 60,
|
||
weight = 800,
|
||
blursize = 0,
|
||
antialias = true,
|
||
underline = false,
|
||
italic = false,
|
||
strikeout = false,
|
||
symbol = false,
|
||
rotary = false,
|
||
shadow = false,
|
||
additive = false,
|
||
outline = false,
|
||
extended = true,
|
||
})
|
||
|
||
surface.CreateFont("Metrostroi_PAM25", {
|
||
font = "Arial",
|
||
size = 25,
|
||
weight = 400,
|
||
blursize = 0,
|
||
antialias = true,
|
||
underline = false,
|
||
italic = false,
|
||
strikeout = false,
|
||
symbol = false,
|
||
rotary = false,
|
||
shadow = false,
|
||
additive = false,
|
||
outline = false,
|
||
extended = true,
|
||
})
|
||
surface.CreateFont("Metrostroi_PAM1_25", {
|
||
font = "Arial",
|
||
size = 25,
|
||
weight = 800,
|
||
blursize = 0,
|
||
antialias = true,
|
||
underline = false,
|
||
italic = false,
|
||
strikeout = false,
|
||
symbol = false,
|
||
rotary = false,
|
||
shadow = false,
|
||
additive = false,
|
||
outline = false,
|
||
extended = true,
|
||
})
|
||
surface.CreateFont("Metrostroi_PAM20", {
|
||
font = "Arial",
|
||
size = 20,
|
||
weight = 400,
|
||
blursize = 0,
|
||
antialias = true,
|
||
underline = false,
|
||
italic = false,
|
||
strikeout = false,
|
||
symbol = false,
|
||
rotary = false,
|
||
shadow = false,
|
||
additive = false,
|
||
outline = false,
|
||
extended = true,
|
||
})
|
||
surface.CreateFont("Metrostroi_PAM1_20", {
|
||
font = "Arial",
|
||
size = 20,
|
||
weight = 800,
|
||
blursize = 0,
|
||
antialias = true,
|
||
underline = false,
|
||
italic = false,
|
||
strikeout = false,
|
||
symbol = false,
|
||
rotary = false,
|
||
shadow = false,
|
||
additive = false,
|
||
outline = false,
|
||
extended = true,
|
||
})
|
||
surface.CreateFont("Metrostroi_PAM15", {
|
||
font = "Arial",
|
||
size = 15,
|
||
weight = 800,
|
||
blursize = 0,
|
||
antialias = true,
|
||
underline = false,
|
||
italic = false,
|
||
strikeout = false,
|
||
symbol = false,
|
||
rotary = false,
|
||
shadow = false,
|
||
additive = false,
|
||
outline = false,
|
||
extended = true,
|
||
})
|
||
surface.CreateFont("Metrostroi_PAM24", {
|
||
font = "Arial",
|
||
size = 24,
|
||
weight = 800,
|
||
blursize = 0,
|
||
antialias = true,
|
||
underline = false,
|
||
italic = false,
|
||
strikeout = false,
|
||
symbol = false,
|
||
rotary = false,
|
||
shadow = false,
|
||
additive = false,
|
||
outline = false,
|
||
extended = true,
|
||
})
|
||
surface.CreateFont("Metrostroi_PAM22", {
|
||
font = "Arial",
|
||
size = 22,
|
||
weight = 800,
|
||
blursize = 0,
|
||
antialias = true,
|
||
underline = false,
|
||
italic = false,
|
||
strikeout = false,
|
||
symbol = false,
|
||
rotary = false,
|
||
shadow = false,
|
||
additive = false,
|
||
outline = false,
|
||
extended = true,
|
||
})
|
||
surface.CreateFont("Metrostroi_PAM28", {
|
||
font = "Arial",
|
||
size = 28,
|
||
weight = 800,
|
||
blursize = 0,
|
||
antialias = true,
|
||
underline = false,
|
||
italic = false,
|
||
strikeout = false,
|
||
symbol = false,
|
||
rotary = false,
|
||
shadow = false,
|
||
additive = false,
|
||
outline = false,
|
||
extended = true,
|
||
})
|
||
|
||
surface.CreateFont("Metrostroi_PAM80", {
|
||
font = "Arial",
|
||
size = 80,
|
||
weight = 800,
|
||
blursize = 0,
|
||
antialias = true,
|
||
underline = false,
|
||
italic = false,
|
||
strikeout = false,
|
||
symbol = false,
|
||
rotary = false,
|
||
shadow = false,
|
||
additive = false,
|
||
outline = false,
|
||
extended = true,
|
||
})
|
||
surface.CreateFont("Metrostroi_PAMBSOD", {
|
||
font = "Trebuchet",
|
||
size = 13,
|
||
weight = 800,
|
||
blursize = 0,
|
||
antialias = true,
|
||
underline = false,
|
||
italic = false,
|
||
strikeout = false,
|
||
symbol = false,
|
||
rotary = false,
|
||
shadow = false,
|
||
additive = false,
|
||
outline = false,
|
||
extended = true,
|
||
})
|
||
|
||
|
||
function TRAIN_SYSTEM:PAM(train)
|
||
local Announcer = self.Train.Announcer
|
||
|
||
if self.BlokEN ~= train:GetNW2Bool("BlokEN") then
|
||
self.BlokEN = train:GetNW2Bool("BlokEN")
|
||
if self.BlokEN then
|
||
self.Types=self.TypesEnglish
|
||
self.Questions=self.QuestionsEnglish
|
||
else
|
||
self.Types=self.TypesRussian
|
||
self.Questions=self.QuestionsRussian
|
||
end
|
||
end
|
||
|
||
if train:GetNW2Int("PAM:State",-1) ~= -1 then
|
||
surface.SetDrawColor(Color(225,225,225,2))
|
||
surface.DrawTexturedRect(0,0,512,427)
|
||
end
|
||
if train:GetNW2Int("PAM:State",-1) == -2 then
|
||
if not self.BSODTimer then self.BSODTimer = CurTime() end
|
||
surface.SetDrawColor(Color(0,0,172))
|
||
surface.DrawTexturedRect(0,19,512,389)
|
||
|
||
if CurTime() - self.BSODTimer > 1/32*1 then draw.SimpleText("A problem has been detected and PA-M has been shut down to prevent damage","Metrostroi_PAMBSOD",5, 25,Color(255,255,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) end
|
||
if CurTime() - self.BSODTimer > 2/32*1 then draw.SimpleText("to your train.","Metrostroi_PAMBSOD",5, 35,Color(255,255,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) end
|
||
|
||
if CurTime() - self.BSODTimer > 4/32*1 then draw.SimpleText("The problem seems to be caused by the following file: CORE.SYS","Metrostroi_PAMBSOD",5, 55,Color(255,255,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) end
|
||
|
||
if CurTime() - self.BSODTimer > 6/32*1 then draw.SimpleText("VISITED_BY_KEK_POLICE_ERROR","Metrostroi_PAMBSOD",5, 75,Color(255,255,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) end
|
||
|
||
if CurTime() - self.BSODTimer > 7/32*1 then draw.SimpleText("If this is the first time you've seen this Stop error screen","Metrostroi_PAMBSOD",5, 95,Color(255,255,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) end
|
||
if CurTime() - self.BSODTimer > 8/32*1 then draw.SimpleText("restart your computer. If this screen appears again, follow","Metrostroi_PAMBSOD",5, 105,Color(255,255,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) end
|
||
if CurTime() - self.BSODTimer > 9/32*1 then draw.SimpleText("these steps:","Metrostroi_PAMBSOD",5, 115,Color(255,255,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) end
|
||
|
||
if CurTime() - self.BSODTimer > 11/32*1 then draw.SimpleText("Check to make sure any new hardware or software is properly installed.","Metrostroi_PAMBSOD",5, 135,Color(255,255,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) end
|
||
if CurTime() - self.BSODTimer > 12/32*1 then draw.SimpleText("If this is a new installation, ask your hardware or software manufacturer","Metrostroi_PAMBSOD",5, 145,Color(255,255,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) end
|
||
if CurTime() - self.BSODTimer > 13/32*1 then draw.SimpleText("for any Windows updates you might need.","Metrostroi_PAMBSOD",5, 155,Color(255,255,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) end
|
||
|
||
if CurTime() - self.BSODTimer > 15/32*1 then draw.SimpleText("If problems continue, disable or remove any newly installed hardware","Metrostroi_PAMBSOD",5, 175,Color(255,255,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) end
|
||
if CurTime() - self.BSODTimer > 16/32*1 then draw.SimpleText("or software. Disable BIOS memory options such as caching or shadowing.","Metrostroi_PAMBSOD",5, 185,Color(255,255,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) end
|
||
if CurTime() - self.BSODTimer > 17/32*1 then draw.SimpleText("If you need to use Safe Mode to remove or disable components, restart","Metrostroi_PAMBSOD",5, 195,Color(255,255,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) end
|
||
if CurTime() - self.BSODTimer > 18/32*1 then draw.SimpleText("your computer, press F8 to select Advanced Startup Options, and then","Metrostroi_PAMBSOD",5, 205,Color(255,255,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) end
|
||
if CurTime() - self.BSODTimer > 19/32*1 then draw.SimpleText("select Safe Mode.","Metrostroi_PAMBSOD",5, 215,Color(255,255,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) end
|
||
|
||
if CurTime() - self.BSODTimer > 21/32*1 then draw.SimpleText("Technical information:","Metrostroi_PAMBSOD",5, 235,Color(255,255,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) end
|
||
|
||
if CurTime() - self.BSODTimer > 22/32*1 then draw.SimpleText("*** STOP: 0x0000000A (0x0000000C, 0x00000002, 0x00000000, 3311BACE)","Metrostroi_PAMBSOD",5, 255,Color(255,255,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) end
|
||
|
||
|
||
if CurTime() - self.BSODTimer > 25/32*1 then draw.SimpleText("*** autodrive.sys - Address 3311BACE base at 5721DAC7, Date Stamp 533acb25","Metrostroi_PAMBSOD",5, 285,Color(255,255,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) end
|
||
|
||
if CurTime() - self.BSODTimer > 27/32*1 then draw.SimpleText("Beginning dump of physical memory.","Metrostroi_PAMBSOD",5, 305,Color(255,255,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) end
|
||
if CurTime() - self.BSODTimer > 28/32*1 then draw.SimpleText("Physical memory dump complete.","Metrostroi_PAMBSOD",5, 315,Color(255,255,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) end
|
||
if CurTime() - self.BSODTimer > 29/32*1 then draw.SimpleText("Contact your system administrator or technical support group for further","Metrostroi_PAMBSOD",5, 325,Color(255,255,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) end
|
||
if CurTime() - self.BSODTimer > 30/32*1 then draw.SimpleText("assistance.","Metrostroi_PAMBSOD",5, 335,Color(255,255,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER) end
|
||
|
||
else
|
||
if self.BSODTimer then self.BSODTimer = nil end
|
||
end
|
||
if train:GetNW2Int("PAM:State",-1) == 0 then
|
||
if CurTime()%0.4 > 0.2 then draw.SimpleText("_","Metrostroi_PAM30",5, 0,Color(150,150,150,255),TEXT_ALIGN_LEFT,TEXT_ALIGN_BOTTOM) end
|
||
end
|
||
if train:GetNW2Int("PAM:State",-1) == 2 then
|
||
surface.SetDrawColor(Color(0,0,255))
|
||
surface.SetMaterial( Material("vgui/gradient_down"))
|
||
surface.DrawTexturedRect(0,0,512,427)
|
||
|
||
surface.SetDrawColor(Color(255,255,255))
|
||
surface.SetMaterial( Material("vgui/gradient-d"))
|
||
surface.DrawTexturedRect(0,200,512,50)
|
||
surface.SetMaterial( Material("vgui/gradient-u"))
|
||
surface.DrawTexturedRect(0,250,512,50)
|
||
|
||
surface.SetDrawColor(Color(0,255,0))
|
||
surface.SetMaterial( Material("vgui/gradient-d"))
|
||
surface.DrawTexturedRect(0,200,512,227)
|
||
|
||
draw.SimpleText(self.T("НИИ Фабрики SENT"),"Metrostroi_PAM30",256, 100,Color(0,155,255,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER)
|
||
draw.SimpleText(self.T("Терминал машиниста (ПА-М)"),"Metrostroi_PAM30",256, 130,Color(0,155,255,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER)
|
||
end
|
||
|
||
if train:GetNW2Int("PAM:State",-1) == 3 then
|
||
|
||
draw.SimpleText(self.T("НАЧАЛЬНЫЙ ТЕСТ ЗАКОНЧЕН"),"Metrostroi_PAM30",256, 30,Color(110,172,95),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER)
|
||
|
||
Metrostroi.DrawRectOutline(10, 80, 492, 210,Color(110,172,95),3)
|
||
|
||
surface.SetDrawColor(Color(2,2,2))
|
||
surface.DrawRect(17,70,180,20)
|
||
draw.SimpleText(self.T("РЕЗУЛЬТАТЫ"),"Metrostroi_PAM30",22, 80,Color(110,172,95),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER)
|
||
|
||
draw.SimpleText(self.T("Начальный тест"),"Metrostroi_PAM30",60, 125,Color(110,172,95),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER)
|
||
draw.SimpleText(self.T("норма"),"Metrostroi_PAM30",480, 125,Color(110,172,95),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER)
|
||
draw.SimpleText(self.T("Начальная установка"),"Metrostroi_PAM30",60, 165,Color(110,172,95),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER)
|
||
draw.SimpleText(self.T("норма"),"Metrostroi_PAM30",480, 165,Color(110,172,95),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER)
|
||
draw.SimpleText(self.T("Версия ПО БЦВМ = 0.6"),"Metrostroi_PAM30",80, 245,Color(110,172,95),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER)
|
||
|
||
if not train:GetNW2Bool("PAM:RR",false) then
|
||
draw.SimpleText(self.T("Вставьте реверсивную рукоятку"),"Metrostroi_PAM30",10, 320,Color(110,172,95),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER)
|
||
else
|
||
draw.SimpleText(self.T("Для ввода кода доступа"),"Metrostroi_PAM30",10, 320,Color(110,172,95),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER)
|
||
Metrostroi.DrawRectOutline(100, 345, 75, 30,Color(110,172,95),3 ,Color(230,230,230))
|
||
draw.SimpleText(self.T("нажми Enter"),"Metrostroi_PAM30",10, 360,Color(110,172,95),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER)
|
||
end
|
||
|
||
end
|
||
if train:GetNW2Int("PAM:State",-1) == 4 then
|
||
--elf.Train:GetNW2Int("PAM:Pass",0) ~= -1 and string.rep("*",self.Train:GetNW2Int("PAM:Pass",0)) or "ACCESS ERROR"
|
||
Metrostroi.DrawRectOutline(10, 80, 492, 170,Color(110,172,95),3)
|
||
if train:GetNW2Int("PAM:Pass",0) == -1 then
|
||
draw.SimpleText(self.T("ОШИБКА ДОСТУПА"),"Metrostroi_PAM30",256, 160,Color(200,0,0,255),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER)
|
||
else
|
||
draw.SimpleText(self.T("Введи код доступа в систему"),"Metrostroi_PAM30",256, 130,Color(110,172,95),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER)
|
||
if train:GetNW2Int("PAM:Pass",0) > 0 then
|
||
Metrostroi.DrawRectOutline(241 - train:GetNW2Int("PAM:Pass",0)*13, 165, 30 + train:GetNW2Int("PAM:Pass",0)*26, 40,Color(110,172,95),3,Color(230,230,230))
|
||
draw.SimpleText(string.rep("*",train:GetNW2Int("PAM:Pass",0)),"Metrostroi_PAM80",256, 200,Color(110,172,95),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER)
|
||
end
|
||
end
|
||
|
||
Metrostroi.DrawRectOutline(190, 330, 135, 40,Color(110,172,95),3,Color(230,230,230) )
|
||
draw.SimpleText(self.T("Для ввода нажми"),"Metrostroi_PAM30",256, 300,Color(110,172,95),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER)
|
||
draw.SimpleText(self.T("ENTER"),"Metrostroi_PAM30",256, 350,Color(110,172,95),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER)
|
||
|
||
end
|
||
if train:GetNW2Int("PAM:State",-1) == 5 then
|
||
draw.SimpleText(self.T("Депо. Начальное меню."),"Metrostroi_PAM30",256, 30,Color(110,172,95),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER)
|
||
--elf.Train:GetNW2Int("PAM:Pass",0) ~= -1 and string.rep("*",self.Train:GetNW2Int("PAM:Pass",0)) or "ACCESS ERROR"
|
||
Metrostroi.DrawRectOutline(10, 80, 492, 333,Color(110,172,95),3)
|
||
|
||
Metrostroi.DrawRectOL(40, 166 + (not train:GetNW2Bool("PAM:Restart") and 40 or 0), 432, 40,Color(110,172,95),3,train:GetNW2Int("PAM:State5",1) == 1 and Color(230,230,230) or Color(180,180,180))
|
||
|
||
draw.SimpleText(self.T("Выход на линию"),"Metrostroi_PAM30",60, 186 + (not train:GetNW2Bool("PAM:Restart") and 40 or 0),Color(2,2,2),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER)
|
||
if train:GetNW2Bool("PAM:Restart") then
|
||
Metrostroi.DrawRectOL(40, 216, 432, 40,Color(110,172,95),3,train:GetNW2Int("PAM:State5",1) == 2 and Color(230,230,230) or Color(180,180,180))
|
||
draw.SimpleText(self.T("Перезапуск"),"Metrostroi_PAM30",60, 236,Color(2,2,2),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER)
|
||
end
|
||
|
||
end
|
||
if train:GetNW2Int("PAM:State",-1) == 6 then
|
||
local Line = self.Train:GetNW2Int("PAM:Line",0)
|
||
local FirstStation = self.Train:GetNW2Int("PAM:FirstStation",-1)
|
||
local LastStation = self.Train:GetNW2Int("PAM:LastStation",-1)
|
||
local RouteNumber = self.Train:GetNW2Int("PAM:RouteNumber",-1)
|
||
local tbl = Metrostroi.WorkingStations
|
||
draw.SimpleText(self.T("Ввод исходных данных"),"Metrostroi_PAM30",256, 30,Color(110,172,95),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER)
|
||
--elf.Train:GetNW2Int("PAM:Pass",0) ~= -1 and string.rep("*",self.Train:GetNW2Int("PAM:Pass",0)) or "ACCESS ERROR"
|
||
Metrostroi.DrawRectOutline(10, 50, 492, 367,Color(110,172,95),3)
|
||
|
||
Metrostroi.DrawRectOL(40, 60, 432, 40,Color(110,172,95),3,train:GetNW2Int("PAM:State6",1) == 1 and Color(230,230,230) or Color(180,180,180))
|
||
draw.SimpleText(self.T("Линия"),"Metrostroi_PAM30",45, 80,Color(2,2,2),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER)
|
||
draw.SimpleText(Line,"Metrostroi_PAM30",457, 80,Color(2,2,2),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER)
|
||
|
||
Metrostroi.DrawRectOL(40, 110, 432, 40,Color(110,172,95),3,train:GetNW2Int("PAM:State6",1) == 2 and Color(230,230,230) or Color(180,180,180))
|
||
draw.SimpleText(self.T("Нач. ст."),"Metrostroi_PAM30",45, 130,Color(2,2,2),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER)
|
||
if tbl and tbl[Line] and tbl[Line][FirstStation] and Metrostroi.AnnouncerData[FirstStation] then
|
||
draw.SimpleText(Metrostroi.AnnouncerData[FirstStation][1]:sub(1,10).." "..FirstStation,"Metrostroi_PAM30",457, 130,Color(2,2,2),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER)
|
||
elseif FirstStation ~= -1 then
|
||
draw.SimpleText(FirstStation,"Metrostroi_PAM30",457, 130,Color(2,2,2),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER)
|
||
end
|
||
|
||
Metrostroi.DrawRectOL(40, 160, 432, 40,Color(110,172,95),3,train:GetNW2Int("PAM:State6",1) == 3 and Color(230,230,230) or Color(180,180,180))
|
||
draw.SimpleText(self.T("Кон. ст."),"Metrostroi_PAM30",45, 180,Color(2,2,2),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER)
|
||
if tbl and tbl[Line] and tbl[Line][LastStation] and Metrostroi.AnnouncerData[LastStation] then
|
||
draw.SimpleText(Metrostroi.AnnouncerData[LastStation][1]:sub(1,10).." "..LastStation,"Metrostroi_PAM30",457, 180,Color(2,2,2),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER)
|
||
elseif LastStation ~= -1 then
|
||
draw.SimpleText(LastStation,"Metrostroi_PAM30",457, 180,Color(2,2,2),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER)
|
||
end
|
||
Metrostroi.DrawRectOL(40, 210, 432, 40,Color(110,172,95),3,train:GetNW2Int("PAM:State6",1) == 4 and Color(230,230,230) or Color(180,180,180))
|
||
draw.SimpleText(self.T("Маршрут"),"Metrostroi_PAM30",45, 230,Color(2,2,2),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER)
|
||
if RouteNumber > -1 then draw.SimpleText(RouteNumber,"Metrostroi_PAM30",457, 230,Color(2,2,2),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER) end
|
||
|
||
Metrostroi.DrawRectOL(40, 260, 432, 40,Color(110,172,95),3,train:GetNW2Int("PAM:State6",1) == 5 and Color(230,230,230) or Color(180,180,180))
|
||
draw.SimpleText(self.T("Ввод данных"),"Metrostroi_PAM30",45, 280,Color(2,2,2),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER)
|
||
if train:GetNW2Bool("PAM:State6Error",false) then
|
||
Metrostroi.DrawRectOL(106, 125, 300, 150,Color(110,172,95),3,Color(180,180,180))
|
||
draw.SimpleText(self.T("Ошибка при"),"Metrostroi_PAM30",256, 150,Color(2,2,2),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER)
|
||
draw.SimpleText(self.T("вводе данных"),"Metrostroi_PAM30",256, 180,Color(2,2,2),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER)
|
||
Metrostroi.DrawRectOL(190, 220, 132, 40,Color(2,2,2),3,Color(220,220,220))
|
||
draw.SimpleText(self.T("ENTER"),"Metrostroi_PAM30",256, 240,Color(2,2,2),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER)
|
||
end
|
||
|
||
|
||
if train:GetNW2Int("PAM:State6",1) == 2 and tbl and tbl[Line] then
|
||
local i = 1
|
||
for k,v in pairs(tbl[Line]) do
|
||
if Metrostroi.AnnouncerData[v] and (tostring(v):find(FirstStation) or FirstStation == -1) then
|
||
i = i + 1
|
||
if i > 10 then break end
|
||
end
|
||
end
|
||
if i > 1 then
|
||
Metrostroi.DrawRectOL(80, 155, 391, -9 + i*22,Color(110,172,95),3,Color(230,230,230))
|
||
local i = 1
|
||
for k,v in pairs(tbl[Line]) do
|
||
if Metrostroi.AnnouncerData[v] and (tostring(v):find(FirstStation) or FirstStation == -1) then
|
||
if i < 10 then
|
||
draw.SimpleText(v,"Metrostroi_PAM30",86, 150+i*22,Color(2,2,2),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER)
|
||
draw.SimpleText(Metrostroi.AnnouncerData[v][1],"Metrostroi_PAM30",465, 150+i*22,Color(2,2,2),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER)
|
||
else
|
||
draw.SimpleText("...","Metrostroi_PAM30",86, 150+i*22,Color(2,2,2),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER)
|
||
draw.SimpleText("...","Metrostroi_PAM30",465, 150+i*22,Color(2,2,2),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER)
|
||
end
|
||
|
||
i = i + 1
|
||
if i > 10 then break end
|
||
end
|
||
end
|
||
Metrostroi.DrawLine(140, 155, 140, 145 + i*22,Color(110,172,95),3)
|
||
end
|
||
end
|
||
if train:GetNW2Int("PAM:State6",1) == 3 and tbl and tbl[Line] then
|
||
local i = 1
|
||
for k,v in pairs(tbl[Line]) do
|
||
if Metrostroi.AnnouncerData[v] and (tostring(v):find(LastStation) or LastStation == -1) then
|
||
i = i + 1
|
||
if i > 9 then break end
|
||
end
|
||
end
|
||
if i > 1 then
|
||
Metrostroi.DrawRectOL(80, 205, 391, -9 + i*22,Color(110,172,95),3,Color(230,230,230))
|
||
local i = 1
|
||
for k,v in pairs(tbl[Line]) do
|
||
if Metrostroi.AnnouncerData[v] and (tostring(v):find(LastStation) or LastStation == -1) then
|
||
if i < 9 then
|
||
draw.SimpleText(v,"Metrostroi_PAM30",86, 200+i*22,Color(2,2,2),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER)
|
||
draw.SimpleText(Metrostroi.AnnouncerData[v][1],"Metrostroi_PAM30",465, 200+i*22,Color(2,2,2),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER)
|
||
else
|
||
draw.SimpleText("...","Metrostroi_PAM30",86, 200+i*22,Color(2,2,2),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER)
|
||
draw.SimpleText("...","Metrostroi_PAM30",465, 200+i*22,Color(2,2,2),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER)
|
||
end
|
||
|
||
i = i + 1
|
||
if i > 9 then break end
|
||
end
|
||
end
|
||
Metrostroi.DrawLine(140, 205, 140, 195 + i*22,Color(110,172,95),3)
|
||
end
|
||
end
|
||
end
|
||
if train:GetNW2Int("PAM:State",-1) == 7 then
|
||
local Line = self.Train:GetNW2Int("PAM:Line",0)
|
||
local LastStation = self.Train:GetNW2Int("PAM:LastStation",-1)
|
||
local RouteNumber = self.Train:GetNW2Int("PAM:RouteNumber",-1)
|
||
local tbl = Metrostroi.WorkingStations
|
||
draw.SimpleText(self.T("Перезапуск"),"Metrostroi_PAM30",110, 30,Color(110,172,95),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER)
|
||
--elf.Train:GetNW2Int("PAM:Pass",0) ~= -1 and string.rep("*",self.Train:GetNW2Int("PAM:Pass",0)) or "ACCESS ERROR"
|
||
Metrostroi.DrawRectOutline(10, 50, 492, 367,Color(110,172,95),3)
|
||
|
||
Metrostroi.DrawRectOL(40, 60, 432, 40,Color(110,172,95),3,train:GetNW2Int("PAM:State6",1) == 1 and Color(230,230,230) or Color(180,180,180))
|
||
draw.SimpleText(self.T("Линия"),"Metrostroi_PAM30",45, 80,Color(2,2,2),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER)
|
||
draw.SimpleText(Line,"Metrostroi_PAM30",457, 80,Color(2,2,2),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER)
|
||
|
||
|
||
Metrostroi.DrawRectOL(40, 110, 432, 40,Color(110,172,95),3,train:GetNW2Int("PAM:State6",1) == 2 and Color(230,230,230) or Color(180,180,180))
|
||
draw.SimpleText(self.T("Кон. ст."),"Metrostroi_PAM30",45, 130,Color(2,2,2),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER)
|
||
if tbl[Line] and tbl[Line][LastStation] and Metrostroi.AnnouncerData[LastStation] then
|
||
draw.SimpleText(Metrostroi.AnnouncerData[LastStation][1]:sub(1,10).." "..LastStation,"Metrostroi_PAM30",457, 130,Color(2,2,2),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER)
|
||
elseif LastStation ~= -1 then
|
||
draw.SimpleText(LastStation,"Metrostroi_PAM30",457, 130,Color(2,2,2),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER)
|
||
end
|
||
|
||
Metrostroi.DrawRectOL(40, 160, 432, 40,Color(110,172,95),3,train:GetNW2Int("PAM:State6",1) == 3 and Color(230,230,230) or Color(180,180,180))
|
||
draw.SimpleText(self.T("Маршрут"),"Metrostroi_PAM30",45, 180,Color(2,2,2),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER)
|
||
if RouteNumber > -1 then draw.SimpleText(RouteNumber,"Metrostroi_PAM30",457, 180,Color(2,2,2),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER) end
|
||
|
||
|
||
Metrostroi.DrawRectOL(40, 210, 432, 40,Color(110,172,95),3,train:GetNW2Int("PAM:State6",1) == 4 and Color(230,230,230) or Color(180,180,180))
|
||
draw.SimpleText(self.T("Ввод данных"),"Metrostroi_PAM30",45, 230,Color(2,2,2),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER)
|
||
if train:GetNW2Bool("PAM:State6Error",false) then
|
||
Metrostroi.DrawRectOL(106, 125, 300, 150,Color(110,172,95),3,Color(180,180,180))
|
||
draw.SimpleText(self.T("Ошибка при"),"Metrostroi_PAM30",256, 150,Color(2,2,2),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER)
|
||
draw.SimpleText(self.T("вводе данных"),"Metrostroi_PAM30",256, 180,Color(2,2,2),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER)
|
||
Metrostroi.DrawRectOL(190, 220, 132, 40,Color(2,2,2),3,Color(220,220,220))
|
||
draw.SimpleText(self.T("ENTER"),"Metrostroi_PAM30",256, 240,Color(2,2,2),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER)
|
||
end
|
||
|
||
if train:GetNW2Int("PAM:State6",1) == 2 and tbl[Line] then
|
||
local i = 1
|
||
for k,v in pairs(tbl[Line]) do
|
||
if Metrostroi.AnnouncerData[v] and (tostring(v):find(LastStation) or LastStation == -1) then
|
||
i = i + 1
|
||
if i > 10 then break end
|
||
end
|
||
end
|
||
if i > 1 then
|
||
Metrostroi.DrawRectOL(80, 155, 391, -9 + i*22,Color(110,172,95),3,Color(230,230,230) )
|
||
local i = 1
|
||
for k,v in pairs(tbl[Line]) do
|
||
if Metrostroi.AnnouncerData[v] and (tostring(v):find(LastStation) or LastStation == -1) then
|
||
if i < 10 then
|
||
draw.SimpleText(v,"Metrostroi_PAM30",86, 150+i*22,Color(2,2,2),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER)
|
||
draw.SimpleText(Metrostroi.AnnouncerData[v][1],"Metrostroi_PAM30",465, 150+i*22,Color(2,2,2),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER)
|
||
else
|
||
draw.SimpleText("...","Metrostroi_PAM30",86, 150+i*22,Color(2,2,2),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER)
|
||
draw.SimpleText("...","Metrostroi_PAM30",465, 150+i*22,Color(2,2,2),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER)
|
||
end
|
||
|
||
i = i + 1
|
||
if i > 10 then break end
|
||
end
|
||
end
|
||
Metrostroi.DrawLine(140, 155, 140, 145 + i*22,Color(110,172,95),3)
|
||
end
|
||
end
|
||
end
|
||
if train:GetNW2Int("PAM:State",-1) == 8 then
|
||
draw.SimpleText(self.T("Проверка состава"),"Metrostroi_PAM30",10, 30,Color(110,172,95),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER)
|
||
draw.SimpleText(self.T("перед выходом на линию"),"Metrostroi_PAM30",10, 70,Color(110,172,95),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER)
|
||
--elf.Train:GetNW2Int("PAM:Pass",0) ~= -1 and string.rep("*",self.Train:GetNW2Int("PAM:Pass",0)) or "ACCESS ERROR"
|
||
Metrostroi.DrawRectOutline(10, 100, 492, 210,Color(110,172,95),3)
|
||
draw.SimpleText(self.T("Для перехода в рабочий режим"),"Metrostroi_PAM30",60, 170,Color(110,172,95),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER)
|
||
Metrostroi.DrawRectOutline(240, 225, 100, 30,Color(110,172,95),3,Color(254,237,142))
|
||
draw.SimpleText(self.T("нажми ENTER"),"Metrostroi_PAM30",60, 240,Color(110,172,95),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER)
|
||
draw.SimpleText(self.T("Проверка состава разрешена"),"Metrostroi_PAM30",256, 365,Color(110,172,95),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER)
|
||
|
||
end
|
||
if train:GetNW2Int("PAM:State",-1) == 9 then
|
||
local Line = train:GetNW2Int("PAM:Line",0)
|
||
local Path = train:GetNW2Int("PAM:Path",0)
|
||
local Station = tonumber(train:GetNW2Int("PAM:Station",0))
|
||
local LastStation = tonumber(train:GetNW2Int("PAM:LastStation",-1))
|
||
local S = Format("%.2f",train:GetNW2Float("PAM:Distance",0))
|
||
local speed = math.floor(self.Train:GetPackedRatio(3)*100.0)
|
||
local spd = self.Train:GetNW2Bool("PAM:UOS", false) and 35 or self.Train:GetNW2Bool("PAM:VRD",false) and 20 or self.Train:GetPackedBool(46) and 80 or self.Train:GetPackedBool(45) and 70 or self.Train:GetPackedBool(44) and 60 or self.Train:GetPackedBool(43) and 40 or self.Train:GetPackedBool(42) and 0 or "НЧ"
|
||
Metrostroi.DrawRectOutline(10, 6, 100, 40,Color(110,172,95),3 )
|
||
local date = os.date("!*t",os_time)
|
||
draw.SimpleText(Format("%02d:%02d:%02d",date.hour,date.min,date.sec),"Metrostroi_PAM25",59, 30,Color(110,172,95),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER)
|
||
draw.SimpleText(self.T("Линия ")..Line,"Metrostroi_PAM30",120, 30,Color(254,237,142),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER)
|
||
if Station > 0 and Metrostroi.AnnouncerData[LastStation] then
|
||
draw.SimpleText(self.T("до ")..Metrostroi.AnnouncerData[LastStation][1],"Metrostroi_PAM25",508, 10,Color(212,212,212),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER)
|
||
draw.SimpleText(Metrostroi.AnnouncerData[Station] and Metrostroi.AnnouncerData[Station][1] or "unknown","Metrostroi_PAM25",508, 30,Color(212,212,212),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER)
|
||
elseif Metrostroi.AnnouncerData[LastStation] then
|
||
draw.SimpleText(self.T("выход на линию"),"Metrostroi_PAM25",508, 13,Color(212,212,212),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER)
|
||
draw.SimpleText(Metrostroi.AnnouncerData[LastStation][1],"Metrostroi_PAM25",508, 30,Color(212,212,212),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER)
|
||
else
|
||
draw.SimpleText(self.T("ошибка в системе ПА"),"Metrostroi_PAM25",508, 10,Color(212,212,212),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER)
|
||
draw.SimpleText(self.T("Тек:")..Station..self.T(", Кон:")..LastStation,"Metrostroi_PAM25",508, 30,Color(212,212,212),TEXT_ALIGN_RIGHT,TEXT_ALIGN_CENTER)
|
||
end
|
||
if Path and Path > 0 then
|
||
draw.SimpleText(self.T("Путь ")..Path,"Metrostroi_PAM30",240, 30,Color(254,237,142),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER)
|
||
else
|
||
draw.SimpleText(self.T("Путь N/A"),"Metrostroi_PAM30",240, 30,Color(254,237,142),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER)
|
||
end
|
||
Metrostroi.DrawRectOutline(10, 100, 400, 20,Color(40,38,39), 2)
|
||
Metrostroi.DrawLine(10, 110, 410, 110,Color(40,38,39), 2)
|
||
|
||
surface.SetDrawColor(Color(110,172,95))
|
||
surface.DrawRect(11,101,398*self.Train:GetPackedRatio(3),7)
|
||
surface.SetDrawColor((spd == "НЧ" and 20 or spd) > 20 and Color(254,237,142) or Color(200,0,0))
|
||
surface.DrawRect(11,111,398*(spd == "НЧ" and 20 or spd)/100,7)
|
||
for i = 0,10 do
|
||
if i > 0 and i < 10 then
|
||
Metrostroi.DrawLine(10 + i*40, 100, 10 + i*40, 120,Color(40,38,39), 2)
|
||
end
|
||
|
||
if i%2 == 0 or (i == 7 and spd == 70) then
|
||
draw.SimpleText(i*10,"Metrostroi_PAM30",10 + i*40, 135,(spd == "НЧ" and 20 or spd) == i*10 and ((spd == "НЧ" and 20 or spd) > 20 and Color(254,237,142) or Color(200,0,0)) or Color(74,74,74),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER)
|
||
end
|
||
end
|
||
draw.SimpleText(speed,"Metrostroi_PAM50",480, 85,Color(110,172,95),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER)
|
||
draw.SimpleText(spd,"Metrostroi_PAM50",480, 120,(spd == "НЧ" and 20 or spd) > 20 and Color(254,237,142) or Color(200,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER)
|
||
|
||
draw.SimpleText(self.T("S = ")..S,"Metrostroi_PAM30",6, 401,Color(110,172,95),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER)
|
||
draw.SimpleText(self.T("Рц = ")..train:GetNW2String("PAM:SName",""),"Metrostroi_PAM30",240, 401,Color(110,172,95),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER)
|
||
|
||
surface.SetDrawColor(Color(180,180,180))
|
||
if not train:GetNW2Bool("PAM:RR",false) then
|
||
surface.DrawRect(6,295,490,21)
|
||
draw.SimpleText(self.T("Установи реверсивную рукоятку"),"Metrostroi_PAM30",10, 305,Color(20,20,20),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER)
|
||
end
|
||
surface.DrawRect(6,320,100,24) surface.DrawRect(171,320,36,24) surface.DrawRect(212,320,54,24) --surface.DrawRect(266,320,40,20)
|
||
draw.SimpleText(self.Types[train:GetNW2Int("PAM:Type",false)].."="..self.Positions[train:GetNW2Int("PAM:KV",false)],"Metrostroi_PAM30",10, 331,Color(20,20,20),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER)
|
||
surface.DrawRect(111,320,55,24)
|
||
if train:GetNW2Bool("PAM:VZ1",false) or train:GetNW2Bool("PAM:VZ2",false) then
|
||
draw.SimpleText(train:GetNW2Bool("PAM:VZ1",false) and (train:GetNW2Bool("PAM:VZ2",false) and self.T("В1 2") or self.T("В1")) or self.T("В 2"),"Metrostroi_PAM30",85 + 55/2, 331,Color(20,20,20),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER)
|
||
end
|
||
draw.SimpleText(self.T("КД"),"Metrostroi_PAM30",171+35/2, 331,train:GetPackedBool(40) and Color(20,20,20) or Color(200,0,0),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER)
|
||
draw.SimpleText(self.T("ЛПТ"),"Metrostroi_PAM30",239, 331,train:GetPackedBool("PN") and Color(200,0,0) or Color(20,20,20),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER)
|
||
|
||
surface.DrawRect(6,355,100,21)-- surface.DrawRect(111,355,100,20) surface.DrawRect(215,355,50,20)
|
||
draw.SimpleText(self.T("КВ АРС"),"Metrostroi_PAM30",56, 365,train:GetPackedBool(48) and Color(200,0,0) or Color(20,20,20),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER)
|
||
|
||
Metrostroi.DrawRectOutline(370, 320, 130, 60,Color(110,172,95),3 )
|
||
draw.SimpleText(self.T("Т. ")..Format("%02d:%02d:%02d",date.hour,date.min,date.sec),"Metrostroi_PAM20",375, 330,Color(110,172,95),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER)
|
||
draw.SimpleText(self.T("Тпр. ")..(self.Train:GetPackedRatio(3)*100.0 > 0.25 and math.min(999,math.floor(S/(speed*1000/3600))) or "inf"),"Metrostroi_PAM20",375, 347.5,Color(110,172,95),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER)
|
||
--draw.SimpleText(self.T("На ="),"Metrostroi_PAM20",375, 347.5,Color(110,172,95),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER)
|
||
draw.SimpleText(self.T("Тост = ")..train:GetNW2Int("PAM:BoardTime",0),"Metrostroi_PAM20",375, 365,Color(110,172,95),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER)
|
||
|
||
if train:GetNW2Int("PAM:Menu",0) > 0 then
|
||
Metrostroi.DrawRectOL(50, 150, 385, 24*7+3,Color(160,160,160), 3,Color(180,180,180))
|
||
--surface.SetDrawColor(Color(180,180,180))
|
||
--surface.DrawRect(51,151,382,24*7-4)
|
||
surface.SetDrawColor(Color(200,200,200))
|
||
surface.DrawRect(51,127 + train:GetNW2Int("PAM:Menu",0)*24,382,23)
|
||
for i = 1,6 do
|
||
Metrostroi.DrawLine(50,150+24*i,435,150+24*i,Color(160,160,160),3)
|
||
end
|
||
draw.SimpleText(self.T("Проверка наката"),"Metrostroi_PAM22",256, 162,Color(2,2,2),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER)
|
||
draw.SimpleText(train:GetNW2Bool("PAM:KD") and self.T("Движение с КД") or self.T("Движение без КД"),"Metrostroi_PAM22",256, 186,Color(2,2,2),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER)
|
||
draw.SimpleText(train:GetNW2Bool("PAM:LPT") and self.T("Движение с контролем ЛПТ") or self.T("Движение без контроля ЛПТ"),"Metrostroi_PAM22",256, 210,Color(2,2,2),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER)
|
||
draw.SimpleText(self.T("Движение транзитом"),"Metrostroi_PAM22",256, 234,Color(2,2,2),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER)
|
||
draw.SimpleText(self.T("Движение с Vд = 0"),"Metrostroi_PAM22",256, 258,Color(2,2,2),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER)
|
||
draw.SimpleText(self.T("Зонный оборот"),"Metrostroi_PAM22",256, 282,Color(2,2,2),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER)
|
||
draw.SimpleText(self.T("Фиксация станции"),"Metrostroi_PAM22",256, 306,Color(2,2,2),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER)
|
||
--draw.SimpleText(self.T("Station mode"),"Metrostroi_PAM22",256, 330,Color(2,2,2),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER)
|
||
end
|
||
if train:GetNW2Int("PAM:Ann",0) > 0 then
|
||
Metrostroi.DrawRectOutline(50, 150, 385, 24*4,Color(160,160,160), 3)
|
||
surface.SetDrawColor(Color(180,180,180))
|
||
surface.DrawRect(51,151,382,24*4-4)
|
||
surface.SetDrawColor(Color(200,200,200))
|
||
surface.DrawRect(51,127 + train:GetNW2Int("PAM:Ann",0)*24,382,23)
|
||
for i = 1,3 do
|
||
Metrostroi.DrawLine(50,150+24*i,435,150+24*i,Color(160,160,160),3)
|
||
end
|
||
draw.SimpleText(self.T("Просьба выйти из вагонов"),"Metrostroi_PAM22",256, 162,Color(2,2,2),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER)
|
||
draw.SimpleText(self.T("Заходите и выходите быстрее"),"Metrostroi_PAM22",256, 186,Color(2,2,2),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER)
|
||
draw.SimpleText(self.T("Отпустите двери"),"Metrostroi_PAM22",256, 210,Color(2,2,2),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER)
|
||
draw.SimpleText(self.T("Поезд скоро отправится"),"Metrostroi_PAM22",256, 234,Color(2,2,2),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER)
|
||
end
|
||
if train:GetNW2Int("PAM:NeedConfirm",0) > 0 then
|
||
Metrostroi.DrawRectOL(106-100, 150, 300+200, 100,Color(160,160,160),3,Color(180,180,180))
|
||
draw.SimpleText(self.T("Подтверди ")..self.Questions[train:GetNW2Int("PAM:NeedConfirm",0)].."?","Metrostroi_PAM28",256, 175,Color(2,2,2),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER)
|
||
Metrostroi.DrawRectOL(190-90, 195, 132, 40,Color(160,160,160),2,Color(230,230,230))
|
||
draw.SimpleText(self.T("Да - Enter"),"Metrostroi_PAM30",256-90, 215,Color(2,2,2),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER)
|
||
Metrostroi.DrawRectOL(190+90, 195, 132, 40,Color(160,160,160),2,Color(230,230,230))
|
||
draw.SimpleText(self.T("Нет - Esc"),"Metrostroi_PAM30",256+90, 215,Color(2,2,2),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER)
|
||
end
|
||
if train:GetNW2Bool("PAM:Nakat") then
|
||
Metrostroi.DrawRectOL(106, 150, 300, 125,Color(20,20,20),3,Color(180,180,180))
|
||
draw.SimpleText(self.T("Проверка наката"),"Metrostroi_PAM30",256, 165,Color(2,2,2),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER)
|
||
draw.SimpleText(self.T("Расстояние: "),"Metrostroi_PAM30",111, 195,Color(2,2,2),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER)
|
||
draw.SimpleText(Format("%.2f",self.Train:GetNW2Float("PAM:Meters",0)),"Metrostroi_PAM30",300, 195,Color(254,237,142),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER)
|
||
draw.SimpleText(self.T("Направление: "),"Metrostroi_PAM30",111, 225,Color(2,2,2),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER)
|
||
draw.SimpleText(self.Train:GetNW2Bool("PAM:Sign",false) and self.T("Назад") or self.T("Вперёд"),"Metrostroi_PAM30",300, 225,self.Train:GetNW2Bool("PAM:Sign",false) and Color(200,0,0) or Color(110,172,95),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER)
|
||
Metrostroi.DrawRectOL(190-20, 240, 132+40, 30,Color(160,160,160),2,Color(230,230,230))
|
||
draw.SimpleText(self.T("Отмена - Esc"),"Metrostroi_PAM30",256, 255,Color(2,2,2),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER)
|
||
--draw.SimpleText(self.Questions[train:GetNW2Int("PAM:NeedConfirm",0)].."?","Metrostroi_PAM30",256, 180,Color(2,2,2),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER)
|
||
end
|
||
if train:GetNW2Int("PAM:Fix",-1) > -1 or train:GetNW2Int("PAM:Zon",-1) > -1 then
|
||
local Line = train:GetNW2Int("PAM:FLine",0)
|
||
local StationAc = train:GetNW2Int("PAM:FAc",-1)
|
||
local Station = train:GetNW2Int("PAM:FStation",0)
|
||
local choosed = train:GetNW2Int("PAM:Fix",-1) > -1 and train:GetNW2Int("PAM:Fix",0) or train:GetNW2Int("PAM:Zon",0)
|
||
surface.SetDrawColor(Color(180,180,180))
|
||
surface.DrawRect(10,151,512-20,24*6+3)
|
||
--Metrostroi.DrawRectOutline(12,153,512-24,24*8-8,Color(20,20,20), 2)
|
||
Metrostroi.DrawRectOL(12,153,512-24,24*1,Color(20,20,20), 2,choosed == 0 and Color(230,230,230) or Color(180,180,180))
|
||
draw.SimpleText(self.T("Линия"),"Metrostroi_PAM22",50, 164,Color(2,2,2),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER)
|
||
if Line > -1 then draw.SimpleText(Line,"Metrostroi_PAM22",350, 164,Color(2,2,2),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER) end
|
||
Metrostroi.DrawRectOL(12,153 + 24*1-1,512-24,24*1,Color(20,20,20), 2,choosed == 1 and Color(230,230,230) or Color(180,180,180))
|
||
draw.SimpleText(self.T("Код станции"),"Metrostroi_PAM22",50, 187,Color(2,2,2),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER)
|
||
local tbl = Metrostroi.WorkingStations
|
||
|
||
if Station ~= -1 then
|
||
for i = 1,#tostring(Station) do
|
||
draw.SimpleText(tostring(Station)[i],"Metrostroi_PAM22",350 + (i-1)*20, 187,Color(2,2,2),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER)
|
||
end
|
||
else
|
||
if tbl[Line] and tbl[Line][StationAc] and Metrostroi.AnnouncerData[StationAc] then
|
||
draw.SimpleText(Metrostroi.AnnouncerData[StationAc][1].."("..StationAc..")","Metrostroi_PAM22",350, 187,Color(2,2,2),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER)
|
||
elseif StationAc ~= -1 then
|
||
draw.SimpleText(StationAc,"Metrostroi_PAM22",350, 187,Color(2,2,2),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER)
|
||
end
|
||
end
|
||
Metrostroi.DrawRectOL(12,153 + 24*2-2,512-24,24*1,Color(20,20,20), 2,choosed == 2 and Color(230,230,230) or Color(180,180,180))
|
||
draw.SimpleText(self.T("Ввод данных"),"Metrostroi_PAM22",50, 210,Color(2,2,2),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER)
|
||
Metrostroi.DrawRectOL(12,153 + 24*3,512-24,24*3,Color(20,20,20), 2,Color(180,180,180))
|
||
local i = 0
|
||
local FLine = train:GetNW2Int("PAM:FLine",-1)
|
||
if Metrostroi.WorkingStations[FLine] then
|
||
for k,v in pairs(Metrostroi.WorkingStations[FLine]) do
|
||
if Metrostroi.AnnouncerData[v] and tostring(v):find(Station ~= -1 and Station or StationAc) then
|
||
local name = Metrostroi.AnnouncerData[v][1]
|
||
local tbl = string.Explode(" ",name)
|
||
if #tbl > 1 then
|
||
name = ""
|
||
for k,v in pairs(tbl) do
|
||
name = name..v[1]
|
||
end
|
||
end
|
||
draw.SimpleText(v .."-".. name:sub(1,2),"Metrostroi_PAM22",30 + math.floor(i/4)*110, 250-15 + i%4*15,Color(2,2,2),TEXT_ALIGN_LEFT,TEXT_ALIGN_CENTER)
|
||
i = i + 1
|
||
end
|
||
end
|
||
end
|
||
if train:GetNW2Bool("PAM:State6Error",false) then
|
||
Metrostroi.DrawRectOL(106, 125, 300, 150,Color(20,20,20),3,Color(180,180,180))
|
||
draw.SimpleText(self.T("Ошибка при"),"Metrostroi_PAM30",256, 150,Color(2,2,2),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER)
|
||
draw.SimpleText(self.T("вводе данных"),"Metrostroi_PAM30",256, 180,Color(2,2,2),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER)
|
||
Metrostroi.DrawRectOL(190, 220, 132, 40,Color(20,20,20),3,Color(230,230,230))
|
||
draw.SimpleText(self.T("ENTER"),"Metrostroi_PAM30",256, 240,Color(2,2,2),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER)
|
||
end
|
||
end
|
||
|
||
if train:GetNW2Bool("PAM:SetupError",false) then
|
||
Metrostroi.DrawRectOL(100, 125, 312, 150,Color(20,20,20),3,Color(180,180,180))
|
||
draw.SimpleText(self.T("Критическая ошибка"),"Metrostroi_PAM30",256, 150,Color(200,2,2),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER)
|
||
draw.SimpleText(self.T("Необходимо уточнение"),"Metrostroi_PAM30",256, 175,Color(2,2,2),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER)
|
||
draw.SimpleText(self.T("данных"),"Metrostroi_PAM30",256, 200,Color(2,2,2),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER)
|
||
Metrostroi.DrawRectOL(190, 220, 132, 40,Color(20,20,20),3,Color(230,230,230))
|
||
draw.SimpleText(self.T("ENTER"),"Metrostroi_PAM30",256, 240,Color(2,2,2),TEXT_ALIGN_CENTER,TEXT_ALIGN_CENTER)
|
||
end
|
||
end
|
||
surface.SetAlphaMultiplier(1)
|
||
end
|
||
function TRAIN_SYSTEM:ClientThink()
|
||
end
|
||
end
|
||
|
||
function TRAIN_SYSTEM:UpdateUPO()
|
||
for k,v in pairs(self.Train.WagonList) do
|
||
if v.UPO then v.UPO:SetStations(self.Line,self.FirstStation,self.LastStation,v == self.Train) end
|
||
v:OnButtonPress("RouteNumberUpdate",self.RouteNumber)
|
||
end
|
||
end
|
||
|
||
function TRAIN_SYSTEM:Trigger(name,nosnd)
|
||
--self.Pass = "A"
|
||
--self.State = 0
|
||
local Announcer = self.Train.Announcer
|
||
self.Pitches = {
|
||
B1 = 166,
|
||
B2 = 155 ,
|
||
B3 = 144,
|
||
B4 = 160,
|
||
B5 = 150,
|
||
B6 = 140,
|
||
B7 = 150,
|
||
B8 = 145,
|
||
B9 = 140,
|
||
BEsc = 140,
|
||
B0 = 135,
|
||
BEnter = 130,
|
||
BLeft = 125,
|
||
BDown = 120,
|
||
BRight = 115,
|
||
BF = 130,
|
||
BUp = 125,
|
||
BM = 120,
|
||
}
|
||
if not nosnd then self.Train:PlayOnce("paksd","cabin",0.75,self.Pitches[name] or 120.0) end
|
||
if self.State == 3 and name == "BEnter" then
|
||
self:SetState(4)
|
||
elseif self.State == 4 then
|
||
if name == "BEnter" then
|
||
if self.EnteredPass == "31173" then
|
||
self:SetState(-2)
|
||
elseif self.Pass ~= self.EnteredPass then
|
||
self.EnteredPass = "/"
|
||
else
|
||
self:SetState(5)
|
||
end
|
||
else
|
||
if self.EnteredPass == "/" then self.EnteredPass = "" end
|
||
local Char = tonumber(name:sub(2,2))
|
||
if Char and #self.EnteredPass < 11 then self.EnteredPass = self.EnteredPass..tonumber(name:sub(2,2)) end
|
||
end
|
||
elseif self.State == 5 then
|
||
if name == "BDown" then
|
||
self.State5Choose = math.min(self.Train:GetNW2Bool("PAM:Restart") and 2 or 1,(self.State5Choose or 1) + 1)
|
||
end
|
||
if name == "BUp" then
|
||
self.State5Choose = math.max(1,(self.State5Choose or 1) - 1)
|
||
end
|
||
if name == "BEnter" then
|
||
if self.State5Choose == 1 then
|
||
self:SetState(6)
|
||
else
|
||
self:SetState(7)
|
||
end
|
||
end
|
||
elseif self.State == 6 then
|
||
if self.State6Error then if name == "BEnter" then self.State6Error = false end return end
|
||
if name == "BDown" then
|
||
self.State6Choose = math.min(5,(self.State6Choose or 1) + 1)
|
||
end
|
||
if name == "BUp" then
|
||
self.State6Error = false
|
||
self.State6Choose = math.max(1,(self.State6Choose or 1) - 1)
|
||
end
|
||
if name == "BEsc" then
|
||
if self.State6Choose == 2 then
|
||
self.FirstStation= self.FirstStation:sub(1,-2)
|
||
end
|
||
if self.State6Choose == 3 then
|
||
self.LastStation= self.LastStation:sub(1,-2)
|
||
end
|
||
if self.State6Choose == 4 then
|
||
self.RouteNumber= self.RouteNumber:sub(1,-2)
|
||
end
|
||
self:UpdateUPO()
|
||
end
|
||
if name == "BEnter" and self.State6Choose == 5 then
|
||
if not Metrostroi.WorkingStations[self.Line] or
|
||
not Metrostroi.WorkingStations[self.Line][tonumber(self.FirstStation)] or
|
||
not Metrostroi.AnnouncerData[tonumber(self.FirstStation)] or
|
||
not Metrostroi.WorkingStations[self.Line][tonumber(self.LastStation)] or
|
||
not Metrostroi.AnnouncerData[tonumber(self.LastStation)] or
|
||
#self.RouteNumber < 3 or self.LastStation == self.FirstStation then
|
||
self.State6Error = not self.State6Error
|
||
else
|
||
self:SetState(8)
|
||
end
|
||
end
|
||
local Char = tonumber(name:sub(2,2))
|
||
if Char then
|
||
if self.State6Choose == 1 then
|
||
self.Line = Char
|
||
if Metrostroi.WorkingStations[self.Line] then
|
||
local Routelength = #Metrostroi.WorkingStations[self.Line]
|
||
self.FirstStation = tostring(Metrostroi.WorkingStations[self.Line][1])
|
||
self.LastStation = tostring(Metrostroi.WorkingStations[self.Line][Routelength])
|
||
end
|
||
end
|
||
if self.State6Choose == 2 and #self.FirstStation < 3 and (Char ~= 0 or #self.FirstStation > 0) then
|
||
self.FirstStation= self.FirstStation..tostring(Char)
|
||
end
|
||
if self.State6Choose == 3 and #self.LastStation < 3 and (Char ~= 0 or #self.LastStation > 0) then
|
||
self.LastStation= self.LastStation..tostring(Char)
|
||
end
|
||
if self.State6Choose == 4 and #self.RouteNumber < 3 then
|
||
self.RouteNumber= self.RouteNumber..tostring(Char)
|
||
end
|
||
self:UpdateUPO()
|
||
end
|
||
elseif self.State == 7 then
|
||
if self.State6Error then if name == "BEnter" then self.State6Error = false end return end
|
||
if name == "BDown" then
|
||
self.State6Choose = math.min(4,(self.State6Choose or 1) + 1)
|
||
end
|
||
if name == "BUp" then
|
||
self.State6Error = false
|
||
self.State6Choose = math.max(1,(self.State6Choose or 1) - 1)
|
||
end
|
||
if name == "BEsc" then
|
||
if self.State6Choose == 2 then
|
||
self.LastStation= self.LastStation:sub(1,-2)
|
||
end
|
||
if self.State6Choose == 3 then
|
||
self.RouteNumber= self.RouteNumber:sub(1,-2)
|
||
end
|
||
self:UpdateUPO()
|
||
end
|
||
if name == "BEnter" and self.State6Choose == 4 then
|
||
if not Metrostroi.EndStations[self.Line] or
|
||
not Metrostroi.EndStations[self.Line][tonumber(self.FirstStation)] or
|
||
not Metrostroi.AnnouncerData[tonumber(self.FirstStation)] or
|
||
not Metrostroi.EndStations[self.Line][tonumber(self.LastStation)] or
|
||
not Metrostroi.AnnouncerData[tonumber(self.LastStation)] or
|
||
#self.RouteNumber < 3 or self.LastStation == self.FirstStation then
|
||
self.State6Error = not self.State6Error
|
||
else
|
||
self:SetState(9)
|
||
for k,v in pairs(self.Train.WagonList) do
|
||
if v ~= self.Train and v["PA-M"] then
|
||
v["PA-M"]:SetState(9)
|
||
end
|
||
end
|
||
end
|
||
end
|
||
local Char = tonumber(name:sub(2,2))
|
||
if Char then
|
||
if self.State6Choose == 1 then
|
||
self.Line = Char
|
||
if Metrostroi.WorkingStations[self.Line] then
|
||
local Routelength = #Metrostroi.WorkingStations[self.Line]
|
||
self.FirstStation = self.FirstStation ~= "" and self.FirstStation or tostring(Metrostroi.WorkingStations[self.Line][1])
|
||
self.LastStation = tostring(Metrostroi.WorkingStations[self.Line][Routelength])
|
||
if tonumber(self.LastStation) < tonumber(self.FirstStation) then
|
||
local temp = self.FirstStation
|
||
self.FirstStation = self.LastStation
|
||
self.LastStation = temp
|
||
end
|
||
end
|
||
end
|
||
if self.State6Choose == 2 and #self.LastStation < 3 and (Char ~= 0 or #self.LastStation > 0) then
|
||
self.LastStation= self.LastStation..tostring(Char)
|
||
end
|
||
if self.State6Choose == 3 and #self.RouteNumber < 3 then
|
||
self.RouteNumber= self.RouteNumber..tostring(Char)
|
||
end
|
||
self:UpdateUPO()
|
||
end
|
||
elseif self.State == 8 then
|
||
if name == "BEnter" and self.Check == false then
|
||
self:SetState(9)
|
||
end
|
||
elseif self.State == 9 then
|
||
if self.Train:GetNW2Bool("PAM:SetupError",false) then
|
||
if name == "BEnter" then self:SetState(5) end
|
||
return
|
||
end
|
||
if name == "BF" then
|
||
if self.MenuChoosed == 0 and self.AnnChoosed == 0 and not self.Zon and not self.Fix then
|
||
self.MenuChoosed = 1
|
||
end
|
||
end
|
||
if name == "BDown" then
|
||
if self.MenuChoosed ~= 0 and (not self.NeedConfirm or self.NeedConfirm == 0) then
|
||
self.MenuChoosed = math.min(7,self.MenuChoosed + 1)
|
||
|
||
if self.MenuChoosed == 5 and (self.VRD or not (self.Train.ALS_ARS.Signal0 and not self.Train.ALS_ARS.RealNoFreq and not self.Train.ALS_ARS.Signal40 and not self.Train.ALS_ARS.Signal60 and not self.Train.ALS_ARS.Signal70 and not self.Train.ALS_ARS.Signal80)) then
|
||
self:Trigger("BDown",true)
|
||
elseif self.MenuChoosed == 6 then
|
||
if self.LastStation == tostring(self.Train.UPO.Station) then
|
||
self:Trigger("BDown",true)
|
||
end
|
||
elseif self.MenuChoosed == 7 then
|
||
if self.FirstStation == tostring(self.Train.UPO.Station) then
|
||
self.MenuChoosed = 4
|
||
end
|
||
end
|
||
end
|
||
if self.AnnChoosed ~= 0 and not self.Zon and not self.Fix then
|
||
self.AnnChoosed = math.min(4,self.AnnChoosed + 1)
|
||
end
|
||
end
|
||
if name == "BUp" then
|
||
if self.MenuChoosed ~= 0 and (not self.NeedConfirm or self.NeedConfirm == 0) then
|
||
self.MenuChoosed = math.max(1,self.MenuChoosed - 1)
|
||
if self.MenuChoosed == 5 and (self.VRD or not (self.Train.ALS_ARS.Signal0 and not self.Train.ALS_ARS.RealNoFreq and not self.Train.ALS_ARS.Signal40 and not self.Train.ALS_ARS.Signal60 and not self.Train.ALS_ARS.Signal70 and not self.Train.ALS_ARS.Signal80)) then
|
||
self:Trigger("BUp",true)
|
||
end
|
||
end
|
||
if self.MenuChoosed == 0 and self.AnnChoosed == 0 then
|
||
self.AnnChoosed = 1
|
||
end
|
||
if self.AnnChoosed ~= 0 then
|
||
self.AnnChoosed = math.max(1,self.AnnChoosed - 1)
|
||
end
|
||
end
|
||
if name == "BEsc" then
|
||
--if self.MenuChoosed ~= 0 then
|
||
if (not self.NeedConfirm or self.NeedConfirm == 0) then self.MenuChoosed = 0 end
|
||
self.AnnChoosed = 0
|
||
--end
|
||
end
|
||
if (self.NeedConfirm and self.NeedConfirm > 0) then
|
||
if name == "BEnter" then
|
||
if self.NeedConfirm == 1 and self.Train.Speed < 0.5 then
|
||
self.Nakat = true
|
||
end
|
||
if (self.Train.ALS_ARS.Signal0 and not self.Train.ALS_ARS.RealNoFreq and not self.Train.ALS_ARS.Signal40 and not self.Train.ALS_ARS.Signal60 and not self.Train.ALS_ARS.Signal70 and not self.Train.ALS_ARS.Signal80) then
|
||
self.VRD = true
|
||
end
|
||
if self.NeedConfirm == 6 then
|
||
self.Zon = 1
|
||
self.FStation = ""
|
||
self.FLine = self.Line
|
||
self.State6Error = false
|
||
end
|
||
if self.NeedConfirm == 7 then
|
||
self.Fix = 0
|
||
self.FStation = ""
|
||
self.FLine = nil
|
||
self.State6Error = false
|
||
end
|
||
self.NeedConfirm = 0
|
||
self.MenuChoosed = 0
|
||
end
|
||
if name == "BEsc" then
|
||
self.NeedConfirm = 0
|
||
end
|
||
end
|
||
if self.MenuChoosed ~= 0 and not self.Nakat and not self.Fix and not self.Zon then
|
||
if name == "BEnter" and (not self.NeedConfirm or self.NeedConfirm == 0) then
|
||
if self.MenuChoosed == 1 and self.Train.Speed < 0.5 then
|
||
self.NeedConfirm = 1
|
||
elseif self.MenuChoosed == 2 then
|
||
self.KD = not self.KD
|
||
elseif self.MenuChoosed == 3 then
|
||
self.LPT = not self.LPT
|
||
elseif self.MenuChoosed == 4 then
|
||
self.Transit = not self.Transit
|
||
self.AutodriveWorking = false
|
||
elseif self.MenuChoosed == 5 then
|
||
self.NeedConfirm = 5
|
||
elseif self.MenuChoosed == 6 then
|
||
self.NeedConfirm = 6
|
||
elseif self.MenuChoosed == 7 then
|
||
self.NeedConfirm = 7
|
||
elseif self.MenuChoosed == 8 and not self.Arrived then
|
||
--self.Arrived = true
|
||
--if self.Train.R_UPO.Value > 0 then
|
||
-- local tbl = Metrostroi.WorkingStations[self.Line]
|
||
--self.UPO:PlayArriving(self.Train.UPO.Station,tbl[tbl[self.Train.UPO.Station] + (self.Train.UPO.Path == 1 and 1 or -1)],self.Train.UPO.Path)
|
||
--end
|
||
end
|
||
if self.NeedConfirm == 0 then self.MenuChoosed = 0 end
|
||
--if self.State > 6 and self.State ~= 76 and self.State ~= 77 then self.State = 7 end
|
||
end
|
||
end
|
||
if self.AnnChoosed ~= 0 and not self.Nakat and not self.Fix and not self.Zon then
|
||
if name == "BEnter" then
|
||
if self.Train.R_UPO.Value > 0 then self.Train.UPO:II(self.AnnChoosed) end
|
||
self.AnnChoosed = 0
|
||
end
|
||
local Char = tonumber(name:sub(2,2))
|
||
if Char and Char > 0 and Char < 5 and self.Train.R_UPO.Value > 0 then
|
||
self.Train.UPO:II(Char)
|
||
self.AnnChoosed = 0
|
||
end
|
||
end
|
||
|
||
if name == "BEsc" and self.Nakat then
|
||
self.Nakat = false
|
||
if self.Train:ReadTrainWire(1) < 1 then
|
||
self.Train.ALS_ARS.Nakat = false
|
||
end
|
||
end
|
||
if self.Fix then
|
||
if self.State6Error then if name == "BEnter" then self.State6Error = false end return end
|
||
if name == "BEsc" then
|
||
if self.Fix == 1 and self.EnteredStation then
|
||
self.EnteredStation = nil
|
||
end
|
||
end
|
||
if name == "BEnter" and self.Fix == 2 then
|
||
if not Metrostroi.WorkingStations[self.FLine] or
|
||
not Metrostroi.WorkingStations[self.FLine][tonumber(self.FStation)] or
|
||
not Metrostroi.AnnouncerData[tonumber(self.FStation)] or tonumber(self.FStation) == self.FirstStation then
|
||
self.State6Error = not self.State6Error
|
||
else
|
||
self.FirstStation = self.FStation
|
||
self.Line = self.FLine
|
||
self.Fix = nil
|
||
self:UpdateUPO()
|
||
end
|
||
end
|
||
if name == "BEnter" and self.Fix == 1 then
|
||
self.FStation = self.EnteredStation
|
||
self.EnteredStation = nil
|
||
end
|
||
if name == "BDown" and not self.EnteredStation then
|
||
self.Fix = math.min(2,self.Fix + 1)
|
||
end
|
||
if name == "BUp" and not self.EnteredStation then
|
||
self.State6Error = false
|
||
self.Fix = math.max(0,self.Fix - 1)
|
||
end
|
||
local Char = tonumber(name:sub(2,2))
|
||
if Char then
|
||
if self.Fix == 0 then
|
||
self.FLine = Char
|
||
end
|
||
if self.Fix == 1 and not self.EnteredStation then
|
||
self.EnteredStation = ""
|
||
end
|
||
if self.Fix == 1 and #self.EnteredStation < 3 and (Char ~= 0 or #self.EnteredStation > 0) then
|
||
self.EnteredStation= self.EnteredStation..tostring(Char)
|
||
end
|
||
end
|
||
end
|
||
if self.Zon then
|
||
if self.State6Error then if name == "BEnter" then self.State6Error = false end return end
|
||
if name == "BEsc" then
|
||
if self.Zon == 1 and self.EnteredStation then
|
||
self.EnteredStation = nil
|
||
end
|
||
end
|
||
if name == "BEnter" and self.Zon == 2 then
|
||
if not Metrostroi.WorkingStations[self.FLine] or
|
||
not Metrostroi.WorkingStations[self.FLine][tonumber(self.FStation)] or
|
||
not Metrostroi.AnnouncerData[tonumber(self.FStation)] or tonumber(self.FStation) == self.LastStation then
|
||
self.State6Error = not self.State6Error
|
||
else
|
||
self.Zon = nil
|
||
self.LastStation = self.FStation
|
||
self:UpdateUPO()
|
||
end
|
||
end
|
||
if name == "BEnter" and self.Zon == 1 then
|
||
self.FStation = self.EnteredStation
|
||
self.EnteredStation = nil
|
||
end
|
||
if name == "BDown" and not self.EnteredStation then
|
||
self.Zon = math.min(2,self.Zon + 1)
|
||
end
|
||
if name == "BUp" and not self.EnteredStation then
|
||
self.State6Error = false
|
||
self.Zon = math.max(1,self.Zon - 1)
|
||
end
|
||
local Char = tonumber(name:sub(2,2))
|
||
if Char then
|
||
if self.Zon == 0 then
|
||
self.FLine = Char
|
||
end
|
||
if self.Zon == 1 and not self.EnteredStation then
|
||
self.EnteredStation = ""
|
||
end
|
||
if self.Zon == 1 and #self.EnteredStation < 3 and (Char ~= 0 or #self.EnteredStation > 0) then
|
||
self.EnteredStation= self.EnteredStation..tostring(Char)
|
||
end
|
||
end
|
||
end
|
||
end
|
||
end
|
||
function TRAIN_SYSTEM:GetTimer(val)
|
||
return self.TimerMod and (CurTime() - self.Timer) > val
|
||
end
|
||
function TRAIN_SYSTEM:SetTimer(mod)
|
||
if mod then
|
||
if self.TimerMod == mod then return end
|
||
self.TimerMod = mod
|
||
else
|
||
self.TimerMod = nil
|
||
end
|
||
self.Timer = CurTime()
|
||
end
|
||
|
||
function TRAIN_SYSTEM:SetState(state,add,state9)
|
||
local Train = self.Train
|
||
local ARS = Train.ALS_ARS
|
||
local Announcer = Train.Announcer
|
||
if state and self.State ~= state then
|
||
self.State = state
|
||
if state == 1 then
|
||
self.NextState = add
|
||
end
|
||
self:SetTimer()
|
||
elseif not state then
|
||
state = self.NextState
|
||
self.State = self.NextState
|
||
else return end
|
||
if state == 4 then
|
||
self.EnteredPass = ""
|
||
end
|
||
if state == 5 then
|
||
self.State5Choose = 1
|
||
end
|
||
if state == 6 then
|
||
self.State6Choose = 1
|
||
self.Line = self.Train.UPO.Line or 1
|
||
if Metrostroi.WorkingStations[self.Line] then
|
||
local Routelength = #Metrostroi.WorkingStations[self.Line]
|
||
self.FirstStation = self.Train.UPO.FirstStation or self.FirstStation--tostring(self.Train.UPO.Path == 2 and Metrostroi.WorkingStations[self.Line][Routelength] or Metrostroi.WorkingStations[self.Line][1])
|
||
self.LastStation = self.Train.UPO.LastStation or self.LastStation--tostring(self.Train.UPO.Path == 1 and Metrostroi.WorkingStations[self.Line][Routelength] or Metrostroi.WorkingStations[self.Line][1])
|
||
else
|
||
--self.FirstStation = "111"
|
||
--self.LastStation = "123"
|
||
end
|
||
self:UpdateUPO()
|
||
self.FirstStation = ""
|
||
self.LastStation = ""
|
||
self.State6Error = false
|
||
end
|
||
if state == 7 then
|
||
self.State6Choose = 1
|
||
self.State6Error = false
|
||
end
|
||
if state == 8 then
|
||
self.Check = nil
|
||
ARS:TriggerInput("PA-Ring",1)
|
||
for k,v in pairs(self.Train.WagonList) do
|
||
v.ENDis:TriggerInput("Set",1)
|
||
end
|
||
if not state9 then
|
||
for k,v in pairs(self.Train.WagonList) do
|
||
if v ~= self.Train and v["PA-M"] then
|
||
v["PA-M"]:SetState(8,nil,true)
|
||
end
|
||
end
|
||
end
|
||
else
|
||
for k,v in pairs(self.Train.WagonList) do
|
||
v.ENDis:TriggerInput("Set",0)
|
||
if v.ALS_ARS then v.ALS_ARS:TriggerInput("PA-Ring",0) end
|
||
end
|
||
end
|
||
if state == 9 then
|
||
if not state9 then
|
||
for k,v in pairs(self.Train.WagonList) do
|
||
if v ~= self.Train and v["PA-M"] then
|
||
v["PA-M"]:SetState(9,nil,true)
|
||
end
|
||
end
|
||
end
|
||
self.AnnChoosed = 0
|
||
self.NeedConfirm = 0
|
||
self.MenuChoosed = 0
|
||
self.Fix = nil
|
||
self.Zon = nil
|
||
Train.UPO.BoardTime = nil
|
||
self.ODZ = nil
|
||
end
|
||
if state == 0 then
|
||
self.Train:PlayOnce("paksd","cabin",0.75,200.0)
|
||
self.Train.ALS_ARS:TriggerInput("PA-Ring",0)
|
||
self.EnteredPass = ""
|
||
end
|
||
if state == 3 then
|
||
if IsValid(self.Train.DriverSeat) then
|
||
self.Train.DriverSeat:EmitSound("subway_announcer/00_05.mp3", 73, 100)
|
||
end
|
||
end
|
||
end
|
||
function TRAIN_SYSTEM:Think(dT)
|
||
if self.Train.Blok ~= 3 then self:SetState(-1) return end
|
||
--print(self.Train.Owner)
|
||
local Train = self.Train
|
||
local ARS = Train.ALS_ARS
|
||
local Announcer = Train.Announcer
|
||
-- self.Train.UPO.Station = self.Train:ReadCell(49160) > 0 and self.Train:ReadCell(49160) or self.Train:ReadCell(49161)
|
||
-- self.Train.UPO.Path = Metrostroi.PathConverter[self.Train:ReadCell(65510)] or 0
|
||
-- self.Train.UPO.Distance = math.min(9999,self.Train:ReadCell(49165) + (Train.Autodrive.Corrections[self.Train.UPO.Station] or 0))
|
||
if Train.VAU.Value < 0.5 or Train.Panel["V1"] < 0.5 then self:SetState(-1) end
|
||
if Train.VAU.Value > 0.5 and self.State == -1 and Train.Panel["V1"] > 0.5 then self:SetState(0) end
|
||
if Train.VB.Value > 0.5 and Train.Battery.Voltage > 55 and self.State > -1 then
|
||
for k,v in pairs(self.TriggerNames) do
|
||
if Train[v] and (Train[v].Value > 0.5) ~= self.Triggers[v] then
|
||
if Train[v].Value > 0.5 then
|
||
self:Trigger(v)
|
||
end
|
||
--print(v,self.Train[v].Value > 0.5)
|
||
self.Triggers[v] = Train[v].Value > 0.5
|
||
end
|
||
end
|
||
end
|
||
if self.Train.KV.ReverserPosition == 0 and self.State > 3 and self.State < 8 and self.State ~= -9 then self:SetState(3) end
|
||
if self.State == 0 and self.RealState ~= 0 then
|
||
elseif self.State == 0 then
|
||
self:SetTimer(0.5)
|
||
if self:GetTimer(4) then
|
||
self:SetState(1,2)
|
||
end
|
||
elseif self.State == 1 then
|
||
self:SetTimer(1)
|
||
if self:GetTimer(0.4) then
|
||
self:SetState()
|
||
end
|
||
elseif self.State == 2 then
|
||
self:SetTimer(0.5)
|
||
if self:GetTimer(6) then
|
||
self:SetState(1,3)
|
||
end
|
||
elseif self.State == 8 then
|
||
--print(ARS.KVT)
|
||
if ARS.KVT and self.Check == nil then
|
||
self.Check = true
|
||
self:SetTimer(4)
|
||
end
|
||
if not ARS.KVT and self.Check ~= false then
|
||
self.Check = nil
|
||
self:SetTimer()
|
||
end
|
||
if ARS.KVT and self:GetTimer(1) then
|
||
self.Check = false
|
||
ARS:TriggerInput("PA-Ring",0)
|
||
for k,v in pairs(self.Train.WagonList) do
|
||
if v ~= self.Train and v.ALS_ARS then
|
||
v.ALS_ARS:TriggerInput("PA-Ring",0)
|
||
end
|
||
end
|
||
self:SetTimer()
|
||
end
|
||
elseif self.State == 9 then
|
||
if (self.Train.UPO:GetSTNum(self.LastStation) > self.Train.UPO:GetSTNum(self.FirstStation) and self.Train.UPO.Path == 2) or (self.Train.UPO:GetSTNum(self.FirstStation) > self.Train.UPO:GetSTNum(self.LastStation) and self.Train.UPO.Path == 1) then
|
||
local old = self.LastStation
|
||
self.LastStation = self.FirstStation
|
||
self.FirstStation = old
|
||
end
|
||
if self.VRD and (not ARS.Signal0 or ARS.Signal0 and (ARS.Signal40 or ARS.Signal60 or ARS.Signal70 or ARS.Signal80)) then self.VRD = false end
|
||
self.State9 = (Train.UPO:End(self.Train.UPO.Station,self.Train.UPO.Path,true) or Train.UPO:GetSTNum(self.LastStation) > Train.UPO:GetSTNum(self.Train.UPO.Station) and self.Train.UPO.Path == 2 or Train.UPO:GetSTNum(self.Train.UPO.Station) < Train.UPO:GetSTNum(self.FirstStation) and self.Train.UPO.Path == 1) and 0 or 1--self.Arrived ~= nil and 1 or 2
|
||
if self.State9 ~= 0 and self.Train.KV.ReverserPosition ~= 0 then
|
||
if not self.Trainsit then
|
||
if self.Train.UPO.Distance < 100 and self.Train.Speed > 55 then
|
||
self.StopTrain = true
|
||
end
|
||
if self.Train.UPO.Distance < 10 and self.Train.Speed > 20 then
|
||
self.StopTrain = true
|
||
end
|
||
if self.Train.Speed < 0.5 and self.StopTrain then
|
||
self.StopTrain = false
|
||
end
|
||
if self.StopTrain then
|
||
end
|
||
elseif self.StopTrain then
|
||
self.StopTrain = false
|
||
end
|
||
|
||
if self.RealState == 8 and not self.Transit then
|
||
if self.Train.UPO.Distance < 75 and not self.Arrived and Metrostroi.WorkingStations[self.Line][self.Train.UPO.Station] and ARS.Speed <= 1 then
|
||
self.Arrived = true
|
||
end
|
||
end
|
||
--[[
|
||
if not self.Transit and 45 < self.Train.UPO.Distance and self.Train.UPO.Distance < 75 and not self.Arrived and Metrostroi.WorkingStations[self.Line][self.Train.UPO.Station] then
|
||
self.Arrived = true
|
||
if self.Train.R_UPO.Value > 0 then
|
||
local tbl = Metrostroi.WorkingStations[self.Line]
|
||
self.UPO:PlayArriving(self.Train.UPO.Station,tbl[tbl[self.Train.UPO.Station] + (self.Train.UPO.Path == 1 and 1 or -1)],self.Train.UPO.Path)
|
||
end
|
||
end
|
||
]]
|
||
if self.Transit then self.Arrived = nil end
|
||
if self.Train.UPO.Distance > 75 then
|
||
self.Arrived = nil
|
||
else
|
||
--if self.Train.Panel.SD < 0.5 then self.Arrived = true end
|
||
end
|
||
--if (self.Ring == nil or self.Ring == 0) and self.Train.Panel.SD < 0.5 then
|
||
--self.Ring = false
|
||
--end
|
||
if self.Arrived then
|
||
if Train.UPO.BoardTime and math.floor((Train.UPO.BoardTime or CurTime()) - CurTime()) < (self.Train.Horlift and 15 or 8) and self.Arrived then
|
||
self.Arrived = false
|
||
end
|
||
end
|
||
if (self.Train:ReadCell(1) > 0 or ARS.Speed > 1) and self.Arrived == false then self.Arrived = nil end
|
||
end
|
||
if self.Nakat then
|
||
if not self.Meters then self.Meters = 0 end
|
||
self.Meters = self.Meters + ARS.Speed*self.Train.SpeedSign/3600*1000*dT
|
||
if math.abs(self.Meters) > 2.5 then
|
||
self.Nakat = false
|
||
if self.Train:ReadTrainWire(1) < 1 then
|
||
ARS.Nakat = self.Meters < 0
|
||
end
|
||
end
|
||
else
|
||
self.Meters = nil
|
||
end
|
||
end
|
||
if self.State ~= self.RealState then
|
||
self.RealState = self.State
|
||
self.TimeOverride = true
|
||
end
|
||
|
||
self.Time = self.Time or CurTime()
|
||
if (CurTime() - self.Time) > 0.1 or self.TimeOverride then
|
||
self.TimeOverride = nil
|
||
--print(1)
|
||
self.Time = CurTime()
|
||
Train:SetNW2Int("PAM:State",self.State)
|
||
if self.State == 3 then
|
||
Train:SetNW2Bool("PAM:RR",self.Train.KV.ReverserPosition ~= 0)
|
||
elseif self.State == 4 then
|
||
Train:SetNW2Int("PAM:Pass",self.EnteredPass ~= "/" and #self.EnteredPass or -1)
|
||
elseif self.State == 5 then
|
||
Train:SetNW2Bool("PAM:Restart",self.FirstStation ~= "" and self.LastStation ~= "")
|
||
Train:SetNW2Int("PAM:State5",self.State5Choose)
|
||
elseif self.State == 6 then
|
||
Train:SetNW2Int("PAM:State6",self.State6Choose)
|
||
Train:SetNW2Bool("PAM:State6Error",self.State6Error)
|
||
Train:SetNW2Int("PAM:LastStation",tonumber(self.LastStation) or -1)
|
||
Train:SetNW2Int("PAM:FirstStation",tonumber(self.FirstStation) or -1)
|
||
Train:SetNW2Int("PAM:Line",self.Line)
|
||
Train:SetNW2Int("PAM:RouteNumber",tonumber(self.RouteNumber ~= "" and self.RouteNumber or -1))
|
||
elseif self.State == 7 then
|
||
Train:SetNW2Int("PAM:State6",self.State6Choose)
|
||
Train:SetNW2Bool("PAM:State6Error",self.State6Error)
|
||
Train:SetNW2Int("PAM:LastStation",tonumber(self.LastStation) or -1)
|
||
Train:SetNW2Int("PAM:Line",self.Line)
|
||
Train:SetNW2Int("PAM:RouteNumber",tonumber(self.RouteNumber ~= "" and self.RouteNumber or -1))
|
||
--Train:SetNW2Int("PAM:LastStation",tonumber(self.LastStation) or -1)
|
||
--Train:SetNW2Int("PAM:Line",self.Line)
|
||
--Train:SetNW2Int("PAM:RouteNumber",tonumber(self.RouteNumber ~= "" and self.RouteNumber or -1))
|
||
elseif self.State == 9 then
|
||
Train:SetNW2Int("PAM:Line",self.Line)
|
||
Train:SetNW2Int("PAM:Path",self.Train.UPO.Path)
|
||
Train:SetNW2Int("PAM:Station",self.State9 == 0 and 0 or self.Train.UPO.Station)
|
||
Train:SetNW2Int("PAM:LastStation",self.LastStation)
|
||
Train:SetNW2Float("PAM:Distance",math.Round(self.Train.UPO.Distance,2))
|
||
Train:SetNW2String("PAM:SName",ARS.Signal and ARS.Signal.RealName or "ERR")
|
||
Train:SetNW2Bool("PAM:RR",self.Train.KV.ReverserPosition ~= 0)
|
||
Train:SetNW2Int("PAM:Type",(self.Train.Pneumatic.EmergencyValveEPK and 0 or self.Train.ALS_ARS.UAVAContacts and 4 or self.UOS and 5 or self.VRD and 2 or (self.Train.Autodrive.AutodriveEnabled or self.Train.UPO.StationAutodrive) and 1 or 3))
|
||
Train:SetNW2Int("PAM:KV",self.Train.Autodrive.AutodriveEnabled and (self.Rotating and -3 or self.Brake and -1 or self.Accelerate and 3 or 0) or (ARS["33G"] > 0 or (self.UOS and (ARS["8"] + (1-self.Train.RPB.Value)) > 0)) and 5 or self.Train.KV.RealControllerPosition)
|
||
Train:SetNW2Bool("PAM:VZ1", self.Train:ReadTrainWire(29) > 0)
|
||
Train:SetNW2Bool("PAM:VZ2", self.Train.PneumaticNo2.Value > 0)
|
||
Train:SetNW2Int("PAM:Menu", self.MenuChoosed or 0)
|
||
Train:SetNW2Int("PAM:Ann",self.AnnChoosed)
|
||
Train:SetNW2Int("PAM:NeedConfirm",self.NeedConfirm)
|
||
Train:SetNW2Int("PAM:BoardTime",math.floor((Train.UPO.BoardTime or CurTime()) - CurTime()))
|
||
Train:SetNW2Bool("PAM:KD",self.KD)
|
||
Train:SetNW2Bool("PAM:LPT",self.LPT)
|
||
Train:SetNW2Bool("PAM:SetupError",Metrostroi.AnnouncerData[tonumber(self.FirstStation)] == nil or Metrostroi.AnnouncerData[tonumber(self.LastStation)] == nil)
|
||
self.Train:SetNW2Bool("PAM:Nakat",self.Nakat)
|
||
if self.Nakat then
|
||
self.Train:SetNW2Float("PAM:Meters",math.Round(math.abs(self.Meters or 0),2))
|
||
self.Train:SetNW2Bool("PAM:Sign",ARS.Speed > 0.5 and self.Train.SpeedSign < 0)
|
||
end
|
||
self.Train:SetNW2Int("PAM:Fix",self.Fix or -1)
|
||
self.Train:SetNW2Int("PAM:Zon",self.Zon or -1)
|
||
if self.Fix or self.Zon then
|
||
Train:SetNW2Int("PAM:FLine",self.FLine or -1)
|
||
Train:SetNW2Int("PAM:FStation",tonumber(self.EnteredStation) or -1)
|
||
Train:SetNW2Int("PAM:FAc",tonumber(self.FStation) or -1)
|
||
Train:SetNW2Bool("PAM:State6Error",self.State6Error)
|
||
end
|
||
|
||
else
|
||
end
|
||
end
|
||
if Train.VZP.Value > 0.5 then
|
||
Train.Autodrive:Enable()
|
||
end
|
||
self.RouteNumber = string.gsub(self.Train.RouteNumber or "","^(0+)","")
|
||
if self.State > 7 then
|
||
self.Line = self.Train.UPO.Line
|
||
self.FirstStation = tostring(self.Train.UPO.FirstStation or "")
|
||
self.LastStation = tostring(self.Train.UPO.LastStation or "")
|
||
end
|
||
end
|