1
0
mirror of https://github.com/metrostroi-repo/MetrostroiAddon.git synced 2026-05-02 00:42:29 +00:00
Files
MetrostroiAddon/lua/metrostroi/systems/_obsolete/sys_pa-m.lua
g_brzhezinskiy 1d05caf866 init
2021-01-02 12:51:45 +03:00

1551 lines
68 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
--------------------------------------------------------------------------------
-- ПА-М Поездная Аппаратура Модифицированная
-- 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