From 971d1522947dc7096a343a395f3f9fc42f5fe54e Mon Sep 17 00:00:00 2001 From: Hellss Date: Thu, 6 Jan 2022 23:01:22 +0300 Subject: [PATCH] Added interim em508 --- lua/entities/gmod_subway_em508/cl_init.lua | 1258 ++++++++++++++++++++ lua/entities/gmod_subway_em508/init.lua | 472 ++++++++ lua/entities/gmod_subway_em508/shared.lua | 597 ++++++++++ lua/entities/gmod_subway_em509/cl_init.lua | 2 +- lua/entities/gmod_subway_em509/shared.lua | 2 +- lua/metrostroi_data/languages/cz_702.lua | 4 +- lua/metrostroi_data/languages/de_702.lua | 4 +- lua/metrostroi_data/languages/en_509.lua | 52 + lua/metrostroi_data/languages/en_702.lua | 4 +- lua/metrostroi_data/languages/fr_702.lua | 4 +- lua/metrostroi_data/languages/hu_702.lua | 4 +- lua/metrostroi_data/languages/it_702.lua | 4 +- lua/metrostroi_data/languages/kr_702.lua | 4 +- lua/metrostroi_data/languages/pl_702.lua | 4 +- lua/metrostroi_data/languages/ru_509.lua | 54 +- lua/metrostroi_data/languages/ru_702.lua | 4 +- 16 files changed, 2452 insertions(+), 21 deletions(-) create mode 100644 lua/entities/gmod_subway_em508/cl_init.lua create mode 100644 lua/entities/gmod_subway_em508/init.lua create mode 100644 lua/entities/gmod_subway_em508/shared.lua diff --git a/lua/entities/gmod_subway_em508/cl_init.lua b/lua/entities/gmod_subway_em508/cl_init.lua new file mode 100644 index 0000000..3d49aa3 --- /dev/null +++ b/lua/entities/gmod_subway_em508/cl_init.lua @@ -0,0 +1,1258 @@ +-------------------------------------------------------------------------------- +-- All the models, materials, sounds belong to their corresponding authors. Permission is granted to only distribute these models through Garry's Mod Steam Workshop and the official Metrostroi GitHub accounts for use with Garry's Mod and Metrostroi Subway Simulator. +-- +-- It is forbidden to use any of these models, materials, sounds and other content for any commercial purposes without an explicit permission from the authors. It is forbidden to make any changes in these files in any derivative projects without an explicit permission from the author. +-- +-- The following models are (C) 2015-2018 oldy (Aleksandr Kravchenko). All rights reserved. +-- models\metrostroi_train\81-502: +-- - 81-502 (Ema-502 head) +-- - 81-501 (Em-501 intermediate) +-- models\metrostroi_train\81-702: +-- - 81-702 (D head) +-- - 81-702 (D intermediate) +-- models\metrostroi_train\81-703: +-- - 81-703 (E head) +-- - 81-508 (E intermediate) +-- models\metrostroi_train\81-707: +-- - 81-707 (Ezh head) +-- - 81-708 (Ezh1 intermediate) +-- models\metrostroi_train\81-710: +-- - 81-710 (Ezh3 head) +-- - 81-508T (Em-508T intermediate) +-- models\metrostroi_train\81-717: +-- - 81-717 (Moscow head) +-- - 81-714 (Moscow intermediate) +-- - 81-717 (St. Petersburg head) +-- - 81-714 (St. Petersburg intermediate) +-- models\metrostroi_train\81-718: +-- - 81-718 (TISU head) +-- - 81-719 (TISU intermediate) +-- models\metrostroi_train\81-720: +-- - 81-720 (Yauza head) +-- - 81-721 (Yauza intermediate) +-- - 81-722 (Yubileyniy head) +-- models\metrostroi_train\81-722: +-- - 81-723 (Yubileyniy intermediate motor) +-- - 81-724 (Yubileyniy intermediate trailer) +-------------------------------------------------------------------------------- +include("shared.lua") + + +local function addTW10Cosume(panelName,ignores) + for _,button in pairs(ENT.ButtonMap[panelName].buttons) do + if not button.model or not button.model.lamp then continue end + if not table.HasValue(ignores or {},button.ID) then + local rand1 = 0.1 + local rand2 = math.Rand(0.6,3.5) + if button.model.lamp.getfunc then + local oldgetfunc = button.model.lamp.getfunc + button.model.lamp.getfunc = function(ent,vmin,vmax,var) + return (rand1+ent:GetPackedRatio("LampsCount")^rand2)*oldgetfunc(ent,vmin,vmax,var) + end + else + button.model.lamp.getfunc = function(ent,_,_,var) return ent:GetPackedBool(var) and rand1+ent:GetPackedRatio("LampsCount")^rand2 or 0 end + end + end + + end +end +-------------------------------------------------------------------------------- +ENT.ClientProps = {} +ENT.ButtonMap = {} +ENT.AutoAnims = {} +ENT.AutoAnimNames = {} +ENT.ClientSounds = {} + +ENT.ButtonMap["PanelLamp"] = { + pos = Vector(453.7,-57.31,42), + ang = Angle(180,275,-5), + width = 100, + height = 200, + scale = 0.0588, + + buttons = { + {ID = "PanelLampToggle", x=0, y=0, w=100, h=200, tooltip="",var="PanelLights"}, + } +} + +-- Main panel +ENT.ButtonMap["Main"] = { + pos = Vector(457.6,-32,-8.0), + ang = Angle(0,-90,70), + width = 260, + height = 190, + scale = 0.0588, + hideseat = 0.2, + + buttons = { + {ID = "!GRP", x=25+41.7*3,y=29, radius=20, tooltip="", model = { + lamp = {model = "models/metrostroi_train/81-703/cabin_lamp_green.mdl",color = Color(98,178,178),z = 10, var="GRP",}, + sprite = {bright=0.25,size=0.25,scale=0.07,color=Color(40,255,100),z=12,} + }}, + {ID = "!RRP", x=25+41.7*4,y=29, radius=20, tooltip="", model = { + lamp = {model = "models/metrostroi_train/81-703/cabin_lamp_red3.mdl",color = Color(178,112,112),z = 10, var="RRP", getfunc = function(ent,min,max) return ent:GetPackedRatio("RRP") end}, + sprite = {bright=0.25,size=0.25,scale=0.07,color=Color(255,60,60),z=12} + }}, + {ID = "!SD", x=25+41.7*5,y=29, radius=20, tooltip="", model = { + lamp = {model = "models/metrostroi_train/81-703/cabin_lamp_white.mdl",color = Color(178,178,178),z = 10, var="SD",}, + sprite = {bright=0.25,size=0.25,scale=0.07,color=Color(255,255,255),z=12,} + }}, + {ID = "KU4Set", x=30+40*0, y=100, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_button_black.mdl",ang = 180-30,z=0,vmin=1,vmax=0, + var="KU4",speed=16, + sndvol = 0.10, snd = function(val) return val and "button2_on" or "button2_off" end,sndmin = 60, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + {ID = "KU5Set", x=30+40*1, y=100, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_button_black.mdl",ang = 180-30,z=0,vmin=1,vmax=0, + var="KU5",speed=16, + sndvol = 0.10, snd = function(val) return val and "button2_on" or "button2_off" end,sndmin = 60, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + {ID = "KU9Set", x=30+40*2, y=100, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_button_black.mdl",ang = 180-30,z=0,vmin=1,vmax=0, + var="KU9",speed=16, + sndvol = 0.10, snd = function(val) return val and "button2_on" or "button2_off" end,sndmin = 60, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + {ID = "KU8Set", x=30+40*3, y=100, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_button_black.mdl",ang = 180-30,z=0,vmin=1,vmax=0, + var="KU8",speed=16, + sndvol = 0.10, snd = function(val) return val and "button2_on" or "button2_off" end,sndmin = 60, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + {ID = "KU10Set", x=30+40*4, y=100, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_button_black.mdl",ang = 180-30,z=0,vmin=1,vmax=0, + var="KU10",speed=16, + sndvol = 0.10, snd = function(val) return val and "button2_on" or "button2_off" end,sndmin = 60, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + {ID = "KU6Set", x=30+40*5, y=100, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_button_black.mdl",ang = 180-30,z=0,vmin=1,vmax=0, + var="KU6",speed=16, + sndvol = 0.10, snd = function(val) return val and "button2_on" or "button2_off" end,sndmin = 60, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + + {ID = "KU7Set", x=40+44.75*1, y=155, radius=20, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_button_black.mdl",ang = 180-30,z=0,vmin=1,vmax=0, + var="KU7",speed=16, + sndvol = 0.10, snd = function(val) return val and "button2_on" or "button2_off" end,sndmin = 60, sndmax = 1e3/3, sndang = Angle(-90,0,0), + }}, + + + {ID = "KU1Toggle",x=28,y=155-5,radius=20, tooltip="", model = { + model = "models/metrostroi_train/switches/vudwhite.mdl", z=-23, + var="KU1",speed=6, + sndvol = 1, snd = function(val) return val and "vu224_on" or "vu224_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + {ID = "KU2Toggle",x=232,y=155-5,radius=20, tooltip="", model = { + model = "models/metrostroi_train/switches/vudwhite.mdl", z=-23, + var="KU2",speed=6, + sndvol = 1, snd = function(val) return val and "vu224_on" or "vu224_off" end, + sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0), + states={"Train.Buttons.Unlocked","Train.Buttons.Locked"}, + }}, + } +} +addTW10Cosume("Main") + +--VU Panel +ENT.ButtonMap["VU"] = { + pos = Vector(463.6,-16.8,20), + ang = Angle(0,270,90), + width = 100, + height = 110, + scale = 0.0625, + hideseat = 0.2, + + buttons = { + {ID = "VUToggle", x=0, y=0, w=100, h=110, tooltip="", model = { + model = "models/metrostroi_train/equipment/vu22_black.mdl", z=20, ang = 180, + labels={{model="models/metrostroi_train/81-502/labels/vu_labels.mdl",skin=0,ang=90,z=20.9,x=0,y=-12.5}}, + plomb = {model = "models/metrostroi_train/equipment/vu_plomb_right.mdl",ang=Angle(-90,90,0),x=25,y=33.2,z=9.3,var="VUPl", ID="VUPl",}, + var="VU",speed=6, + sndvol = 0.5, snd = function(val) return val and "vu22_on" or "vu22_off" end, + sndmin = 50, sndmax = 1e3, sndang = Angle(0,0,0), + }}, + } +} + +ENT.ButtonMap["VU4"] = { + pos = Vector(467,25.15-1,36.5), + ang = Angle(0,270,90), + width = 100, + height = 220, + scale = 0.0625, + hideseat=0.2, + + buttons = { + { ID = "KU16Toggle", x=0, y=110, w=100, h=110, tooltip="", model = { + model = "models/metrostroi_train/equipment/vu22_black.mdl", z=20, ang = 180, + var="KU16",speed=6, + sndvol = 0.5, snd = function(val) return val and "vu22_on" or "vu22_off" end, + sndmin = 50, sndmax = 1e3, sndang = Angle(0,0,0), + }}, + } +} + +ENT.ButtonMap["AVMain"] = { + pos = Vector(405.5,40,36), + ang = Angle(0,90,90), + width = 290, + height = 270, + scale = 0.0625, + hide = 0.8, + + buttons = { + {ID = "AVToggle", x=0, y=0, w=290, h=270, tooltip="", model = { + model = "models/metrostroi_train/81-710/ezh3_av8r.mdl",x=-35, y=55, z=23, ang = Angle(90,0,0), + var="AV",speed=0.85, vmin=0.73,vmax=0.80, + sndvol = 1, snd = function(val) return val and "av8_on" or "av8_off" end, + }}, + } +} + +---Av1 Panel +ENT.ButtonMap["AV1"] = { + pos = Vector(403.5,39.3,18), + ang = Angle(0,90,90), + width = 340, + height = 140, + scale = 0.0625, + hide = 0.8, + + buttons = { + {ID = "VU3Toggle", x=0, y=0, w=100, h=140, tooltip="", model = { + model = "models/metrostroi_train/Equipment/vu22_black.mdl", z=20, ang = 180, + labels={{model="models/metrostroi_train/81-707/labels/vu_labels.mdl",skin=0,ang=90,z=20.9,x=0,y=-12.5}}, + var="VU3",speed=6, + sndvol = 0.5, snd = function(val) return val and "vu22_on" or "vu22_off" end, + sndmin = 50, sndmax = 1e3, sndang = Angle(0,0,0), + }}, + {ID = "VU2Toggle", x=120, y=0, w=100, h=140, tooltip="", model = { + model = "models/metrostroi_train/Equipment/vu22_black.mdl", z=20, ang = 180, + labels={{model="models/metrostroi_train/81-707/labels/vu_labels.mdl",skin=0,ang=90,z=20.9,x=0,y=-12.5}}, + var="VU2",speed=6, + sndvol = 0.5, snd = function(val) return val and "vu22_on" or "vu22_off" end, + sndmin = 50, sndmax = 1e3, sndang = Angle(0,0,0), + }}, + {ID = "VU1Toggle", x=240, y=0, w=100, h=140, tooltip="", model = { + model = "models/metrostroi_train/Equipment/vu22_black.mdl", z=20, ang = 180, + labels={{model="models/metrostroi_train/81-707/labels/vu_labels.mdl",skin=0,ang=90,z=20.9,x=0,y=-12.5}}, + var="VU1",speed=6, + sndvol = 0.5, snd = function(val) return val and "vu22_on" or "vu22_off" end, + sndmin = 50, sndmax = 1e3, sndang = Angle(0,0,0), + }}, + } +} + +-- Battery panel +ENT.ButtonMap["Battery"] = { + pos = Vector(403.5,21,20.5), + ang = Angle(0,90,90), + width = 250, + height = 140, + scale = 0.0625, + hide = 0.8, + + buttons = { + {ID = "VBToggle", x=0, y=0, w=250, h=140, tooltip="", model = { + model = "models/metrostroi_train/Equipment/vu22_black_3.mdl", z=15, ang=Angle(90,0,180), + var="VB",speed=6,vmin=1,vmax=0, + sndvol = 1, snd = function(val) return val and "vu223_on" or "vu223_off" end, + sndmin = 100, sndmax = 1e3, sndang = Angle(0,0,0), + }}, + } +} + +-- Parking brake panel +ENT.ButtonMap["ParkingBrake"] = { + pos = Vector(457,45.0,-2.0), + ang = Angle(0,-83,90), + width = 300, + height = 400, + scale = 0.0625, + + buttons = { + {ID = "ParkingBrakeLeft",x=0, y=0, w=150, h=400, tooltip="",tooltipFunc = function(ent) return Format(Metrostroi.GetPhrase("Train.Buttons.ParkingBrake"),ent:GetPackedRatio("ManualBrake")*100) end}, + {ID = "ParkingBrakeRight",x=150, y=0, w=150, h=400, tooltip="",tooltipFunc = function(ent) return Format(Metrostroi.GetPhrase("Train.Buttons.ParkingBrake"),ent:GetPackedRatio("ManualBrake")*100) end}, + } +} + +-- Train driver helpers panel +ENT.ButtonMap["HelperPanel"] = { + pos = Vector(453.5,59,22.45), + ang = Angle(0,-53,90), + width = 60, + height = 235, + scale = 0.0625, + hideseat = 0.2, + + buttons = { + {ID = "KU13Set", x=0, y=0, w=60,h=80, tooltip="", model = { + model = "models/metrostroi_train/switches/vudblack.mdl", z=-19, color = Color(255,255,255), + labels={{model="models/metrostroi_train/81-707/labels/vu_labels.mdl",skin=9,ang=90,z=18.9,x=0,y=-25.5}}, + var="KU13",speed=6, + sndvol = 1, snd = function(val) return val and "vu224_on" or "vu224_off" end, + sndmin=30, sndmax = 1e3, sndang = Angle(-90,0,0), + }}, + {ID = "KU3Toggle", x=0, y=110, w=60,h=80, tooltip="", model = { + model = "models/metrostroi_train/switches/vudblack.mdl", z=-19, color = Color(255,255,255), + labels={{model="models/metrostroi_train/81-707/labels/vu_labels.mdl",skin=10,ang=90,z=18.9,x=0,y=-25.5}}, + var="KU3",speed=6, + sndvol = 1, snd = function(val) return val and "vu224_on" or "vu224_off" end, + sndmin=30, sndmax = 1e3, sndang = Angle(-90,0,0), + states={"Train.Buttons.Unlocked","Train.Buttons.Locked"}, + }}, + } +} + + +ENT.ButtonMap["HVMeters"] = { + pos = Vector(458.3+2,-56.4,34.4), + ang = Angle(0,-149,90), + + width = 66, + height = 129, + scale = 0.0625, + + buttons = { + {ID = "!EnginesVoltage", x=0,y=0,w=66,h=60,tooltip="",tooltipFunc = function(ent) return Format(Metrostroi.GetPhrase("Train.Buttons.EnginesVoltage"),ent:GetPackedRatio("EnginesVoltage")*1000) end}, + {ID = "!EnginesCurrent", x=0,y=69,w=66,h=60,tooltip="",tooltipFunc = function(ent) return Format(Metrostroi.GetPhrase("Train.Buttons.EnginesCurrent"),ent:GetPackedRatio("EnginesCurrent")*1000-500) end}, + } +} + +ENT.ButtonMap["BLTLPressure"] = { + pos = Vector(459.4,-54.8,10.8), + ang = Angle(0,-90-58,90), + + width = 76, + height = 76, + scale = 0.0625, + + buttons = { + {ID = "!BLTLPressure", x=38,y=38,radius=38,tooltip="",tooltipFunc = function(ent) return Format(Metrostroi.GetPhrase("Train.Buttons.BLTLPressure"),ent:GetPackedRatio("TLPressure")*16,ent:GetPackedRatio("BLPressure")*16) end}, + } +} +ENT.ButtonMap["BCPressure"] = { + pos = Vector(461,-50.3,4.1), + ang = Angle(0,-90-12,90), + + width = 76, + height = 76, + scale = 0.0625, + + buttons = { + {ID = "!BCPressure", x=38,y=38,radius=38,tooltip="",tooltipFunc = function(ent) return Format(Metrostroi.GetPhrase("Train.Buttons.BCPressure"),ent:GetPackedRatio("BCPressure")*6) end}, + } +} +ENT.ButtonMap["BatteryVoltage"] = { + pos = Vector(463.2,-17.8,10.9), + ang = Angle(0,270,90), + width = 68, + height = 68, + scale = 0.0625, + + buttons = { + {ID = "!BatteryVoltage", x=0,y=0,w=68,h=68,tooltip="",tooltipFunc = function(ent) return Format(Metrostroi.GetPhrase("Train.Buttons.BatteryVoltage"),ent:GetPackedRatio("BatteryVoltage")*150) end}, + } +} +ENT.ButtonMap["DriverValveBLDisconnect"] = { + pos = Vector(450.50,-51,-36.5), + ang = Angle(-90,0,0), + width = 200, + height = 100, + scale = 0.0625, + + buttons = { + {ID = "DriverValveBLDisconnectToggle", x=0, y=0, w=200, h=100, tooltip="", model = { + var="DriverValveBLDisconnect",sndid="brake_disconnect", + sndvol = 1, snd = function(val) return "disconnect_valve" end, + sndmin=30, sndmax = 1e3, sndang = Angle(-90,0,0), + states={"Train.Buttons.Closed","Train.Buttons.Opened"}, + }}, + } +} +ENT.ButtonMap["DriverValveTLDisconnect"] = { + pos = Vector(447+5,-46,-31), + ang = Angle(-90,-10,0), + width = 200, + height = 90, + scale = 0.0625, + + buttons = { + {ID = "DriverValveTLDisconnectToggle", x=0, y=0, w=200, h=90, tooltip="", model = { + var="DriverValveTLDisconnect",sndid="train_disconnect", + sndvol = 1, snd = function(val) return val and "pneumo_TL_open" or "pneumo_TL_disconnect" end, + sndmin=30, sndmax = 1e3, sndang = Angle(-90,0,0), + states={"Train.Buttons.Closed","Train.Buttons.Opened"}, + }}, + } +} + +ENT.ButtonMap["FrontPneumatic"] = { + pos = Vector(470,-45.0,-58.0), + ang = Angle(0,90,90), + width = 900, + height = 100, + scale = 0.1, + + buttons = { + {ID = "FrontBrakeLineIsolationToggle",x=000, y=0, w=400, h=100, tooltip="",var="FbI",states={"Train.Buttons.Opened","Train.Buttons.Closed"}}, + {ID = "FrontTrainLineIsolationToggle",x=500, y=0, w=400, h=100, tooltip="",var="FtI",states={"Train.Buttons.Opened","Train.Buttons.Closed"}}, + } +} +ENT.ClientProps["FrontBrake"] = {-- + model = "models/metrostroi_train/bogey/disconnect_valve_red.mdl", + pos = Vector(450+19, -30, -68.5), + ang = Angle(-15,-90,0), + hide = 2, +} +ENT.ClientProps["FrontTrain"] = {-- + model = "models/metrostroi_train/bogey/disconnect_valve_blue.mdl", + pos = Vector(450+19, 30.5, -68.5), + ang = Angle( 15,-90,0), + hide = 2, +} +ENT.ClientSounds["FrontBrakeLineIsolation"] = {{"FrontBrake",function() return "disconnect_valve" end,1,1,50,1e3,Angle(-90,0,0)}} +ENT.ClientSounds["FrontTrainLineIsolation"] = {{"FrontTrain",function() return "disconnect_valve" end,1,1,50,1e3,Angle(-90,0,0)}} +ENT.ButtonMap["RearPneumatic"] = { + pos = Vector(-473,45.0,-58.0), + ang = Angle(0,270,90), + width = 900, + height = 100, + scale = 0.1, + + buttons = { + {ID = "RearBrakeLineIsolationToggle",x=000, y=0, w=400, h=100, tooltip="",var="RbI",states={"Train.Buttons.Opened","Train.Buttons.Closed"}}, + {ID = "RearTrainLineIsolationToggle",x=500, y=0, w=400, h=100, tooltip="",var="RtI",states={"Train.Buttons.Opened","Train.Buttons.Closed"}}, + } +} +ENT.ClientProps["RearTrain"] = {-- + model = "models/metrostroi_train/bogey/disconnect_valve_blue.mdl", + pos = Vector(-450-21, -30.5, -68.5), + ang = Angle( 15,90,0), + hide = 2, +} +ENT.ClientProps["RearBrake"] = {-- + model = "models/metrostroi_train/bogey/disconnect_valve_red.mdl", + pos = Vector(-450-21, 30, -68.5), + ang = Angle(-15,90,0), + hide = 2, +} +ENT.ClientSounds["RearBrakeLineIsolation"] = {{"RearBrake",function() return "disconnect_valve" end,1,1,50,1e3,Angle(-90,0,0)}} +ENT.ClientSounds["RearTrainLineIsolation"] = {{"RearTrain",function() return "disconnect_valve" end,1,1,50,1e3,Angle(-90,0,0)}} + +ENT.ButtonMap["GV"] = { + pos = Vector(170-3,50+20,-60), + ang = Angle(0,225-15,90), + width = 260, + height = 260, + scale = 0.1, + buttons = { + {ID = "GVToggle",x=0, y=0, w= 260,h = 260, tooltip="", model = { + var="GV",sndid = "gv", + sndvol = 0.8,sndmin = 80, sndmax = 1e3/3, sndang = Angle(-90,0,0), + snd = function(val) return val and "gv_f" or "gv_b" end, + states={"Train.Buttons.Disconnected","Train.Buttons.On"} + }}, + } +} +ENT.ClientProps["gv"] = { + model = "models/metrostroi/81-717/gv.mdl", + pos = Vector(153.5-3,36+20,-78), + ang = Angle(-90,90,-90), + color = Color(150,255,255), + hide = 0.5, +} +ENT.ClientProps["gv_wrench"] = { + model = "models/metrostroi_train/reversor/reversor_classic.mdl", + pos = ENT.ClientProps["gv"].pos, + ang = Angle(-90,0,0), + hide = 0.5, +} + +ENT.ButtonMap["AirDistributor"] = { + pos = Vector(-215,69,-60), + ang = Angle(0,180,90), + width = 170, + height = 260, + scale = 0.1, + hideseat=0.1, + hide=true, + screenHide = true, + + buttons = { + {ID = "AirDistributorDisconnectToggle",x=0, y=0, w= 170,h = 260, tooltip="",var="AD",states={"Train.Buttons.On","Train.Buttons.Off"}}, + } +} + +for i=0,3 do + ENT.ClientProps["TrainNumberL"..i] = { + model = "models/metrostroi_train/common/bort_numbers.mdl", + pos = Vector(295+i*6.6-4*6.6/2,69,-26), + ang = Angle(180,0,180), + skin=0, + hide = 1.5, + callback = function(ent) + ent.WagonNumber = false + end, + } +end +for i=0,3 do + ENT.ClientProps["TrainNumberR"..i] = { + model = "models/metrostroi_train/common/bort_numbers.mdl", + pos = Vector(295+i*6.6-4*6.6/2,-66.4,-26), + ang = Angle(0,0,0), + skin=0, + hide = 1.5, + callback = function(ent) + ent.WagonNumber = false + end, + } +end +ENT.ButtonMap["FrontDoor"] = { + pos = Vector(468,17,41), + ang = Angle(0,-90,90), + width = 642, + height = 1900, + scale = 0.1/2, + buttons = { + {ID = "FrontDoor",x=0,y=0,w=642,h=1900, tooltip="", model = { + var="door1",sndid="door1", + sndvol = 1, snd = function(val) return val and "cab_door_open" or "cab_door_close" end, + sndmin=90, sndmax = 1e3, sndang = Angle(-90,0,0), + noTooltip = true, + }}, + } +} + +ENT.ButtonMap["CabinDoor"] = { + pos = Vector(417.5,64,41), + ang = Angle(0,0,90), + width = 642, + height = 1900, + scale = 0.1/2, + buttons = { + {ID = "CabinDoor",x=0,y=0,w=642,h=1900, tooltip="", model = { + var="door4",sndid="door4", + sndvol = 1, snd = function(val) return val and "cab_door_open" or "cab_door_close" end, + sndmin=90, sndmax = 1e3, sndang = Angle(-90,0,0), + noTooltip = true, + }}, + } +} + +ENT.ButtonMap["PassengerDoor"] = { + pos = Vector(384,-16,41), + ang = Angle(0,90,90), + width = 700, + height = 1900, + scale = 0.1/2, + buttons = { + {ID = "PassengerDoor",x=0,y=0,w=700,h=1900, tooltip="", model = { + var="door3",sndid="door3", + sndvol = 1, snd = function(val) return val and "cab_door_open" or "cab_door_close" end, + sndmin=90, sndmax = 1e3, sndang = Angle(-90,0,0), + noTooltip = true, + }}, + } +} + +ENT.ButtonMap["PassengerDoor1"] = { + pos = Vector(384,19,41), + ang = Angle(0,-90,90), + width = 700, + height = 1900, + scale = 0.1/2, + buttons = { + {ID = "PassengerDoor",x=0,y=0,w=700,h=1900, tooltip=""}, + } +} +ENT.ButtonMap["RearDoor"] = { + pos = Vector(-470,-16,41), + ang = Angle(0,90,90), + width = 700, + height = 1900, + scale = 0.1/2, + buttons = { + {ID = "RearDoor",x=0,y=0,w=700,h=1900, tooltip="", model = { + var="door2",sndid="door2", + sndvol = 1, snd = function(val) return val and "cab_door_open" or "cab_door_close" end, + sndmin=90, sndmax = 1e3, sndang = Angle(-90,0,0), + noTooltip = true, + }}, + } +} +-------------------------------------------------------------------------------- +ENT.ClientPropsInitialized = false +if not ENT.ClientSounds["br_334"] then ENT.ClientSounds["br_334"] = {} end +table.insert(ENT.ClientSounds["br_334"],{"brake",function(ent,_,var) return "br_334_"..var end,1,1,50,1e3,Angle(-90,0,0)}) +ENT.ClientProps["brake"] = { + model = "models/metrostroi_train/81-703/cabin_cran_334.mdl", + pos = Vector(456.55,-52.57,-4.4), + ang = Angle(0,-133,0), + hideseat = 0.2, +} +ENT.ClientProps["controller"] = { + model = "models/metrostroi_train/81-502/kv_white.mdl", + pos = Vector(457.85,-22.8,-6), + ang = Angle(0,180+13,0), + hideseat = 0.2, +} +ENT.ClientProps["reverser"] = { + model = "models/metrostroi_train/reversor/reversor_classic.mdl", + pos = ENT.ClientProps["controller"].pos+Vector(0.3,0,-0.8), + ang = Angle(180,90,180), + hideseat = 0.2, + modelcallback = function(ent) + return ent.HasGoldenReverser and "models/metrostroi_train/reversor/reversor_gold.mdl" or "models/metrostroi_train/reversor/reversor_classic.mdl" + end, +} +ENT.ClientProps["rcureverser"] = { + model = "models/metrostroi_train/reversor/reversor_classic.mdl", + pos = ENT.ClientProps["controller"].pos+Vector(-4.4,0,-1.5), + ang = Angle(180,180-25,180), + hideseat = 0.2, + modelcallback = function(ent) + return ent.HasGoldenReverser and "models/metrostroi_train/reversor/reversor_gold.mdl" or "models/metrostroi_train/reversor/reversor_classic.mdl" + end, +} + +ENT.ClientProps["brake_disconnect"] = { + model = "models/metrostroi_train/81-707/cran1.mdl", + pos = Vector(449.90,-56.47,-33.9), + ang = Angle(7,87,-90), + hideseat = 0.2, +} +ENT.ClientProps["train_disconnect"] = { + model = "models/metrostroi_train/81-707/cran3.mdl", + pos = Vector(453.5,-51.8,-27.5), + ang = Angle(7,79,-90), + hideseat = 0.2, +} + +ENT.ClientProps["parking_brake"] = { + model = "models/metrostroi_train/81-703/cabin_parking.mdl", + pos = Vector(456.72,35.5,-14.843545), + ang = Angle(-90,7,0), + hideseat = 0.2, +} + +-------------------------------------------------------------------------------- +ENT.ClientProps["train_line"] = { + model = "models/metrostroi_train/Equipment/arrow_nm.mdl", + pos = Vector(457.794739,-56.465096,8.386459), + ang = Angle(223.061493,34.678856,-91.599998), + hideseat = 0.2, +} +ENT.ClientProps["brake_line"] = { + model = "models/metrostroi_train/Equipment/arrow_tm.mdl", + pos = Vector(457.821289,-56.505123,8.385479), + ang = Angle(223.061493,34.678856,-91.599998), + hideseat = 0.2, +} + + + +ENT.ClientProps["brake_cylinder"] = { + model = "models/metrostroi_train/Equipment/arrow_nm.mdl", + pos = Vector(461.239777,-52.704826,1.709025), + ang = Angle(273.924652,82.289345,-94.823410), + hideseat = 0.2, +} + +---------------------------------------------------------------- +ENT.ClientProps["ampermeter"] = { + model = "models/metrostroi_train/81-710/ezh3_voltages.mdl", + pos = Vector(458.591003,-57.667469,26.812176), + ang = Angle(-90.053635,-58.525883,0.000000), + bscale = Vector(1,1,1.3), + hideseat = 0.2, +} + +ENT.ClientProps["voltmeter"] = { + model = "models/metrostroi_train/81-710/ezh3_voltages.mdl", + pos = Vector(458.522430,-57.706245,31.200829), + ang = Angle(-90.053635,-58.525883,0.000000), + bscale = Vector(1,1,1.3), + hideseat = 0.2, +} + +ENT.ClientProps["volt1"] = { + model = "models/metrostroi_train/81-710/ezh3_voltages.mdl", + pos = Vector(463.263306,-19.963984,7.809407), + ang = Angle(-90.000000,0.000000,0.000000), + bscale = Vector(1,1,1.3), + hideseat = 0.2, +} + +ENT.ClientProps["salon"] = { + model = "models/metrostroi_train/81-707/ezh1_salon.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide = 2.0, +} +ENT.ClientProps["cabin"] = { + model = "models/metrostroi_train/81-707/cabin_ezh1.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide = 2.0, +} + +ENT.ClientProps["underwagon"] = { + model = "models/metrostroi_train/81-508/81-508_underwagon.mdl", + pos = Vector(0.2,0,-18), + ang = Angle(0,0,0), + hide = 2.0, +} + +ENT.ClientProps["Lamps_pult"] = { + model = "models/metrostroi_train/equipment/lamp_gauges.mdl", + pos = Vector(446.027,-55.398,42.27), + ang = Angle(-4.305,6.175,8), + hideseat = 0.2, +} +ENT.ClientProps["Lamps_emer1"] = { + model = "models/metrostroi_train/81-502/lights_emer2.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + --color=Color(255,255,255), + hide = 1.5, +} +ENT.ClientProps["Lamps_emer2"] = { + model = "models/metrostroi_train/81-502/lights_emer.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + --color=Color(255,255,255), + hide = 1.5, +} +ENT.ClientProps["Lamps_half1"] = { + model = "models/metrostroi_train/81-502/lights_group1.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide = 1.5, +} +ENT.ClientProps["Lamps_half2"] = { + model = "models/metrostroi_train/81-502/light_group2_501.mdl", + pos = Vector(0,0,0), + ang = Angle(0,0,0), + hide = 1.5, +} +ENT.ClientProps["Lamps_cab1"] = { + model = "models/metrostroi_train/81-502/cabin_lamp_light.mdl", + pos = Vector(0,-0.05,-0.2), + ang = Angle(0,0,0), + hide = 0.8, +} + + + +-------------------------------------------------------------------------------- +-- Add doors +--[[ local function GetDoorPosition(i,k,j) + if j == 0 + then return Vector(344.9-0.1*k - 233.6*i,-63.86*(1-2.02*k),-5.75) + else return Vector(344.9-0.1*(1-k) - 233.6*i,-63.86*(1-2.02*k),-5.75) + end +end +for i=0,3 do + for k=0,1 do + ENT.ClientProps["door"..i.."x"..k.."a"] = { + model = "models/metrostroi_train/81-710/81-710_door_right.mdl", + pos = GetDoorPosition(i,k,0), + ang = Angle(0,90 + 180*k,0), + hide = 2, + } + ENT.ClientProps["door"..i.."x"..k.."b"] = { + model = "models/metrostroi_train/81-710/81-710_door_left.mdl", + pos = GetDoorPosition(i,k,1), + ang = Angle(0,90 + 180*k,0), + hide = 2, + } + end +end--]] +ENT.ClientProps["door0x1"] = { + model = "models/metrostroi_train/81-710/81-710_doors_pos1.mdl", + pos = Vector(344.692,65.305,-6.7), + ang = Angle(0,-90,0), + hide = 2.0, +} +ENT.ClientProps["door1x1"] = { + model = "models/metrostroi_train/81-710/81-710_doors_pos2.mdl", + pos = Vector(110.668,65.305,-6.7), + ang = Angle(0,-90,0), + hide = 2.0, +} +ENT.ClientProps["door2x1"] = { + model = "models/metrostroi_train/81-710/81-710_doors_pos3.mdl", + pos = Vector(-122.718,65.305,-6.7), + ang = Angle(0,-90,0), + hide = 2.0, +} +ENT.ClientProps["door3x1"] = { + model = "models/metrostroi_train/81-710/81-710_doors_pos4.mdl", + pos = Vector(-356.091,65.305,-6.7), + ang = Angle(0,-90,0), + hide = 2.0, +} +ENT.ClientProps["door0x0"] = { + model = "models/metrostroi_train/81-710/81-710_doors_pos4.mdl", + pos = Vector(344.692,-65.305+2.5,-6.7), + ang = Angle(0,90,0), + hide = 2.0, +} +ENT.ClientProps["door1x0"] = { + model = "models/metrostroi_train/81-710/81-710_doors_pos3.mdl", + pos = Vector(110.668,-65.305+2.5,-6.7), + ang = Angle(0,90,0), + hide = 2.0, +} +ENT.ClientProps["door2x0"] = { + model = "models/metrostroi_train/81-710/81-710_doors_pos2.mdl", + pos = Vector(-122.718,-65.305+2.5,-6.7), + ang = Angle(0,90,0), + hide = 2.0, +} +ENT.ClientProps["door3x0"] = { + model = "models/metrostroi_train/81-710/81-710_doors_pos1.mdl", + pos = Vector(-356.091,-65.305+2.5,-6.7), + ang = Angle(0,90,0), + hide = 2.0, +} +ENT.ClientProps["door1"] = { + model = "models/metrostroi_train/81-710/81-710_door_tor.mdl", + pos = Vector(460.62+7.4,-14.53,-7), + ang = Angle(0,-90,0), + hide = 2, +} +ENT.ClientProps["door2"] = { + model = "models/metrostroi_train/81-710/81-710_door_tor.mdl", + pos = Vector(-462.6-8,16.53,-7.24), + ang = Angle(0,90,0), + hide = 2, +} +ENT.ClientProps["door3"] = { + model = "models/metrostroi_train/81-710/81-710_door_interior_a.mdl", + pos = Vector(382.3+19,-15,-7), + ang = Angle(0,90,0), + hide = 2, +} +ENT.ClientProps["door4"] = { + model = "models/metrostroi_train/81-710/81-710_door_cab.mdl", + pos = Vector(411.17+7.6,66.05,-6), + ang = Angle(0,-90,0), + hide = 2, +} +ENT.ClientProps["DistantLights"] = { + model = "models/metrostroi_train/81-703/81-703_projcetor_light.mdl", + pos = Vector(-23+8.0,1,-191), + ang = Angle(00.000000,0.000000,0.000000), + nohide=true, +} +ENT.ClientProps["WhiteLights"] = { + model = "models/metrostroi_train/81-703/81-703_front_light.mdl", + pos = Vector(-23+7.6,1,-191), + ang = Angle(0,0,0), + nohide=true, +} + +ENT.Lights = { + [1] = { "headlight", Vector(470,0,-35), Angle(0,0,0), Color(200,130,88), brightness = 4 , fov=100, texture = "models/metrostroi_train/equipment/headlight",shadows = 1,headlight=true}, + [22] = { "headlight", Vector(445,-55,41), Angle(75, 70,45), Color(190, 130, 88), fov=110, farz=65, brightness = 3, shadows = 1, texture = "models/metrostroi_train/equipment/headlight", hidden = "Lamps_pult"}, + + [9] = { "dynamiclight", Vector(200, 0, -5), Angle(0,0,0), Color(255, 176, 59), brightness = 3, distance = 200}, + [10] = { "dynamiclight", Vector(-150, 0, -5), Angle(0,0,0), Color(255, 176, 59), brightness = 3, distance = 200}, + [11] = { "dynamiclight", Vector( 200, 0, -5), Angle(0,0,0), Color(255, 176, 59), brightness = 4, distance = 260}, + [12] = { "dynamiclight", Vector( 0, 0, -5), Angle(0,0,0), Color(255, 176, 59), brightness = 4, distance = 260}, + [13] = { "dynamiclight", Vector(-260, 0, -5), Angle(0,0,0), Color(255, 176, 59), brightness = 4, distance = 260}, + + -- Cabin + [23] = { "dynamiclight", Vector(432,-10.0,20), Angle(0,0,0), Color(252, 157, 77), brightness = 0.0005, distance = 600, hidden = "cabin"}, + + [30] = { "light", Vector(465+5 , -45, -37), Angle(0,0,0), Color(255,220,180), brightness = 0.2, scale = 1.5, texture = "sprites/light_glow02", size = 2 }, + [31] = { "light", Vector(465+5 , 45, -37), Angle(0,0,0), Color(255,220,180), brightness = 0.2, scale = 1.5, texture = "sprites/light_glow02", size = 2 }, + [32] = { "light", Vector(465+5 , 0, 48), Angle(0,0,0), Color(255,220,180), brightness = 0.2, scale = 2.5, texture = "sprites/light_glow02", size = 2 }, + Lamps_pult = {"light", Vector(445.5,-55.5,42), Angle(0,0,0),Color(255,220,180),brightness = 0.35,scale = 0.4, texture = "sprites/light_glow02", hidden = "Lamps_pult"}, + Lamps_cab = {"light", Vector(404,1.2,56), Angle(0,0,0),Color(255,220,180),brightness = 0.25,scale = 0.3, texture = "sprites/light_glow02", hidden = "Lamps_cab1"}, +} +function ENT:Initialize() + self.BaseClass.Initialize(self) + + self.FrontLeak = 0 + self.RearLeak = 0 + + self.CraneRamp = 0 + self.ReleasedPdT = 0 + self.EmergencyValveRamp = 0 + self.EmergencyBrakeValveRamp = 0 +end + +function ENT:UpdateWagonNumber() + for i=0,3 do + local leftNum,rightNum = self.ClientEnts["TrainNumberL"..i],self.ClientEnts["TrainNumberR"..i] + local num = math.floor(self.WagonNumber%(10^(i+1))/10^i) + if IsValid(leftNum) then + leftNum:SetPos(self:LocalToWorld(Vector(295+i*6.6-4*6.6/2,69,-26))) + leftNum:SetSkin(num) + end + if IsValid(rightNum) then + rightNum:SetPos(self:LocalToWorld(Vector(-280-i*6.6-4*6.6/2,-66.6,-26))) + rightNum:SetSkin(num) + end + end +end +-------------------------------------------------------------------------------- +function ENT:Think() + self.BaseClass.Think(self) + if not self.RenderClientEnts or self.CreatingCSEnts then + return + end + + -- Parking brake animation + self.TrueBrakeAngle = self.TrueBrakeAngle or 0 + self.TrueBrakeAngle = self.TrueBrakeAngle + (self:GetPackedRatio("ManualBrake")*360*3.2 - self.TrueBrakeAngle)*2.0*(self.DeltaTime or 0) + if self.ClientEnts and self.ClientEnts["parking_brake"] then + self.ClientEnts["parking_brake"]:SetPoseParameter("position",1.0-((self.TrueBrakeAngle % 360)/360)) + end + local BAsnd = math.floor(self.TrueBrakeAngle/10) + if self.BrakeAngleSND ~= BAsnd then + if not IsValid(self.Sounds["parking_brake_rolling"]) or self.Sounds["parking_brake_rolling"]:GetState() ~= GMOD_CHANNEL_PLAYING then + self:PlayOnce("parking_brake_rolling","bass",1,1) + end + self.BrakeAngleSND = BAsnd + end + + local HL1 = self:Animate("whitelights",self:GetPackedBool("HeadLights1") and 1 or 0,0,1,5,false) + local HL2 = self:Animate("distantlights",self:GetPackedBool("HeadLights2") and 1 or 0,0,1,5,false) + + self:ShowHideSmooth("WhiteLights",HL1) + self:ShowHideSmooth("DistantLights",HL2) + self:SetLightPower(30,HL1 > 0, HL1) + self:SetLightPower(31,HL1 > 0, HL1) + self:SetLightPower(32,HL2 > 0, HL2) + + local PL = HL1*self:Animate("lamps_pult",self:GetPackedBool("PanelLights") and 1 or 0,0,1,12,false) + self:SetLightPower("Lamps_pult",PL>0,PL) + self:ShowHideSmooth("Lamps_pult",PL) + self:SetLightPower(22,PL>0,PL) + + local bright = HL1*0.3+HL2*0.7 + self:SetLightPower(1,bright>0,bright) + + if IsValid(self.GlowingLights[1]) then + if not self:GetPackedBool("HeadLights1") and self.GlowingLights[1]:GetFarZ() ~= 3144 then + self.GlowingLights[1]:SetFarZ(3144) + end + if self:GetPackedBool("HeadLights1") and self.GlowingLights[1]:GetFarZ() ~= 5144 then + self.GlowingLights[1]:SetFarZ(5144) + end + end + + local Lamps = self:GetPackedRatio("LampsStrength") + + local emer1 = self:Animate("lamps_emer1",self:GetPackedBool("Lamps_emer1") and 1 or 0,0,1,5,false) + local cab = self:Animate("lamps_cab",self:GetPackedBool("Lamps_cab") and 1 or 0,0,1,5,false) + local emer2 = self:Animate("lamps_emer2",self:GetPackedBool("Lamps_emer2") and 1 or 0,0,1,5,false) + local half1 = self:Animate("lamps_half1",self:GetPackedBool("Lamps_half1") and 0.4+Lamps*0.6 or 0,0,1,5,false) + local half2 = self:Animate("lamps_half2",self:GetPackedBool("Lamps_half2") and 0.4+Lamps*0.6 or 0,0,1,5,false) + + self:ShowHideSmooth("Lamps_emer1",emer1) + self:ShowHideSmooth("Lamps_cab1",cab) + self:ShowHideSmooth("Lamps_emer2",emer2) + self:ShowHideSmooth("Lamps_half1",half1,Color(255,105+half1*150,105+half1*150)) + self:ShowHideSmooth("Lamps_half2",half2,Color(255,105+half2*150,105+half2*150)) + self:SetLightPower(23, cab > 0,cab) + self:SetLightPower("Lamps_cab", cab > 0,cab) + if not self:GetPackedBool("Lamps_half1") then + self:SetLightPower(9,emer1 > 0,emer1*0.2+emer2*0.8) + self:SetLightPower(10,emer2 > 0,emer2) + self:SetLightPower(11, false) + self:SetLightPower(12, false) + self:SetLightPower(13, false) + else + self:SetLightPower(9,false) + self:SetLightPower(10,false) + self:SetLightPower(11, half1 > 0, half1*0.1+half2*0.9) + self:SetLightPower(12, half1 > 0, half1*0.4+half2*0.6) + self:SetLightPower(13, half1 > 0, half1*0.9+half2*0.1) + end + + self:Animate("brake_disconnect",self:GetPackedBool("DriverValveBLDisconnect") and 1 or 0,0.5,0.25, 4,false) + self:Animate("train_disconnect",self:GetPackedBool("DriverValveTLDisconnect") and 1 or 0,0.5,0.25, 4,false) + self:Animate("stopkran", self:GetPackedBool("EmergencyBrakeValve") and 1 or 0,0,0.25, 7, false) + + self:Animate("brake", self:GetPackedRatio("CranePosition"), 0.00, 0.48, 256,nil) + self:Animate("controller",self:GetPackedRatio("ControllerPosition"),0, 0.31, 2,false) + self:Animate("reverser",self:GetPackedRatio("ReverserPosition"),0.6, 0.4, 4,false) + self:Animate("rcureverser",self:GetPackedBool("RCUPosition") and 1 or 0,0.77,0,3,false) + self:Animate("volt1", self:GetPackedRatio("BatteryVoltage"),0.6182,0.39,45,3) + + self:ShowHide("reverser",self:GetNW2Int("WrenchMode",0)==1) + self:ShowHide("rcureverser",self:GetNW2Int("WrenchMode",0)==3) + + + ---Animate brakes + self:Animate("brake_line", self:GetPackedRatio("BLPressure"),0, 0.754, 359,3)--,,0.01) + self:Animate("train_line", self:GetPackedRatio("TLPressure"),0, 0.754, 359,3)--,,0.01) + self:Animate("brake_cylinder", self:GetPackedRatio("BCPressure")^0.98, 0.154, 0.87, 359,3)--,,0.03) + self:Animate("voltmeter",self:GetPackedRatio("EnginesVoltage"),0.623,0.38,92,2) + self:Animate("ampermeter",self:GetPackedRatio("EnginesCurrent"),0.629,0.373,92,2) + + local door2 = self:Animate("door2", self:GetPackedBool("RearDoor") and 0.99 or 0,0,0.25, 8, 1) + local door1 = self:Animate("door1", self:GetPackedBool("FrontDoor") and 0.99 or 0,0,0.22, 8, 1) + local door3 = self:Animate("door3", self:GetPackedBool("PassengerDoor") and 0.99 or 0,1,0.62, 8, 1) + local door4 = self:Animate("door4", self:GetPackedBool("CabinDoor") and 0.99 or 0,1,0.78, 8, 1) + + if self.Door1 ~= (door1 > 0) then + self.Door1 = door1 > 0 + self:PlayOnce("door1","bass",self.Door1 and 1 or 0) + end + if self.Door2 ~= (door2 > 0) then + self.Door2 = door2 > 0 + self:PlayOnce("door2","bass",self.Door2 and 1 or 0) + end + if self.Door3 ~= (door3 < 1) then + self.Door3 = door3 < 1 + self:PlayOnce("door3","bass",self.Door3 and 1 or 0) + end + if self.Door4 ~= (door4 < 1) then + self.Door4 = door4 < 1 + self:PlayOnce("door4","bass",self.Door4 and 1 or 0) + end + + self:Animate("FrontBrake", self:GetNW2Bool("FbI") and 0 or 1,0,1, 3, false) + self:Animate("FrontTrain", self:GetNW2Bool("FtI") and 1 or 0,0,1, 3, false) + self:Animate("RearBrake", self:GetNW2Bool("RbI") and 0 or 1,0,1, 3, false) + self:Animate("RearTrain", self:GetNW2Bool("RtI") and 1 or 0,0,1, 3, false) + + -- Main switch + if self.LastGVValue ~= self:GetPackedBool("GV") then + self.ResetTime = CurTime()+1.5 + self.LastGVValue = self:GetPackedBool("GV") + end + self:Animate("gv_wrench",self.LastGVValue and 1 or 0,0.5,0.9,128,1,false) + self:ShowHideSmooth("gv_wrench", CurTime() < self.ResetTime and 1 or 0.1) + + + -- Animate doors + if not self.DoorStates then self.DoorStates = {} end + if not self.DoorLoopStates then self.DoorLoopStates = {} end + for i=0,3 do + for k=0,1 do + local st = k==1 and "DoorL" or "DoorR" + local doorstate = self:GetPackedBool(st) + local id,sid = st..(i+1),"door"..i.."x"..k + local state = self:GetPackedRatio(id) + --print(state,self.DoorStates[state]) + if (state ~= 1 and state ~= 0) ~= self.DoorStates[id] then + if doorstate and state < 1 or not doorstate and state > 0 then + else + if state > 0 then + self:PlayOnce(sid.."o","",1,math.Rand(0.8,1.2)) + else + self:PlayOnce(sid.."c","",1,math.Rand(0.8,1.2)) + end + end + self.DoorStates[id] = (state ~= 1 and state ~= 0) + end + if (state ~= 1 and state ~= 0) then + self.DoorLoopStates[id] = math.Clamp((self.DoorLoopStates[id] or 0) + 2*self.DeltaTime,0,1) + else + self.DoorLoopStates[id] = math.Clamp((self.DoorLoopStates[id] or 0) - 6*self.DeltaTime,0,1) + end + self:SetSoundState(sid.."r",self.DoorLoopStates[id],0.66+self.DoorLoopStates[id]*0.2) + local n_l = "door"..i.."x"..k--.."a" + --local n_r = "door"..i.."x"..k.."b" + local dlo = 1 + --local dro = 1 + if self.Anims[n_l] then + dlo = math.abs(state-(self.Anims[n_l] and self.Anims[n_l].oldival or 0)) + if dlo <= 0 and self.Anims[n_l].oldspeed then + dlo = self.Anims[n_l].oldspeed/14 + end + end + self:Animate(n_l,state,0,1, dlo*14,false)--0.8 + (-0.2+0.4*math.random()),0) + --self:Animate(n_r,state,0,1, dlo*14,false)--0.8 + (-0.2+0.4*math.random()),0) + end + end + + + -- Brake-related sounds + local dT = self.DeltaTime + --self.TunnelCoeff = 0.8 + --self.StreetCoeff = 0 + local rollingi = math.min(1,self.TunnelCoeff+math.Clamp((self.StreetCoeff-0.82)/0.3,0,1)) + local rollings = math.max(self.TunnelCoeff*1,self.StreetCoeff) + --if self:EntIndex() == 3239 then LocalPlayer():ChatPrint(Format("T: %.2f, S: %.2f",rollingi,rollings)) end + -- Brake-related sounds + local dT = self.DeltaTime + local speed = self:GetPackedRatio("Speed")*100.0 + local rol5 = math.Clamp(speed/1,0,1)*(1-math.Clamp((speed-3)/8,0,1)) + local rol10 = math.Clamp(speed/12,0,1)*(1-math.Clamp((speed-25)/8,0,1)) + local rol40p = Lerp((speed-25)/12,0.6,1) + local rol40 = math.Clamp((speed-23)/8,0,1)*(1-math.Clamp((speed-55)/8,0,1)) + local rol40p = Lerp((speed-23)/50,0.6,1) + local rol70 = math.Clamp((speed-50)/8,0,1)*(1-math.Clamp((speed-72)/5,0,1)) + local rol70p = Lerp(0.8+(speed-65)/25*0.2,0.8,1.2) + local rol80 = math.Clamp((speed-70)/5,0,1) + local rol80p = Lerp(0.8+(speed-72)/15*0.2,0.8,1.2) + self:SetSoundState("rolling_5",math.min(1,rollingi*(1-rollings)+rollings*0.8)*rol5,1) + self:SetSoundState("rolling_10",rollingi*rol10,1) + self:SetSoundState("rolling_40",rollingi*rol40,rol40p) + self:SetSoundState("rolling_70",rollingi*rol70,rol70p) + self:SetSoundState("rolling_80",rollingi*rol80,rol80p) + + local rol_motors = math.Clamp((speed-20)/40,0,1) + self:SetSoundState("rolling_motors",math.max(rollingi,rollings*0.3)*rol_motors,speed/56) + + local rol10 = math.Clamp(speed/15,0,1)*(1-math.Clamp((speed-18)/35,0,1)) + local rol10p = Lerp((speed-15)/14,0.6,0.78) + local rol40 = math.Clamp((speed-18)/35,0,1)*(1-math.Clamp((speed-55)/40,0,1)) + local rol40p = Lerp((speed-15)/66,0.6,1.3) + local rol70 = math.Clamp((speed-55)/20,0,1)--*(1-math.Clamp((speed-72)/5,0,1)) + local rol70p = Lerp((speed-55)/27,0.78,1.15) + --local rol80 = math.Clamp((speed-70)/5,0,1) + --local rol80p = Lerp(0.8+(speed-72)/15*0.2,0.8,1.2) + self:SetSoundState("rolling_low" ,rol10*rollings,rol10p) --15 + self:SetSoundState("rolling_medium2",rol40*rollings,rol40p) --57 + --self:SetSoundState("rolling_medium1",0 or rol40*rollings,rol40p) --57 + self:SetSoundState("rolling_high2" ,rol70*rollings,rol70p) --70 + + self.ReleasedPdT = math.Clamp(self.ReleasedPdT + 2*(-self:GetPackedRatio("BrakeCylinderPressure_dPdT",0)-self.ReleasedPdT)*dT,0,1) + local release1 = math.Clamp((self.ReleasedPdT-0.1)/0.8,0,1)^2 + self:SetSoundState("release1",release1,1) + self:SetSoundState("release2",(math.Clamp(0.3-release1,0,0.3)/0.3)*(release1/0.3),1.0) + + self.FrontLeak = math.Clamp(self.FrontLeak + 10*(-self:GetPackedRatio("FrontLeak")-self.FrontLeak)*dT,0,1) + self.RearLeak = math.Clamp(self.RearLeak + 10*(-self:GetPackedRatio("RearLeak")-self.RearLeak)*dT,0,1) + self:SetSoundState("front_isolation",self.FrontLeak,0.9+0.2*self.FrontLeak) + self:SetSoundState("rear_isolation",self.RearLeak,0.9+0.2*self.RearLeak) + + self.CraneRamp = math.Clamp(self.CraneRamp + 8.0*((1*self:GetPackedRatio("Crane_dPdT",0))-self.CraneRamp)*dT,-1,1) + self:SetSoundState("crane334_brake_low",math.Clamp((-self.CraneRamp)*2,0,1)^2,1) + local high = math.Clamp(((-self.CraneRamp)-0.5)/0.5,0,1)^1 + self:SetSoundState("crane334_brake_high",high,1.0) + self:SetSoundState("crane013_brake2",high*2,1.0) + self:SetSoundState("crane334_brake_eq_high",--[[ math.Clamp(-self.CraneRamp*0,0,1)---]] math.Clamp(-self:GetPackedRatio("ReservoirPressure_dPdT")-0.2,0,1)^0.8*1,1) + self:SetSoundState("crane334_brake_eq_low",--[[ math.Clamp(-self.CraneRamp*0,0,1)---]] math.Clamp(-self:GetPackedRatio("ReservoirPressure_dPdT")-0.4,0,1)^0.8*1.3,1) + + self:SetSoundState("crane334_release",math.Clamp(self.CraneRamp,0,1)^2,1.0) + + local emergencyBrakeValve = self:GetPackedRatio("EmergencyBrakeValve_dPdT", 0) + self.EmergencyBrakeValveRamp = math.Clamp(self.EmergencyBrakeValveRamp + (emergencyBrakeValve-self.EmergencyBrakeValveRamp)*dT*8,0,1) + self:SetSoundState("valve_brake",self.EmergencyBrakeValveRamp,0.8+self.EmergencyBrakeValveRamp*0.4) + + local emergencyValve = self:GetPackedRatio("EmergencyValve_dPdT", 0)^0.4*1.2 + self.EmergencyValveRamp = math.Clamp(self.EmergencyValveRamp + (emergencyValve-self.EmergencyValveRamp)*dT*16,0,1) + local emer_brake = math.Clamp((self.EmergencyValveRamp-0.9)/0.05,0,1) + local emer_brake2 = math.Clamp((self.EmergencyValveRamp-0.2)/0.4,0,1)*(1-math.Clamp((self.EmergencyValveRamp-0.9)/0.1,0,1)) + self:SetSoundState("emer_brake",emer_brake,1) + self:SetSoundState("emer_brake2",emer_brake2,math.min(1,0.8+0.2*emer_brake2)) + + -- Compressor + local compressorvoltage = Lerp(self:GetPackedRatio("LampsStrength"),0.75,1.05) + local compressorb = self:GetPackedBool("AV") and compressorvoltage or 1 + local compressorspeed = self:GetPackedBool("VB") and compressorb or 0 + local state = self:GetPackedBool("Compressor") + self:SetSoundState("compressor",state and 0.6 or 0,compressorspeed or 0) + + -- RK rotation + if self:GetPackedBool("RK") then self.RKTimer = CurTime() end + state = (CurTime() - (self.RKTimer or 0)) < 0.2 + self.PreviousRKState = self.PreviousRKState or false + if self.PreviousRKState ~= state then + self.PreviousRKState = state + if state then + self:SetSoundState("rk",0.7,1) + else + self:SetSoundState("rk",0,0) + end + end + + local work = self:GetPackedBool("AnnPlay") + local noise = self:GetNW2Int("AnnouncerBuzz",-1) > 0 + self.NoiseVolume = self.NoiseVolume or 0 + local noisevolume = 1 + if self.Sounds["announcer1"] and IsValid(self.Sounds["announcer1"]) then noisevolume = (1-(self.Sounds["announcer1"]:GetLevel())*math.Rand(0.9,3))*1 end + if self.NoiseVolume > noisevolume then + self.NoiseVolume = math.Clamp(self.NoiseVolume + 8*(noisevolume-self.NoiseVolume)*dT,0.1,1) + else + self.NoiseVolume = math.Clamp(self.NoiseVolume + 0.5*(noisevolume-self.NoiseVolume)*dT,0.1,1) + end + for k,v in ipairs(self.AnnouncerPositions) do + for i=1,2 do + self:SetSoundState(Format("announcer_noise%d_%d",i,k),noise and self.NoiseVolume*(v[3] or 1) or 0,1) + end + if IsValid(self.Sounds["announcer"..k]) then self.Sounds["announcer"..k]:SetVolume(work and (v[3] or 1) or 0) end + end +end + +function ENT:OnAnnouncer(volume) + return self:GetPackedBool("AnnPlay") and volume or 0 +end + +function ENT:DrawPost() + self:DrawOnPanel("AirDistributor",function() + draw.DrawText(self:GetNW2Bool("AD") and "Air Distributor ON" or "Air Distributor OFF","Trebuchet24",0,0,Color(0,0,0,255)) + end) +end +function ENT:OnButtonPressed(button) +end + +function ENT:OnPlay(soundid,location,range,pitch) + if location == "stop" then + if IsValid(self.Sounds[soundid]) then + self.Sounds[soundid]:Pause() + self.Sounds[soundid]:SetTime(0) + end + return + end + if location == "bass" then + if soundid == "VDOL" then + return range > 0 and "vdol_on" or "vdol_off",location,1,pitch + end + if soundid == "VDOP" then + return range > 0 and "vdor_on" or "vdor_off",location,1,pitch + end + if soundid == "VDZ" then + return range > 0 and "vdz_on" or "vdz_off",location,1,pitch + end + if soundid:sub(1,4) == "IGLA" then + return range > 0 and "igla_on" or "igla_off",location,1,pitch + end + if soundid == "LK2" then + local speed = self:GetPackedRatio("Speed") + local id = range > 0 and "lk2_on" or "lk2_off" + self.SoundPositions[id][1] = 350-Lerp(speed/0.1,0,250) + return id,location,1-Lerp(speed/10,0.2,0.8),pitch + end + if soundid == "LK3" then + local speed = self:GetPackedRatio("Speed") + local id = range > 0 and "lk3_on" or "lk3_off" + self.SoundPositions[id][1] = 350-Lerp(speed/0.1,0,250) + return id,location,1-Lerp(speed/10,0.2,0.8),pitch + end + if soundid == "AVU" then + return range > 0 and "avu_on" or "avu_off",location,1,0.6 + end + if soundid == "brake" then + self:PlayOnce("brake_f",location,range,pitch) + self:PlayOnce("brake_b",location,range,pitch) + return + end + end + return soundid,location,range,pitch +end + +local dist = {} +for id,panel in pairs(ENT.ButtonMap) do + if not panel.buttons then continue end + for k,v in pairs(panel.buttons) do + if v.model then + local dist = dist[id] or 150 + if v.model.model then + v.model.hideseat=dist + elseif v.model.lamp then + v.model.lamp.hideseat=dist + end + end + end +end +Metrostroi.GenerateClientProps() diff --git a/lua/entities/gmod_subway_em508/init.lua b/lua/entities/gmod_subway_em508/init.lua new file mode 100644 index 0000000..cc31954 --- /dev/null +++ b/lua/entities/gmod_subway_em508/init.lua @@ -0,0 +1,472 @@ +AddCSLuaFile("cl_init.lua") +AddCSLuaFile("shared.lua") +include("shared.lua") + +ENT.BogeyDistance = 650 -- Needed for gm trainspawner + +--"DURASelectMain","DURASelectAlternate","DURAToggleChannel","DURAPowerToggle", +ENT.SyncTable = { + "VB","AV","VU","VU1","VU2","VU3","DoorSelect","KU4","KU5","KU9","KU15","KU14","KU1","VAH","VAD","KU16","KU2","KU3","KU3L","KU13","KU6","KU7","KU10","KU8","KU11","KRR","OtklAVU","ARS","ALS","KVT","KB","KAH","R_UNch","R_ZS","R_G","R_Radio","R_Program1","R_Program2","R_Program1H","R_Program2H","RC1","ALSFreq","PB","KU6K","RST","UOS", + "AB1","AB2", + "RRIEnable","RRIAmplifier", + "DriverValveBLDisconnect","DriverValveTLDisconnect","EPK","EmergencyBrakeValve","UAVA","UAVAC", + "GV" +} +ENT.SyncFunctions = { + "" +} + +function ENT:Initialize() + + self.Plombs = { + VU = true, + Init = true, + UAVA = true, + } + -- Set model and initialize + self:SetModel("models/metrostroi_train/81-710/81-508t.mdl") + self.BaseClass.Initialize(self) + self:SetPos(self:GetPos() + Vector(0,0,140)) + + -- Create seat entities + self.DriverSeat = self:CreateSeat("driver",Vector(425+3,-39.4,-31.5),Angle(0,0,0)) + self.InstructorsSeat = self:CreateSeat("instructor",Vector(430,40,-48),Angle(0,90,0),"models/vehicles/prisoner_pod_inner.mdl") + self.ExtraSeat1 = self:CreateSeat("instructor",Vector(443,0,-48+6+2.5),Angle(0,90,0),"models/vehicles/prisoner_pod_inner.mdl") + self.ExtraSeat2 = self:CreateSeat("instructor",Vector(420,-20,-48+6),Angle(0,90,0),"models/vehicles/prisoner_pod_inner.mdl") + + -- Hide seats + self.DriverSeat:SetColor(Color(0,0,0,0)) + self.DriverSeat:SetRenderMode(RENDERMODE_TRANSALPHA) + self.InstructorsSeat:SetColor(Color(0,0,0,0)) + self.InstructorsSeat:SetRenderMode(RENDERMODE_TRANSALPHA) + + self.ExtraSeat1:SetColor(Color(0,0,0,0)) + self.ExtraSeat1:SetRenderMode(RENDERMODE_TRANSALPHA) + self.ExtraSeat2:SetColor(Color(0,0,0,0)) + self.ExtraSeat2:SetRenderMode(RENDERMODE_TRANSALPHA) + + -- Create bogeys + if Metrostroi.BogeyOldMap then + self.FrontBogey = self:CreateBogey(Vector( 317-5,0,-89),Angle(0,180,0),true,"717") + self.RearBogey = self:CreateBogey(Vector(-317+0,0,-89),Angle(0,0,0),false,"717") + self.FrontCouple = self:CreateCouple(Vector( 419.5,0,-75),Angle(0,0,0),true,"702") + self.RearCouple = self:CreateCouple(Vector(-421.5,0,-75),Angle(0,180,0),false,"702") + else + self.FrontBogey = self:CreateBogey(Vector( 317-11,1.0,-85),Angle(0,180,0),true,"717") + self.RearBogey = self:CreateBogey(Vector(-317+0,1.3,-85),Angle(0,0,0),false,"717") + self.FrontCouple = self:CreateCouple(Vector( 421-4-3.6-2,1.0,-72),Angle(0,0,0),true,"702") + self.RearCouple = self:CreateCouple(Vector(-421+2+3.6,1.3,-72),Angle(0,180,0),false,"702") + end + self.FrontBogey:SetNWInt("MotorSoundType",0) + self.RearBogey:SetNWInt("MotorSoundType",0) + self.FrontBogey.PneumaticPow = 1.5 + self.RearBogey.PneumaticPow = 1.5 + + + -- Initialize key mapping + self.KeyMap = { + [KEY_1] = "KVSetX1B", + [KEY_2] = "KVSetX2", + [KEY_3] = "KVSetX3", + [KEY_4] = "KVSet0", + [KEY_5] = "KVSetT1B", + [KEY_6] = "KVSetT1AB", + [KEY_7] = "KVSetT2", + + [KEY_G] = "KU9Set", + + [KEY_0] = "KVReverserUp", + [KEY_9] = "KVReverserDown", + [KEY_PAD_PLUS] = "KVReverserUp", + [KEY_PAD_MINUS] = "KVReverserDown", + [KEY_W] = "KVUp", + [KEY_S] = "KVDown", + [KEY_F] = "PneumaticBrakeUp", + [KEY_R] = "PneumaticBrakeDown", + + [KEY_A] = {"KU6",helper="KU13Set"}, + [KEY_D] = "KU7", + [KEY_V] = {"KU2Toggle",helper="KU3Toggle"}, + [KEY_L] = "HornEngage", + [KEY_PAD_1] = "PneumaticBrakeSet1", + [KEY_PAD_2] = "PneumaticBrakeSet2", + [KEY_PAD_3] = "PneumaticBrakeSet3", + [KEY_PAD_4] = "PneumaticBrakeSet4", + [KEY_PAD_5] = "PneumaticBrakeSet5", + + [KEY_BACKSPACE] = "EmergencyBrake", + + [KEY_PAD_ENTER] = "KVWrenchKV", + [KEY_PAD_0] = "DriverValveDisconnect", + [KEY_LSHIFT] = { + [KEY_W] = "KVUp_Unlocked", + + [KEY_1] = "KU4Set", + [KEY_2] = "KU5Set", + [KEY_4] = "KVSet0Fast", + [KEY_L] = "DriverValveDisconnect", + + [KEY_7] = "KVWrenchNone", + [KEY_9] = "KVWrenchKV9", + [KEY_0] = "KVWrenchKV", + [KEY_6] = "KVSetT1A", + + [KEY_PAD_ENTER] = "KVWrenchNone", + }, + + [KEY_LALT] = { + [KEY_V] = "KU2Toggle", + }, + } + self.KeyMap[KEY_RALT] = self.KeyMap[KEY_LALT] + self.KeyMap[KEY_RSHIFT] = self.KeyMap[KEY_LSHIFT] + self.KeyMap[KEY_RCONTROL] = self.KeyMap[KEY_LCONTROL] + + self.InteractionZones = { + { + ID = "FrontBrakeLineIsolationToggle", + Pos = Vector(469, -29, -62), Radius = 8, + }, + { + ID = "FrontTrainLineIsolationToggle", + Pos = Vector(469, 29, -62), Radius = 8, + }, + { + ID = "RearBrakeLineIsolationToggle", + Pos = Vector(-474, 30, -62), Radius = 8, + }, + { + ID = "RearTrainLineIsolationToggle", + Pos = Vector(-474, -30, -62), Radius = 8, + }, + { + ID = "FrontDoor", + Pos = Vector(469,32,-10), Radius = 12, + }, + { + ID = "CabinDoor", + Pos = Vector(469,58,-10), Radius = 10, + }, + { + ID = "CabinDoor", + Pos = Vector(469,58,-30), Radius = 10, + }, + { + ID = "CabinDoor", + Pos = Vector(390,64,-10), Radius = 16, + }, + { + ID = "PassengerDoor", + Pos = Vector(389,35,8), Radius = 16, + }, + { + ID = "RearDoor", + Pos = Vector(-469,-35,-10), Radius = 20, + }, + { + ID = "GVToggle", + Pos = Vector(155,63.7,-75), Radius = 10, + }, + { + ID = "AirDistributorDisconnectToggle", + Pos = Vector(-224.5, 50, -66), Radius = 20, + }, + } + + -- Cross connections in train wires + self.TrainWireInverts = { + --[18] = true, + [34] = true, + } + self.TrainWireCrossConnections = { + [5] = 4, -- Reverser F<->B + [31] = 32, -- Doors L<->R + } + + -- KV wrench mode + self:OnButtonPress("KVWrenchNone") + + -- Parking brake ratio + self.ManualBrake = 0.0 + self.RearDoor = false + self.FrontDoor = false + self.CabinDoor = false + self.PassengerDoor = false + self:TrainSpawnerUpdate() +end + +function ENT:TrainSpawnerUpdate() + self.Pneumatic.VDLoud = math.random()<0.06 and 0.9+math.random()*0.2 + if self.Pneumatic.VDLoud then self.Pneumatic.VDLoudID = math.random(1,5) end +end + +-------------------------------------------------------------------------------- + +function ENT:Think() + local RetVal = self.BaseClass.Think(self) + local Panel = self.Panel + local Pneumatic = self.Pneumatic + + self:SetPackedBool("PanelLights",self.PanelLamp.Value > 0.5) + self:SetPackedBool("Headlights1",Panel.Headlights1 > 0) + self:SetPackedBool("Headlights2",Panel.Headlights2 > 0) + + local power = Panel.V1 > 0.5 + self:SetPackedBool("V1",power) + local lightsActive2 = math.min(1,Panel.MainLights2) + local lightsActive1 = math.min(1,Panel.MainLights1)^2 + local emerActive1 = Panel.EmergencyLights1 + local emerActive2 = Panel.EmergencyLights2 + self:SetPackedBool("Lamps_emer1",emerActive1 > 0 and lightsActive1 == 0) + self:SetPackedBool("Lamps_cab",emerActive1 > 0) + self:SetPackedBool("Lamps_emer2",emerActive2 > 0) + self:SetPackedBool("Lamps_half1",lightsActive1 > 0) + self:SetPackedBool("Lamps_half2",lightsActive2 > 0) + self:SetPackedRatio("LampsStrength",lightsActive1) + + -- Switch and button states + --self:SetPackedBool(0,self:IsWrenchPresent()) + + -- Signal if doors are open or no to platform simulation + self.LeftDoorsOpen = + (Pneumatic.LeftDoorState[1] > 0.5) or + (Pneumatic.LeftDoorState[2] > 0.5) or + (Pneumatic.LeftDoorState[3] > 0.5) or + (Pneumatic.LeftDoorState[4] > 0.5) + self.RightDoorsOpen = + (Pneumatic.RightDoorState[1] > 0.5) or + (Pneumatic.RightDoorState[2] > 0.5) or + (Pneumatic.RightDoorState[3] > 0.5) or + (Pneumatic.RightDoorState[4] > 0.5) + + local TW18 = 0 + if Panel.RRP > 0 then + local wags = #self.WagonList + for _,v in ipairs(self.WagonList) do + TW18 = TW18+(v.Panel.TW18 or 0)/wags + end + end + self:SetPackedRatio("RRP",math.Clamp(TW18^0.7,0,1)) + self:SetPackedBool("GRP",Panel.GRP > 0) + self:SetPackedBool("SD",Panel.SD > 0) + self.TrueBrakeAngle = self.TrueBrakeAngle or 0 + if self.TrueBrakeAngle < 0.001 and self.ManualBrake < self.TrueBrakeAngle then self.TrueBrakeAngle = self.ManualBrake end + if self.TrueBrakeAngle > 0.999 and self.ManualBrake > self.TrueBrakeAngle then self.TrueBrakeAngle = self.ManualBrake end + self.TrueBrakeAngle = self.TrueBrakeAngle + (self.ManualBrake - self.TrueBrakeAngle)*2.0*(self.DeltaTime or 0) + self:SetPackedRatio("ManualBrake",self.TrueBrakeAngle) + + self:SetPackedRatio("LampsCount",math.Clamp(1-self.Electric.Cosume,0.3,1)) + self:SetNW2Int("WrenchMode",self.KVWrenchMode) + self:SetPackedBool("Compressor",Pneumatic.Compressor == 1.0) + self:SetPackedBool("RK",self.RheostatController.Velocity ~= 0.0) + self:SetPackedBool("RearDoor",self.RearDoor) + self:SetPackedBool("FrontDoor",self.FrontDoor) + self:SetPackedBool("PassengerDoor",self.PassengerDoor) + self:SetPackedBool("CabinDoor",self.CabinDoor) + self:SetPackedBool("AnnPlay",Panel.AnnouncerPlaying > 0) + + + self:SetPackedRatio("CranePosition", Pneumatic.DriverValvePosition/7) + self:SetPackedRatio("ControllerPosition", (self.KV.ControllerPosition+3)/7) + self:SetPackedRatio("ReverserPosition", 1-(self.KV.ReverserPosition+1)/2) + self:SetPackedBool("RCUPosition", self.KV.RCU > 0) + self:SetPackedRatio("BLPressure", Pneumatic.ReservoirPressure/16.0) + self:SetPackedRatio("TLPressure", Pneumatic.TrainLinePressure/16.0) + self:SetPackedRatio("BCPressure", math.min(2.7,Pneumatic.BrakeCylinderPressure)/6.0) + self:SetPackedRatio("EnginesVoltage", self.Engines.E24/2000.0) + self:SetPackedRatio("EnginesCurrent", 0.5 + 0.5*(self.Electric.I24/500.0)) + self:SetPackedRatio("BatteryVoltage",self.Panel["V1"]*self.Battery.Voltage/150) + + self:SetPackedRatio("Speed", self.Speed/100) + + -- Exchange some parameters between engines, pneumatic system, and real world + self.Engines:TriggerInput("Speed",self.Speed) + if IsValid(self.FrontBogey) and IsValid(self.RearBogey) and not self.IgnoreEngine then + local A = 2*self.Engines.BogeyMoment + self.FrontBogey.MotorForce = 22050+3000*(A < 0 and 1 or 0) + self.FrontBogey.Reversed = (self.Reverser.NZ > 0.5) + self.RearBogey.MotorForce = 22050+3000*(A < 0 and 1 or 0) + self.RearBogey.Reversed = (self.Reverser.VP > 0.5) + + -- These corrections are required to beat source engine friction at very low values of motor power + local P = math.max(0,0.04449 + 1.06879*math.abs(A) - 0.465729*A^2) + if math.abs(A) > 0.4 then P = math.abs(A) end + if math.abs(A) < 0.05 then P = 0 end + if self.Speed < 10 then P = P*(1.0 + 0.5*(10.0-self.Speed)/10.0) end + self.RearBogey.MotorPower = P*0.5*((A > 0) and 1 or -1) + self.FrontBogey.MotorPower = P*0.5*((A > 0) and 1 or -1) + + -- Apply brakes + local add = 1 + if math.abs(self:GetAngles().pitch) > 4 then + add = math.min((math.abs(self:GetAngles().pitch)-4)/2,1)*2 + end + self.FrontBogey.PneumaticBrakeForce = 50000.0-2000 + self.FrontBogey.BrakeCylinderPressure = Pneumatic.BrakeCylinderPressure*add + self.FrontBogey.BrakeCylinderPressure_dPdT = -Pneumatic.BrakeCylinderPressure_dPdT + self.FrontBogey.ParkingBrakePressure = self.ManualBrake + self.RearBogey.PneumaticBrakeForce = 50000.0-2000 + self.RearBogey.BrakeCylinderPressure = Pneumatic.BrakeCylinderPressure*add + self.RearBogey.BrakeCylinderPressure_dPdT = -Pneumatic.BrakeCylinderPressure_dPdT + end + + self:GenerateJerks() + + return RetVal +end + +-------------------------------------------------------------------------------- +function ENT:OnButtonPress(button,ply) + if string.find(button,"PneumaticBrakeSet") then + self.Pneumatic:TriggerInput("BrakeSet",tonumber(button:sub(-1,-1))) + return + end + -- Parking brake + if button == "ParkingBrakeLeft" then self.ManualBrake = math.max(0.0,(self.ManualBrake or 0) - 0.05) end + if button == "ParkingBrakeRight" then self.ManualBrake = math.min(1.0,(self.ManualBrake or 0) + 0.05) end + if string.find(button,"PneumaticBrakeSet") then + self.Pneumatic:TriggerInput("BrakeSet",tonumber(button:sub(-1,-1))) + return + end + if button == "FrontDoor" then self.FrontDoor = not self.FrontDoor end + if button == "RearDoor" then self.RearDoor = not self.RearDoor end + if button == "PassengerDoor" then self.PassengerDoor = not self.PassengerDoor end + if button == "CabinDoor" then self.CabinDoor = not self.CabinDoor end + + -- Parking brake + if button == "ManualBrakeLeft" then + self.ManualBrake = math.max(0.0,self.ManualBrake - 0.008) + if self.ManualBrake == 0.0 then return end + end + if button == "ManualBrakeRight" then + self.ManualBrake = math.min(1.0,self.ManualBrake + 0.008) + if self.ManualBrake == 1.0 then return end + end + + if button == "KVUp" then + if self.KV.ControllerPosition ~= -1 then + self.KV:TriggerInput("ControllerUp",1.0) + end + end + if button == "KVUp_Unlocked" then + self.KV:TriggerInput("ControllerUp",1.0) + end + if button == "KVDown" then + self.KV:TriggerInput("ControllerDown",1.0) + end + + -- KRU + if (self.KVWrenchMode == 3) and (button == "KVReverserUp") then self.KV:TriggerInput("RCU",1) end + if (self.KVWrenchMode == 3) and (button == "KVReverserDown") then self.KV:TriggerInput("RCU",0) end + + if button == "KVSetT1B" then + if self.KV.ControllerPosition == -1 then + self.KV:TriggerInput("ControllerSet",-2) + else + self.KV:TriggerInput("ControllerSet",-1) + end + end + if button == "KVSetX1B" then + if self.KV.ControllerPosition == 1 then + self.KV:TriggerInput("ControllerSet",2) + else + self.KV:TriggerInput("ControllerSet",1) + end + end + if button == "KVSetT1AB" then + if self.KV.ControllerPosition == -2 then + self.KV:TriggerInput("ControllerSet",-1) + else + self.KV:TriggerInput("ControllerSet",-2) + end + end + if button == "KVWrenchKV" or button == "KVWrenchKV9" then + if self.KVWrenchMode == 0 then + self:PlayOnce("revers_in","cabin",0.7) + self.KVWrenchMode = 1 + self.KV:TriggerInput("Enabled",1) + else + self:TriggerInput(button == "KVWrenchKV9" and "KVReverserDown" or "KVReverserUp",1) + end + end + if button == "KVWrenchNone" then + if self.KVWrenchMode == 0 then + self:PlayOnce("revers_in","cabin",0.7) + self.KVWrenchMode = 3 + elseif self.KVWrenchMode ~= 0 and self.KV.ReverserPosition == 0 then + self:PlayOnce("revers_out","cabin",0.7) + self.KVWrenchMode = 0 + self.KV:TriggerInput("Enabled",0) + end + end + + if button == "KU6" and not self.KU7Pressed and self.KU2.Value < 1 and self.KU7.Value == 0 then self.KU6:TriggerInput("Close",1) end + if button == "KU7" and not self.KU6Pressed and self.KU2.Value < 1 and self.KU6.Value == 0 then self.KU7:TriggerInput("Close",1) end + if button == "KU6" then self.KU6Pressed = true end + if button == "KU7" then self.KU7Pressed = true end + + if button == "EmergencyBrake" then + self.KV:TriggerInput("ControllerSet",-3) + self.Pneumatic:TriggerInput("BrakeSet",7) + self.DriverValveBLDisconnect:TriggerInput("Set",1) + return + end + if button == "DriverValveDisconnect" then + if self.DriverValveBLDisconnect.Value == 0 or self.DriverValveTLDisconnect.Value == 0 then + self.DriverValveBLDisconnect:TriggerInput("Set",1) + self.DriverValveTLDisconnect:TriggerInput("Set",1) + else + --self:PlayOnce("pneumo_disconnect1","cabin",0.9) + self.DriverValveBLDisconnect:TriggerInput("Set",0) + self.DriverValveTLDisconnect:TriggerInput("Set",0) + end + return + end +end + +function ENT:OnButtonRelease(button) + if string.find(button,"PneumaticBrakeSet") then + if button == "PneumaticBrakeSet1" and (self.Pneumatic.DriverValvePosition == 1) then + self.Pneumatic:TriggerInput("BrakeSet",2) + end + return + end + if button == "KU6" and self.KU2.Value < 1 then self.KU6:TriggerInput("Open",1) end + if button == "KU7" and self.KU2.Value < 1 then self.KU7:TriggerInput("Open",1) end + if button == "KU6" then self.KU6Pressed = false end + if button == "KU7" then self.KU7Pressed = false end + if button == "KVSetT1AB" then + if self.KV.ControllerPosition > -3 then + self.KV:TriggerInput("ControllerSet",-2) + end + end + + if button == "KVSetT1AB" then + if self.KV.ControllerPosition > -2 then + self.KV:TriggerInput("ControllerSet",-2) + end + end + if button == "KVSetX1B" then + if self.KV.ControllerPosition > 1 then + self.KV:TriggerInput("ControllerSet",1) + end + end + if button == "KVSetT1B" then + if self.KV.ControllerPosition < -1 then + self.KV:TriggerInput("ControllerSet",-1) + end + end +end + +function ENT:OnCouple(train,isfront) + if isfront and self.FrontAutoCouple then + self.FrontBrakeLineIsolation:TriggerInput("Open",1.0) + self.FrontTrainLineIsolation:TriggerInput("Open",1.0) + self.FrontAutoCouple = false + elseif not isfront and self.RearAutoCouple then + self.RearBrakeLineIsolation:TriggerInput("Open",1.0) + self.RearTrainLineIsolation:TriggerInput("Open",1.0) + self.RearAutoCouple = false + end + self.BaseClass.OnCouple(self,train,isfront) +end \ No newline at end of file diff --git a/lua/entities/gmod_subway_em508/shared.lua b/lua/entities/gmod_subway_em508/shared.lua new file mode 100644 index 0000000..5375e5d --- /dev/null +++ b/lua/entities/gmod_subway_em508/shared.lua @@ -0,0 +1,597 @@ +ENT.Type = "anim" +ENT.Base = "gmod_subway_base" + +ENT.PrintName = "Em508 (81-508)" +ENT.Author = "" +ENT.Contact = "" +ENT.Purpose = "" +ENT.Instructions = "" +ENT.Category = "Metrostroi (trains)" +ENT.SkinsType = "81-707" +ENT.Model = "models/metrostroi_train/81-710/81-508t.mdl" + +ENT.Spawnable = true +ENT.AdminSpawnable = false +ENT.DontAccelerateSimulation = false + +function ENT:PassengerCapacity() + return 300 +end + +function ENT:GetStandingArea() + return Vector(-450,-30,-55),Vector(380,30,-55) +end + +local function GetDoorPosition(i,k) + return Vector(359.0 - 35/2 - 229.5*i,-65*(1-2*k),7.5) +end + +ENT.MirrorCams = { + Vector(441,72,15),Angle(1,180,0),15, + Vector(441,-72,15),Angle(1,180,0),15, +} + +ENT.AnnouncerPositions = { + {Vector(412,-49 ,61),80,0.4}, + {Vector(-3,-60, 62),300,0.3}, + {Vector(-3,60 ,62),300,0.3}, +} + +ENT.Cameras = { + {Vector(407.5+18,32,21),Angle(0,180,0),"Train.703.Breakers1"}, + {Vector(407.5+18,50,24),Angle(5,180,0),"Train.703.Breakers2"}, + {Vector(407.5+34,48,16),Angle(0,37,0),"Train.Common.HelpersPanel"}, + {Vector(407.5+30,40,5) ,Angle(30,10,0),"Train.703.Parking"}, + {Vector(450+13,0,26),Angle(60,0,0),"Train.Common.CouplerCamera"}, +} + +-- Setup door positions +ENT.LeftDoorPositions = {} +ENT.RightDoorPositions = {} +for i=0,3 do + table.insert(ENT.LeftDoorPositions,GetDoorPosition(i,1)) + table.insert(ENT.RightDoorPositions,GetDoorPosition(i,0)) +end + +function ENT:InitializeSounds() + self.BaseClass.InitializeSounds(self) + self.SoundNames["rolling_5"] = {loop=true,"subway_trains/common/junk/junk_background3.wav"} + self.SoundNames["rolling_10"] = {loop=true,"subway_trains/717/rolling/10_rolling.wav"} + self.SoundNames["rolling_40"] = {loop=true,"subway_trains/717/rolling/40_rolling.wav"} + self.SoundNames["rolling_70"] = {loop=true,"subway_trains/717/rolling/70_rolling.wav"} + self.SoundNames["rolling_80"] = {loop=true,"subway_trains/717/rolling/80_rolling.wav"} + self.SoundPositions["rolling_5"] = {480,1e12,Vector(0,0,0),0.10} + self.SoundPositions["rolling_10"] = {480,1e12,Vector(0,0,0),0.17} + self.SoundPositions["rolling_40"] = {480,1e12,Vector(0,0,0),0.40} + self.SoundPositions["rolling_70"] = {480,1e12,Vector(0,0,0),0.46} + self.SoundPositions["rolling_80"] = {480,1e12,Vector(0,0,0),0.60} + + self.SoundNames["rolling_motors"] = {loop=true,"subway_trains/ezh/rolling/rolling_motors.wav"} + self.SoundPositions["rolling_motors"] = {480,1e12,Vector(0,0,0),.4} + + self.SoundNames["rolling_low"] = {loop=true,"subway_trains/717/rolling/rolling_outside_low.wav"} + self.SoundNames["rolling_medium1"] = {loop=true,"subway_trains/717/rolling/rolling_outside_medium1.wav"} + self.SoundNames["rolling_medium2"] = {loop=true,"subway_trains/717/rolling/rolling_outside_medium2.wav"} + self.SoundNames["rolling_high2"] = {loop=true,"subway_trains/717/rolling/rolling_outside_high2.wav"} + self.SoundPositions["rolling_low"] = {480,1e12,Vector(0,0,0),0.6} + self.SoundPositions["rolling_medium1"] = {600,1e12,Vector(0,0,0),1} + self.SoundPositions["rolling_medium2"] = {600,1e12,Vector(0,0,0),1} + self.SoundPositions["rolling_high2"] = {600,1e12,Vector(0,0,0),1.00} + + self.SoundNames["pneumo_disconnect2"] = "subway_trains/common/pneumatic/pneumo_close.mp3" + self.SoundNames["pneumo_disconnect1"] = { + "subway_trains/common/pneumatic/pneumo_open.mp3", + "subway_trains/common/pneumatic/pneumo_open2.mp3", + } + self.SoundPositions["pneumo_disconnect2"] = {60,1e9,Vector(431.8,-50.1+1.5,-33.7),1} + self.SoundPositions["pneumo_disconnect1"] = {60,1e9,Vector(431.8,-50.1+1.5,-33.7),1} + + self.SoundNames["avu_off"] = "subway_trains/717/relays/lsd_2.mp3" + self.SoundNames["avu_on"] = "subway_trains/717/relays/new/kd_on.mp3" + self.SoundPositions["avu_on"] = {60,1e9, Vector(453,-40,-45),0.5} + self.SoundPositions["avu_off"] = {60,1e9, Vector(453,-40,-45),0.5} + --Подвагонка + self.SoundNames["lk2_on"] = "subway_trains/717/pneumo/lk2_on.mp3" + self.SoundNames["lk2_off"] = "subway_trains/717/pneumo/lk2_off.mp3" + self.SoundNames["lk5_on"] = "subway_trains/717/pneumo/lk1_on.mp3" + self.SoundNames["lk5_off"] = "subway_trains/717/pneumo/lk2_off.mp3" + self.SoundNames["lk3_on"] = "subway_trains/717/pneumo/lk3_on.mp3" + self.SoundNames["lk3_off"] = "subway_trains/717/pneumo/lk3_off.mp3" + self.SoundPositions["lk2_on"] = {440,1e9,Vector(-60,-40,-66),0.22} + self.SoundPositions["lk2_off"] = self.SoundPositions["lk2_on"] + self.SoundPositions["lk5_on"] = {440,1e9,Vector(-60,-40,-66),0.30} + self.SoundPositions["lk5_off"] = self.SoundPositions["lk2_off"] + self.SoundPositions["lk3_on"] = self.SoundPositions["lk2_on"] + self.SoundPositions["lk3_off"] = self.SoundPositions["lk2_off"] + + self.SoundNames["compressor"] = {loop=1.79,"subway_trains/ezh/compressor/ezh_compressor_start.wav","subway_trains/ezh/compressor/ezh_compressor_loop.wav", "subway_trains/ezh/compressor/ezh_compressor_end.wav"} + self.SoundPositions["compressor"] = {485,1e9,Vector(-118,-40,-66),0.55} + self.SoundNames["compressor_reflection"] = {"subway_trains/common/junk/junk_background2.wav"} + self.SoundPositions["compressor_reflection"] = {150,1e9,Vector(300,0,0)} + self.SoundPositions["compressor_reflection"] = {150,1e9,Vector(-300,0,0)} + self.SoundNames["rk"] = {"subway_trains/ezh/rk/rk_start.wav","subway_trains/ezh/rk/rk_spin.wav","subway_trains/ezh/rk/rk_stop.wav"} + self.SoundPositions["rk"] = {50,1e9,Vector(110,-40,-75),0.22} + + + self.SoundNames["ezh3_revers_0-f"] = {"subway_trains/717/kv70/reverser_0-f_1.mp3","subway_trains/717/kv70/reverser_0-f_2.mp3"} + self.SoundNames["ezh3_revers_f-0"] = {"subway_trains/717/kv70/reverser_f-0_1.mp3","subway_trains/717/kv70/reverser_f-0_2.mp3"} + self.SoundNames["ezh3_revers_0-b"] = {"subway_trains/717/kv70/reverser_0-b_1.mp3","subway_trains/717/kv70/reverser_0-b_2.mp3"} + self.SoundNames["ezh3_revers_b-0"] = {"subway_trains/717/kv70/reverser_b-0_1.mp3","subway_trains/717/kv70/reverser_b-0_2.mp3"} + self.SoundNames["revers_in"] = {"subway_trains/ezh3/kv66/revers_in.mp3"} + self.SoundNames["revers_out"] = {"subway_trains/ezh3/kv66/revers_out.mp3"} + self.SoundNames["rcu_in"] = {"subway_trains/ezh3/kv66/revers_in.mp3"} + self.SoundNames["rcu_out"] = {"subway_trains/ezh3/kv66/revers_out.mp3"} + self.SoundNames["rcu_on"] = {"subway_trains/ezh3/kv66/rcu_on.mp3","subway_trains/ezh3/kv66/rcu_on2.mp3"} + self.SoundNames["rcu_off"] = "subway_trains/ezh3/kv66/rcu_off.mp3" + self.SoundPositions["ezh3_revers_0-f"] = {80,1e9,Vector(457.85,-22.8,-6)} + self.SoundPositions["ezh3_revers_f-0"] = self.SoundPositions["ezh3_revers_0-f"] + self.SoundPositions["ezh3_revers_0-b"] = self.SoundPositions["ezh3_revers_0-f"] + self.SoundPositions["ezh3_revers_b-0"] = self.SoundPositions["ezh3_revers_0-f"] + self.SoundPositions["revers_in"] = self.SoundPositions["ezh3_revers_0-f"] + self.SoundPositions["revers_out"] = self.SoundPositions["ezh3_revers_0-f"] + self.SoundPositions["rcu_on"] = self.SoundPositions["ezh3_revers_0-f"] + self.SoundPositions["rcu_off"] = self.SoundPositions["rcu_on"] + self.SoundPositions["rcu_in"] = self.SoundPositions["rcu_on"] + self.SoundPositions["rcu_out"] = self.SoundPositions["rcu_on"] + + self.SoundNames["kru_in"] = { + "subway_trains/717/kru/kru_insert1.mp3", + "subway_trains/717/kru/kru_insert2.mp3" + } + self.SoundPositions["kru_in"] = {80,1e9,Vector(452.3,-24.0,4.0)} + self.SoundNames["kru_out"] = { + "subway_trains/717/kru/kru_eject1.mp3", + "subway_trains/717/kru/kru_eject2.mp3", + "subway_trains/717/kru/kru_eject3.mp3", + } + self.SoundPositions["kru_out"] = self.SoundPositions["kru_in"] + + self.SoundNames["kru_0_1"] = { + "subway_trains/717/kru/kru0-1_1.mp3", + "subway_trains/717/kru/kru0-1_2.mp3", + "subway_trains/717/kru/kru0-1_3.mp3", + "subway_trains/717/kru/kru0-1_4.mp3", + } + self.SoundNames["kru_1_2"] = { + "subway_trains/717/kru/kru1-2_1.mp3", + "subway_trains/717/kru/kru1-2_2.mp3", + "subway_trains/717/kru/kru1-2_3.mp3", + "subway_trains/717/kru/kru1-2_4.mp3", + } + self.SoundNames["kru_2_1"] = { + "subway_trains/717/kru/kru2-1_1.mp3", + "subway_trains/717/kru/kru2-1_2.mp3", + "subway_trains/717/kru/kru2-1_3.mp3", + "subway_trains/717/kru/kru2-1_4.mp3", + } + self.SoundNames["kru_1_0"] = { + "subway_trains/717/kru/kru1-0_1.mp3", + "subway_trains/717/kru/kru1-0_2.mp3", + "subway_trains/717/kru/kru1-0_3.mp3", + "subway_trains/717/kru/kru1-0_4.mp3", + } + self.SoundNames["kru_2_3"] = { + "subway_trains/717/kru/kru1-2_1.mp3", + "subway_trains/717/kru/kru1-2_2.mp3", + "subway_trains/717/kru/kru1-2_3.mp3", + "subway_trains/717/kru/kru1-2_4.mp3", + } + self.SoundNames["kru_3_2"] = { + "subway_trains/717/kru/kru2-1_1.mp3", + "subway_trains/717/kru/kru2-1_2.mp3", + "subway_trains/717/kru/kru2-1_3.mp3", + "subway_trains/717/kru/kru2-1_4.mp3", + } + self.SoundPositions["kru_0_1"] = self.SoundPositions["kru_in"] + self.SoundPositions["kru_1_2"] = self.SoundPositions["kru_in"] + self.SoundPositions["kru_2_1"] = self.SoundPositions["kru_in"] + self.SoundPositions["kru_1_0"] = self.SoundPositions["kru_in"] + self.SoundPositions["kru_2_3"] = self.SoundPositions["kru_in"] + self.SoundPositions["kru_3_2"] = self.SoundPositions["kru_in"] + + self.SoundNames["kr_left"] = "subway_trains/ezh3/controller/krishechka_left.mp3" + self.SoundNames["kr_right"] = "subway_trains/ezh3/controller/krishechka_right.mp3" + + self.SoundNames["switch_off"] = { + "subway_trains/717/switches/tumbler_slim_off1.mp3", + "subway_trains/717/switches/tumbler_slim_off2.mp3", + "subway_trains/717/switches/tumbler_slim_off3.mp3", + "subway_trains/717/switches/tumbler_slim_off4.mp3", + } + self.SoundNames["switch_on"] = { + "subway_trains/717/switches/tumbler_slim_on1.mp3", + "subway_trains/717/switches/tumbler_slim_on2.mp3", + "subway_trains/717/switches/tumbler_slim_on3.mp3", + "subway_trains/717/switches/tumbler_slim_on4.mp3", + } + + self.SoundNames["switchbl_off"] = { + "subway_trains/717/switches/tumbler_fatb_off1.mp3", + "subway_trains/717/switches/tumbler_fatb_off2.mp3", + "subway_trains/717/switches/tumbler_fatb_off3.mp3", + } + self.SoundNames["switchbl_on"] = { + "subway_trains/717/switches/tumbler_fatb_on1.mp3", + "subway_trains/717/switches/tumbler_fatb_on2.mp3", + "subway_trains/717/switches/tumbler_fatb_on3.mp3", + } + + self.SoundNames["triple_down-0"] = { + "subway_trains/717/switches/tumbler_triple_down-0_1.mp3", + "subway_trains/717/switches/tumbler_triple_down-0_2.mp3", + } + self.SoundNames["triple_0-up"] = { + "subway_trains/717/switches/tumbler_triple_0-up_1.mp3", + "subway_trains/717/switches/tumbler_triple_0-up_2.mp3", + } + self.SoundNames["triple_up-0"] = { + "subway_trains/717/switches/tumbler_triple_up-0_1.mp3", + "subway_trains/717/switches/tumbler_triple_up-0_2.mp3", + } + self.SoundNames["triple_0-down"] = { + "subway_trains/717/switches/tumbler_triple_0-down_1.mp3", + "subway_trains/717/switches/tumbler_triple_0-down_2.mp3", + } + self.SoundNames["button1_off"] = { + "subway_trains/ezh3/switches/button_off1.mp3", + "subway_trains/ezh3/switches/button_off2.mp3", + } + self.SoundNames["button1_on"] = { + "subway_trains/ezh3/switches/button_on1.mp3", + "subway_trains/ezh3/switches/button_on2.mp3", + } + self.SoundNames["button2_off"] = { + "subway_trains/ezh3/switches/button_off3.mp3", + "subway_trains/ezh3/switches/button_off4.mp3", + } + self.SoundNames["button2_on"] = { + "subway_trains/ezh3/switches/button_on3.mp3", + "subway_trains/ezh3/switches/button_on4.mp3", + } + self.SoundNames["button3_off"] = { + "subway_trains/ezh3/switches/button_off6.mp3", + "subway_trains/ezh3/switches/button_off5.mp3", + } + self.SoundNames["button3_on"] = { + "subway_trains/ezh3/switches/button_on5.mp3", + "subway_trains/ezh3/switches/button_on6.mp3", + } + + self.SoundNames["uava_reset"] = { + "subway_trains/common/uava/uava_reset1.mp3", + "subway_trains/common/uava/uava_reset2.mp3", + "subway_trains/common/uava/uava_reset4.mp3", + } + self.SoundPositions["uava_reset"] = {80,1e9,Vector(456.70,56.0,-10.23349),0.6} + self.SoundNames["gv_f"] = {"subway_trains/ezh3/kv66/rcu_on.mp3","subway_trains/ezh3/kv66/rcu_on2.mp3"} + self.SoundNames["gv_b"] = "subway_trains/ezh3/kv66/rcu_off.mp3" + self.SoundPositions["gv_f"] = {80,1e2,Vector(153.5-3,36+20,-78),0.5} + self.SoundPositions["gv_b"] = self.SoundPositions["gv_f"] + + self.SoundNames["vb1a_off"] = { + "subway_trains/d/vb1a/vb1a_off1.wav", + "subway_trains/d/vb1a/vb1a_off2.wav", + "subway_trains/d/vb1a/vb1a_off3.wav", + } + self.SoundNames["vb1a_on"] = { + "subway_trains/d/vb1a/vb1a_on1.wav", + "subway_trains/d/vb1a/vb1a_on2.wav", + "subway_trains/d/vb1a/vb1a_on3.wav", + } + + self.SoundNames["vu220b1_off"] = { + "subway_trains/d/vu220b1/vu220b1_off1.wav", + "subway_trains/d/vu220b1/vu220b1_off2.wav", + "subway_trains/d/vu220b1/vu220b1_off3.wav", + "subway_trains/d/vu220b1/vu220b1_off4.wav", + "subway_trains/d/vu220b1/vu220b1_off5.wav", + } + self.SoundNames["vu220b1_on"] = { + "subway_trains/d/vu220b1/vu220b1_on1.wav", + "subway_trains/d/vu220b1/vu220b1_on2.wav", + "subway_trains/d/vu220b1/vu220b1_on3.wav", + "subway_trains/d/vu220b1/vu220b1_on4.wav", + "subway_trains/d/vu220b1/vu220b1_on5.wav", + } + + self.SoundNames["vu13a_off"] = { + "subway_trains/d/vu13a/vu13a_off1.wav", + "subway_trains/d/vu13a/vu13a_off2.wav", + "subway_trains/d/vu13a/vu13a_off3.wav", + "subway_trains/d/vu13a/vu13a_off4.wav", + "subway_trains/d/vu13a/vu13a_off5.wav", + } + self.SoundNames["vu13a_on"] = { + "subway_trains/d/vu13a/vu13a_on1.wav", + "subway_trains/d/vu13a/vu13a_on2.wav", + "subway_trains/d/vu13a/vu13a_on3.wav", + "subway_trains/d/vu13a/vu13a_on4.wav", + } + + + self.SoundNames["disconnect_valve"] = "subway_trains/common/switches/pneumo_disconnect_switch.mp3" + + --Краны + self.SoundNames["brake_f"] = {"subway_trains/common/pneumatic/vz_brake_on2.mp3","subway_trains/common/pneumatic/vz_brake_on3.mp3","subway_trains/common/pneumatic/vz_brake_on4.mp3"} + self.SoundPositions["brake_f"] = {50,1e9,Vector(317-8,0,-82),0.13} + self.SoundNames["brake_b"] = self.SoundNames["brake_f"] + self.SoundPositions["brake_b"] = {50,1e9,Vector(-317+0,0,-82),0.13} + self.SoundNames["release1"] = {loop=true,"subway_trains/common/pneumatic/release_0.wav"} + self.SoundPositions["release1"] = {350,1e9,Vector(-183,0,-70),1} + self.SoundNames["release2"] = {loop=true,"subway_trains/common/pneumatic/release_low.wav"} + self.SoundPositions["release2"] = {350,1e9,Vector(-183,0,-70),0.4} + + self.SoundNames["front_isolation"] = {loop=true,"subway_trains/common/pneumatic/isolation_leak.wav"} + self.SoundPositions["front_isolation"] = {300,1e9,Vector(469, 0,-63),1} + self.SoundNames["rear_isolation"] = {loop=true,"subway_trains/common/pneumatic/isolation_leak.wav"} + self.SoundPositions["rear_isolation"] = {300,1e9,Vector(-473, 0,-63),1} + + self.SoundNames["crane013_brake2"] = {loop=true,"subway_trains/common/pneumatic/013_brake2.wav"} + self.SoundPositions["crane013_brake2"] = {80,1e9,Vector(456.55,-52.57,-4.4),0.86} + self.SoundNames["crane334_brake_high"] = {loop=true,"subway_trains/common/pneumatic/334_brake.wav"} + self.SoundPositions["crane334_brake_high"] = {80,1e9,Vector(456.55,-52.57,-4.4),0.85} + self.SoundNames["crane334_brake_low"] = {loop=true,"subway_trains/common/pneumatic/334_brake_slow.wav"} + self.SoundPositions["crane334_brake_low"] = {80,1e9,Vector(456.55,-52.57,-4.4),0.75} + self.SoundNames["crane334_brake_2"] = {loop=true,"subway_trains/common/pneumatic/334_brake_slow.wav"} + self.SoundPositions["crane334_brake_2"] = {80,1e9,Vector(456.55,-52.57,-4.4),0.85} + self.SoundNames["crane334_brake_eq_high"] = {loop=true,"subway_trains/common/pneumatic/334_release_reservuar.wav"} + self.SoundPositions["crane334_brake_eq_high"] = {80,1e9,Vector(456.55,-52.57,-70),0.45} + self.SoundNames["crane334_brake_eq_low"] = {loop=true,"subway_trains/common/pneumatic/334_brake_slow2.wav"} + self.SoundPositions["crane334_brake_eq_low"] = {80,1e9,Vector(456.55,-52.57,-70),0.45} + self.SoundNames["crane334_release"] = {loop=true,"subway_trains/common/pneumatic/334_release3.wav"} + self.SoundPositions["crane334_release"] = {80,1e9,Vector(456.55,-52.57,-4.4),0.2} + self.SoundNames["crane334_release_2"] = {loop=true,"subway_trains/common/pneumatic/334_release2.wav"} + self.SoundPositions["crane334_release_2"] = {80,1e9,Vector(456.55,-52.57,-4.4),0.2} + + self.SoundNames["valve_brake"] = {loop=true,"subway_trains/common/pneumatic/epv_loop.wav"} + self.SoundPositions["valve_brake"] = {400,1e9,Vector(464.5-0.1,24.4,-50),1} + + --self.SoundNames["emer_brake"] = {loop=0.8,"subway_trains/common/pneumatic/autostop_start.wav","subway_trains/common/pneumatic/autostop_loop.wav", "subway_trains/common/pneumatic/autostop_end.wav"} + self.SoundNames["emer_brake"] = {loop=true,"subway_trains/common/pneumatic/autostop_loop.wav"} + self.SoundNames["emer_brake2"] = {loop=true,"subway_trains/common/pneumatic/autostop_loop_2.wav"} + self.SoundPositions["emer_brake"] = {600,1e9,Vector(380,-65,-75)} + self.SoundPositions["emer_brake2"] = self.SoundPositions["emer_brake"] + + self.SoundNames["pneumo_TL_open"] = { + "subway_trains/common/334/334_open.mp3", + } + self.SoundNames["pneumo_TL_open_background"] = { + "subway_trains/common/334/334_open_pipeinside.mp3", + } + self.SoundPositions["pneumo_TL_open_background"] = {180,1e9,Vector(449.90,-56.47,-33.9),0.2} + + self.SoundNames["pneumo_TL_disconnect"] = { + "subway_trains/common/334/334_close.mp3", + } + self.SoundNames["pneumo_BL_disconnect"] = { + "subway_trains/common/334/334_close.mp3", + } + + self.SoundNames["igla_on"] = "subway_trains/common/other/igla/igla_on1.mp3" + self.SoundNames["igla_off"] = "subway_trains/common/other/igla/igla_off2.mp3" + self.SoundNames["igla_start1"] = "subway_trains/common/other/igla/igla2_start1.mp3" + self.SoundNames["igla_start2"] = "subway_trains/common/other/igla/igla2_start2.mp3" + self.SoundPositions["igla_on"] = {50,1e9,Vector(459.1,-53.7+2,15.81+1),0.1} + self.SoundPositions["igla_off"] = {50,1e9,Vector(459.1,-53.7+2,15.81+1),0.1} + self.SoundPositions["igla_start1"] = {50,1e9,Vector(459.1,-53.7+2,15.81+1),0.1} + self.SoundPositions["igla_start2"] = {50,1e9,Vector(459.1,-53.7+2,15.81+1),0.1} + + self.SoundNames["pnm_on"] = {"subway_trains/common/pnm/pnm_switch_on.mp3","subway_trains/common/pnm/pnm_switch_on2.mp3"} + self.SoundNames["pnm_off"] = "subway_trains/common/pnm/pnm_switch_off.mp3" + self.SoundNames["pnm_button1_on"] = { + "subway_trains/common/pnm/pnm_button_push.mp3", + "subway_trains/common/pnm/pnm_button_push2.mp3", + } + + self.SoundNames["pnm_button2_on"] = { + "subway_trains/common/pnm/pnm_button_push3.mp3", + "subway_trains/common/pnm/pnm_button_push4.mp3", + } + + self.SoundNames["pnm_button1_off"] = { + "subway_trains/common/pnm/pnm_button_release.mp3", + "subway_trains/common/pnm/pnm_button_release2.mp3", + "subway_trains/common/pnm/pnm_button_release3.mp3", + } + + self.SoundNames["pnm_button2_off"] = { + "subway_trains/common/pnm/pnm_button_release4.mp3", + "subway_trains/common/pnm/pnm_button_release5.mp3", + } + + self.SoundNames["horn0"] = {loop=0.8,"subway_trains/common/pneumatic/horn/horn0_start.wav","subway_trains/common/pneumatic/horn/horn0_loop.wav", "subway_trains/common/pneumatic/horn/horn0_end.wav"} + self.SoundNames["horn"] = {loop=0.6,"subway_trains/common/pneumatic/horn/horn3_start.wav","subway_trains/common/pneumatic/horn/horn3_loop.wav", "subway_trains/common/pneumatic/horn/horn3_end.wav"} + self.SoundPositions["horn"] = {1100,1e9,Vector(475,-20,-55)} + self.SoundPositions["horn0"] = self.SoundPositions["horn"] + + self.SoundNames["pak_on"] = "subway_trains/717/switches/rc_on.mp3" + self.SoundNames["pak_off"] = "subway_trains/717/switches/rc_off.mp3" + + self.SoundNames["kv70_fix_on"] = {"subway_trains/717/kv70/kv70_fix_on1.mp3","subway_trains/717/kv70/kv70_fix_on2.mp3"} + self.SoundNames["kv70_fix_off"] = {"subway_trains/717/kv70/kv70_fix_off1.mp3","subway_trains/717/kv70/kv70_fix_off2.mp3"} + self.SoundNames["kv40_0_t1"] = {"subway_trains/ezh/kv40_2/0_t1.mp3"} + self.SoundNames["kv40_t1_0"] = {"subway_trains/ezh/kv40_2/t1_0.mp3"} + self.SoundNames["kv40_t1_t1a"] = {"subway_trains/ezh/kv40_2/t1_t1a.mp3"} + self.SoundNames["kv40_t1a_t1"] = {"subway_trains/ezh/kv40_2/t1a_t1.mp3"} + self.SoundNames["kv40_t1a_t2"] = {"subway_trains/ezh/kv40_2/t1a_t2.mp3"} + self.SoundNames["kv40_t2_t1a"] = {"subway_trains/ezh/kv40_2/t2_t1a.mp3"} + self.SoundNames["kv40_0_x1"] = {"subway_trains/ezh/kv40_2/0_x1_2.mp3"} + self.SoundNames["kv40_x1_0"] = {"subway_trains/ezh/kv40_2/x1_0.mp3"} + self.SoundNames["kv40_x1_x2"] = {"subway_trains/ezh/kv40_2/x1_x2.mp3"} + self.SoundNames["kv40_x2_x1"] = {"subway_trains/ezh/kv40_2/x2_x1.mp3"} + self.SoundNames["kv40_x2_x3"] = {"subway_trains/ezh/kv40_2/x2_x3.mp3"} + self.SoundNames["kv40_x3_x2"] = {"subway_trains/ezh/kv40_2/x3_x2.mp3"} + self.SoundPositions["kv70_fix_on"] = {100,1e9,Vector(457.85,-22.8,-6),1} + self.SoundPositions["kv70_fix_off"] = self.SoundPositions["kv70_fix_on"] + self.SoundPositions["kv40_0_t1"] = self.SoundPositions["kv70_fix_on"] + self.SoundPositions["kv70_t1_0_fix"] = self.SoundPositions["kv70_fix_on"] + self.SoundPositions["kv40_t1_0"] = self.SoundPositions["kv70_fix_on"] + self.SoundPositions["kv40_t1_t1a"] = self.SoundPositions["kv70_fix_on"] + self.SoundPositions["kv40_t1a_t1"] = self.SoundPositions["kv70_fix_on"] + self.SoundPositions["kv40_t1a_t2"] = self.SoundPositions["kv70_fix_on"] + self.SoundPositions["kv40_t2_t1a"] = self.SoundPositions["kv70_fix_on"] + self.SoundPositions["kv40_0_x1"] = self.SoundPositions["kv70_fix_on"] + self.SoundPositions["kv40_x1_0"] = self.SoundPositions["kv70_fix_on"] + self.SoundPositions["kv40_x1_x2"] = self.SoundPositions["kv70_fix_on"] + self.SoundPositions["kv40_x2_x1"] = self.SoundPositions["kv70_fix_on"] + self.SoundPositions["kv40_x2_x3"] = self.SoundPositions["kv70_fix_on"] + self.SoundPositions["kv40_x3_x2"] = self.SoundPositions["kv70_fix_on"] + + self.SoundNames["ring_old"] = {loop=0.15,"subway_trains/717/ring/ringo_start.wav","subway_trains/717/ring/ringo_loop.wav","subway_trains/717/ring/ringo_end.mp3"} + self.SoundPositions["ring_old"] = {60,1e9,Vector(400,-30,55),0.5} + + self.SoundNames["vpr"] = {loop=0.8,"subway_trains/common/other/radio/vpr_start.wav","subway_trains/common/other/radio/vpr_loop.wav","subway_trains/common/other/radio/vpr_off.wav"} + self.SoundPositions["vpr"] = {50,1e9,Vector(403,-38.2 ,55),0.05} + + self.SoundNames["cab_door_open"] = "subway_trains/common/door/cab/door_open.mp3" + self.SoundNames["cab_door_close"] = "subway_trains/common/door/cab/door_close.mp3" + + self.SoundNames["parking_brake_rolling"] = {"subway_trains/ezh3/parking_brake_rolling1.mp3","subway_trains/ezh3/parking_brake_rolling2.mp3","subway_trains/ezh3/parking_brake_rolling3.mp3","subway_trains/ezh3/parking_brake_rolling4.mp3"} + self.SoundPositions["parking_brake_rolling"] = {65,1e9,Vector(456.72,35.5,-14.843545),0.1} + self.SoundNames["av8_on"] = {"subway_trains/common/switches/av8/av8_on.mp3","subway_trains/common/switches/av8/av8_on2.mp3"} + self.SoundNames["av8_off"] = {"subway_trains/common/switches/av8/av8_off.mp3","subway_trains/common/switches/av8/av8_off2.mp3"} + self.SoundPositions["av8_on"] = {100,1e9,Vector(405,40,30)} + self.SoundPositions["av8_off"] = {100,1e9,Vector(405,40,30)} + + self.SoundNames["vu22_on"] = {"subway_trains/ezh3/vu/vu22_on1.mp3", "subway_trains/ezh3/vu/vu22_on2.mp3", "subway_trains/ezh3/vu/vu22_on3.mp3"} + self.SoundNames["vu22_off"] = {"subway_trains/ezh3/vu/vu22_off1.mp3", "subway_trains/ezh3/vu/vu22_off2.mp3", "subway_trains/ezh3/vu/vu22_off3.mp3"} + self.SoundNames["vu223_on"] = {"subway_trains/common/switches/vu22/vu22_3_on.mp3"} + self.SoundNames["vu223_off"] = {"subway_trains/common/switches/vu22/vu22_3_off.mp3"} + + --DOORS + self.SoundNames["vdol_on"] = { + "subway_trains/common/pneumatic/door_valve/VDO_on.mp3", + "subway_trains/common/pneumatic/door_valve/VDO2_on.mp3", + } + self.SoundNames["vdol_off"] = { + "subway_trains/common/pneumatic/door_valve/VDO_off.mp3", + "subway_trains/common/pneumatic/door_valve/VDO2_off.mp3", + } + self.SoundPositions["vdol_on"] = {100,1e9,Vector(410,20,-45)} + self.SoundPositions["vdol_off"] = {100,1e9,Vector(410,20,-45)} + self.SoundNames["vdor_on"] = self.SoundNames["vdol_on"] + self.SoundNames["vdor_off"] = self.SoundNames["vdol_off"] + self.SoundPositions["vdor_on"] = self.SoundPositions["vdol_on"] + self.SoundPositions["vdor_off"] = self.SoundPositions["vdol_off"] + for i=1,5 do + self.SoundNames["vdol_loud"..i] = "subway_trains/common/pneumatic/door_valve/vdo"..(2+i).."_on.mp3" + self.SoundNames["vdop_loud"..i] = self.SoundNames["vdol_loud"..i] + self.SoundNames["vzd_loud"..i] = self.SoundNames["vdol_loud"..i] + self.SoundPositions["vdol_loud"..i] = {100,1e9,Vector(410,20,-45),1} + self.SoundPositions["vdop_loud"..i] = self.SoundPositions["vdol_loud"..i] + self.SoundPositions["vzd_loud"..i] = self.SoundPositions["vdol_loud"..i] + end + self.SoundNames["vdz_on"] = { + "subway_trains/common/pneumatic/door_valve/VDZ_on.mp3", + "subway_trains/common/pneumatic/door_valve/VDZ2_on.mp3", + "subway_trains/common/pneumatic/door_valve/VDZ3_on.mp3", + } + self.SoundNames["vdz_off"] = { + "subway_trains/common/pneumatic/door_valve/VDZ_off.mp3", + "subway_trains/common/pneumatic/door_valve/VDZ2_off.mp3", + "subway_trains/common/pneumatic/door_valve/VDZ3_off.mp3", + } + self.SoundPositions["vdz_on"] = {100,1e9,Vector(410,20,-45)} + self.SoundPositions["vdz_off"] = {100,1e9,Vector(410,20,-45)} + + self.SoundNames["kk_off"] = "subway_trains/common/pneumatic/ak11b_off2.mp3" + self.SoundNames["kk_on"] = "subway_trains/common/pneumatic/ak11b_on2.mp3" + self.SoundPositions["kk_on"] = {100,1e9,Vector(407,-55,-5),0.3} + self.SoundPositions["kk_off"] = {100,1e9,Vector(407,-55,-5),0.3} + + for i=0,3 do + for k=0,1 do + self.SoundNames["door"..i.."x"..k.."r"] = {"subway_trains/common/door/door_roll.wav",loop=true} + self.SoundPositions["door"..i.."x"..k.."r"] = {150,1e9,GetDoorPosition(i,k),0.11} + self.SoundNames["door"..i.."x"..k.."o"] = {"subway_trains/common/door/door_open_end5.mp3","subway_trains/common/door/door_open_end6.mp3","subway_trains/common/door/door_open_end7.mp3"} + self.SoundPositions["door"..i.."x"..k.."o"] = {350,1e9,GetDoorPosition(i,k),2} + self.SoundNames["door"..i.."x"..k.."c"] = {"subway_trains/common/door/door_close_end.mp3","subway_trains/common/door/door_close_end2.mp3","subway_trains/common/door/door_close_end3.mp3","subway_trains/common/door/door_close_end4.mp3","subway_trains/common/door/door_close_end5.mp3"} + self.SoundPositions["door"..i.."x"..k.."c"] = {400,1e9,GetDoorPosition(i,k),2} + end + end + + for k,v in ipairs(self.AnnouncerPositions) do + self.SoundNames["announcer_noise1_"..k] = {loop=true,"subway_announcers/upo/noiseS1.wav"} + self.SoundPositions["announcer_noise1_"..k] = {v[2] or 300,1e9,v[1],v[3]*0.5} + self.SoundNames["announcer_noise2_"..k] = {loop=true,"subway_announcers/upo/noiseS2.wav"} + self.SoundPositions["announcer_noise2_"..k] = {v[2] or 300,1e9,v[1],v[3]*0.5} + end + + self.SoundNames["RKR"] = "subway_trains/common/pneumatic/rkr2.mp3" + self.SoundPositions["RKR"] = {330,1e9,Vector(-27,-40,-66),0.22} + self.SoundNames["PN2end"] = {"subway_trains/common/pneumatic/vz2_end.mp3","subway_trains/common/pneumatic/vz2_end_2.mp3","subway_trains/common/pneumatic/vz2_end_3.mp3","subway_trains/common/pneumatic/vz2_end_4.mp3"} + self.SoundPositions["PN2end"] = {350,1e9,Vector(-183,0,-70),0.3} +end + +function ENT:InitializeSystems() + -- Электросистема Е + self:LoadSystem("Electric","81_703I_Electric") + + -- Токоприёмник + self:LoadSystem("TR","TR_3B") + -- Электротяговые двигатели + self:LoadSystem("Engines","DK_108D") + + -- Резисторы для реостата/пусковых сопротивлений + self:LoadSystem("KF_47A","81_703_KF_47A") + -- Резисторы для ослабления возбуждения + self:LoadSystem("KF_50A") + -- Ящик с предохранителями + self:LoadSystem("YAP_57") + + -- Резисторы для цепей управления + --self:LoadSystem("YAS_44V") + self:LoadSystem("Reverser","PR_722D") + -- Реостатный контроллер для управления пусковыми сопротивления + self:LoadSystem("RheostatController","EKG_17A") + -- Групповой переключатель положений + self:LoadSystem("PositionSwitch","EKG_18A") + -- Кулачковый контроллер + self:LoadSystem("KV","KV_35") + ---- Контроллер резервного управления (KRP) + --self:LoadSystem("KRU") + + + -- Ящики с реле и контакторами + self:LoadSystem("LK_755A") + self:LoadSystem("YAR_13A") + --self:LoadSystem("YAR_27") + self:LoadSystem("YAK_36") + self:LoadSystem("YAK_31A") + self:LoadSystem("YAS_44V") + self:LoadSystem("YARD_2") + self:LoadSystem("PR_109A") + + -- Пневмосистема 81-703 + self:LoadSystem("Pneumatic","81_703_Pneumatic") + -- Панель управления Е + self:LoadSystem("Panel","81_703_Panel") + -- Everything else + self:LoadSystem("Battery") + self:LoadSystem("Horn") + + self:LoadSystem("Announcer","81_71_Announcer", "AnnouncementsASNP") + + self:LoadSystem("IGLA_PCBK") + + self:LoadSystem("ALSCoil") +end +function ENT:PostInitializeSystems() + self.Electric:TriggerInput("Type",self.Electric.Ezh) + if self.VU then self.VU:TriggerInput("Set",0) end +end + +ENT.SubwayTrain = { + Type = "E", + Name = "81-508", + WagType = 2, + ARS = { + NoEPK = true, + NoUAVA = true, + }, + ALS = { + HaveAutostop = true, + }, + EKKType = 703, +} +ENT.NumberRanges = {{3905,3928},{3947,3952},{3955,3961},{3976,3999},{6001,6016},{6129,6153},{6159,6164},{6171,6175},{6180,6185},{6192,6195},{6203,6231},{6236,6242},{6246,6251}} diff --git a/lua/entities/gmod_subway_em509/cl_init.lua b/lua/entities/gmod_subway_em509/cl_init.lua index 9da4335..ec9c5aa 100644 --- a/lua/entities/gmod_subway_em509/cl_init.lua +++ b/lua/entities/gmod_subway_em509/cl_init.lua @@ -728,7 +728,7 @@ ENT.ButtonMap["BLTLPressure"] = { scale = 0.0625, buttons = { - {ID = "!BLTLPressure", x=57,y=57,radius=57,tooltip="",tooltipFunc = function(ent) return Format(Metrostroi.GetPhrase("Train.Buttons.BLTLPressure"),ent:GetPackedRatio("TLPressure")*16,ent:GetPackedRatio("BLPressure")*16) end}, + {ID = "!BLTLPressure", x=57,y=57,radius=57,tooltip="",tooltipFunc = function(ent) return Format(Metrostroi.GetPhrase("Train.Buttons.BLTLPressure"),ent:GetPackedRatio("TLPressure")*12,ent:GetPackedRatio("BLPressure")*12) end}, } } ENT.ButtonMap["BCPressure"] = { diff --git a/lua/entities/gmod_subway_em509/shared.lua b/lua/entities/gmod_subway_em509/shared.lua index a079658..9497f29 100644 --- a/lua/entities/gmod_subway_em509/shared.lua +++ b/lua/entities/gmod_subway_em509/shared.lua @@ -616,7 +616,7 @@ ENT.Spawner = { {"models/metrostroi_train/81-502/sun_protectors.mdl",pos=Vector(-8,0,0)}, {"models/metrostroi_train/81-502/mirrors_ema.mdl",pos=Vector(-7.7,0,0)}, }, - interim = "gmod_subway_ezh1", + interim = "gmod_subway_em508", func = function(ent,i,maxi) if ent:GetClass() == "gmod_subway_em509" then ent.VU:TriggerInput("Set",1) diff --git a/lua/metrostroi_data/languages/cz_702.lua b/lua/metrostroi_data/languages/cz_702.lua index 6140c42..4937db7 100644 --- a/lua/metrostroi_data/languages/cz_702.lua +++ b/lua/metrostroi_data/languages/cz_702.lua @@ -499,8 +499,8 @@ Entities.gmod_subway_ezh1.Buttons.VU.VUToggle = @[Common.ALL.VU] Entities.gmod_subway_ezh1.Buttons.HelperPanel.KU13Set = @[Common.ALL.KDL] Entities.gmod_subway_ezh1.Buttons.HelperPanel.KU3Toggle = @[Common.ALL.VUD2] -Entities.gmod_subway_ezh1.Buttons.Main.!GRP = @[Common.ALL.RRP] -Entities.gmod_subway_ezh1.Buttons.Main.!RRP = @[Common.ALL.GRP] +Entities.gmod_subway_ezh1.Buttons.Main.!GRP = @[Common.ALL.GRP] +Entities.gmod_subway_ezh1.Buttons.Main.!RRP = @[Common.ALL.RRP] Entities.gmod_subway_ezh1.Buttons.Main.!SD = @[Common.703.SD] Entities.gmod_subway_ezh1.Buttons.ParkingBrake.ParkingBrakeLeft = @[Common.703.ParkingBrakeLeft] diff --git a/lua/metrostroi_data/languages/de_702.lua b/lua/metrostroi_data/languages/de_702.lua index 177a1d2..2e5ec60 100644 --- a/lua/metrostroi_data/languages/de_702.lua +++ b/lua/metrostroi_data/languages/de_702.lua @@ -435,8 +435,8 @@ Entities.gmod_subway_ezh1.Buttons.VU4.KU16Toggle = @[Common.ALL.VF2] Entities.gmod_subway_ezh1.Buttons.VU.VUToggle = @[Common.ALL.VU] Entities.gmod_subway_ezh1.Buttons.HelperPanel.KU13Set = @[Common.ALL.KDL] Entities.gmod_subway_ezh1.Buttons.HelperPanel.KU3Toggle = @[Common.ALL.VUD2] -Entities.gmod_subway_ezh1.Buttons.Main.!GRP = @[Common.ALL.RRP] -Entities.gmod_subway_ezh1.Buttons.Main.!RRP = @[Common.ALL.GRP] +Entities.gmod_subway_ezh1.Buttons.Main.!GRP = @[Common.ALL.GRP] +Entities.gmod_subway_ezh1.Buttons.Main.!RRP = @[Common.ALL.RRP] Entities.gmod_subway_ezh1.Buttons.Main.!SD = @[Common.703.SD] Entities.gmod_subway_ezh1.Buttons.ParkingBrake.ParkingBrakeLeft = @[Common.703.ParkingBrakeLeft] Entities.gmod_subway_ezh1.Buttons.ParkingBrake.ParkingBrakeRight = @[Common.703.ParkingBrakeRight] diff --git a/lua/metrostroi_data/languages/en_509.lua b/lua/metrostroi_data/languages/en_509.lua index 56d048c..47968ba 100644 --- a/lua/metrostroi_data/languages/en_509.lua +++ b/lua/metrostroi_data/languages/en_509.lua @@ -129,4 +129,56 @@ Entities.gmod_subway_em509.Buttons.Route.RouteNumber1- = @[Common.A Entities.gmod_subway_em509.Buttons.Route.RouteNumber2- = @[Common.ALL.RouteNumber2-] Entities.gmod_subway_em509.Buttons.LastStation.LastStation+ = @[Common.ALL.LastStation+] Entities.gmod_subway_em509.Buttons.LastStation.LastStation- = @[Common.ALL.LastStation-] + +#gmod_subway_em508 +Entities.gmod_subway_em508.Buttons.Main.KU4Set = @[Common.703.LOn] +Entities.gmod_subway_em508.Buttons.Main.KU5Set = @[Common.703.LOff] +Entities.gmod_subway_em508.Buttons.Main.KU9Set = @[Common.ALL.VRP] +Entities.gmod_subway_em508.Buttons.Main.KU8Set = @[Common.ALL.KSN] +Entities.gmod_subway_em508.Buttons.Main.KU10Set = @[Common.ALL.KRZD] +Entities.gmod_subway_em508.Buttons.Main.KU6Set = @[Common.ALL.KDL] +Entities.gmod_subway_em508.Buttons.Main.KU7Set = @[Common.ALL.KDP] +Entities.gmod_subway_em508.Buttons.Main.KU1Toggle = @[Common.ALL.VMK] +Entities.gmod_subway_em508.Buttons.Main.KU2Toggle = @[Common.ALL.VUD] + + +Entities.gmod_subway_em508.Buttons.AVMain.AVToggle = @[Common.703.AV] +Entities.gmod_subway_em508.Buttons.Battery.VBToggle = @[Common.ALL.VB] @[Common.ALL.VB2] +Entities.gmod_subway_em508.Buttons.AV1.VU1Toggle = @[Common.703.VU1] +Entities.gmod_subway_em508.Buttons.AV1.VU2Toggle = @[Common.703.VU2] +Entities.gmod_subway_em508.Buttons.AV1.VU3Toggle = @[Common.703.VU3] + +Entities.gmod_subway_em508.Buttons.VU4.KU16Toggle = @[Common.ALL.VF2] +Entities.gmod_subway_em508.Buttons.VU.VUToggle = @[Common.ALL.VU] + +Entities.gmod_subway_em508.Buttons.HelperPanel.KU13Set = @[Common.ALL.KDL] +Entities.gmod_subway_em508.Buttons.HelperPanel.KU3Toggle = @[Common.ALL.VUD2] + +Entities.gmod_subway_em508.Buttons.Main.!GRP = @[Common.ALL.GRP] +Entities.gmod_subway_em508.Buttons.Main.!RRP = @[Common.ALL.RRP] +Entities.gmod_subway_em508.Buttons.Main.!SD = @[Common.703.SD] + +Entities.gmod_subway_em508.Buttons.ParkingBrake.ParkingBrakeLeft = @[Common.703.ParkingBrakeLeft] +Entities.gmod_subway_em508.Buttons.ParkingBrake.ParkingBrakeRight = @[Common.703.ParkingBrakeRight] +Entities.gmod_subway_em508.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_em508.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_em508.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_em508.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_em508.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_em508.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_em508.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_em508.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_em508.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_em508.Buttons.PassengerDoor1.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_em508.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_em508.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_em508.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] + +Entities.gmod_subway_em508.Buttons.BLTLPressure.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_em508.Buttons.BCPressure.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_em508.Buttons.HVMeters.!EnginesVoltage = @[Common.ALL.EnginesVoltage] +Entities.gmod_subway_em508.Buttons.HVMeters.!EnginesCurrent = @[Common.ALL.EnginesCurrent] +Entities.gmod_subway_em508.Buttons.BatteryVoltage.!BatteryVoltage = @[Common.ALL.BatteryVoltage] + +Entities.gmod_subway_em508.Buttons.PanelLamp.PanelLampToggle = @[Common.ALL.PanelLights] ]] \ No newline at end of file diff --git a/lua/metrostroi_data/languages/en_702.lua b/lua/metrostroi_data/languages/en_702.lua index e50aa91..0562cf0 100644 --- a/lua/metrostroi_data/languages/en_702.lua +++ b/lua/metrostroi_data/languages/en_702.lua @@ -499,8 +499,8 @@ Entities.gmod_subway_ezh1.Buttons.VU.VUToggle = @[Common.ALL.VU] Entities.gmod_subway_ezh1.Buttons.HelperPanel.KU13Set = @[Common.ALL.KDL] Entities.gmod_subway_ezh1.Buttons.HelperPanel.KU3Toggle = @[Common.ALL.VUD2] -Entities.gmod_subway_ezh1.Buttons.Main.!GRP = @[Common.ALL.RRP] -Entities.gmod_subway_ezh1.Buttons.Main.!RRP = @[Common.ALL.GRP] +Entities.gmod_subway_ezh1.Buttons.Main.!GRP = @[Common.ALL.GRP] +Entities.gmod_subway_ezh1.Buttons.Main.!RRP = @[Common.ALL.RRP] Entities.gmod_subway_ezh1.Buttons.Main.!SD = @[Common.703.SD] Entities.gmod_subway_ezh1.Buttons.ParkingBrake.ParkingBrakeLeft = @[Common.703.ParkingBrakeLeft] diff --git a/lua/metrostroi_data/languages/fr_702.lua b/lua/metrostroi_data/languages/fr_702.lua index fee9dcc..7e7e50a 100644 --- a/lua/metrostroi_data/languages/fr_702.lua +++ b/lua/metrostroi_data/languages/fr_702.lua @@ -499,8 +499,8 @@ Entities.gmod_subway_ezh1.Buttons.VU.VUToggle = @[Common.ALL.VU] Entities.gmod_subway_ezh1.Buttons.HelperPanel.KU13Set = @[Common.ALL.KDL] Entities.gmod_subway_ezh1.Buttons.HelperPanel.KU3Toggle = @[Common.ALL.VUD2] -Entities.gmod_subway_ezh1.Buttons.Main.!GRP = @[Common.ALL.RRP] -Entities.gmod_subway_ezh1.Buttons.Main.!RRP = @[Common.ALL.GRP] +Entities.gmod_subway_ezh1.Buttons.Main.!GRP = @[Common.ALL.GRP] +Entities.gmod_subway_ezh1.Buttons.Main.!RRP = @[Common.ALL.RRP] Entities.gmod_subway_ezh1.Buttons.Main.!SD = @[Common.703.SD] Entities.gmod_subway_ezh1.Buttons.ParkingBrake.ParkingBrakeLeft = @[Common.703.ParkingBrakeLeft] diff --git a/lua/metrostroi_data/languages/hu_702.lua b/lua/metrostroi_data/languages/hu_702.lua index f720bb3..db6776a 100644 --- a/lua/metrostroi_data/languages/hu_702.lua +++ b/lua/metrostroi_data/languages/hu_702.lua @@ -499,8 +499,8 @@ Entities.gmod_subway_ezh1.Buttons.VU.VUToggle = @[Common.ALL.VU] Entities.gmod_subway_ezh1.Buttons.HelperPanel.KU13Set = @[Common.ALL.KDL] Entities.gmod_subway_ezh1.Buttons.HelperPanel.KU3Toggle = @[Common.ALL.VUD2] -Entities.gmod_subway_ezh1.Buttons.Main.!GRP = @[Common.ALL.RRP] -Entities.gmod_subway_ezh1.Buttons.Main.!RRP = @[Common.ALL.GRP] +Entities.gmod_subway_ezh1.Buttons.Main.!GRP = @[Common.ALL.GRP] +Entities.gmod_subway_ezh1.Buttons.Main.!RRP = @[Common.ALL.RRP] Entities.gmod_subway_ezh1.Buttons.Main.!SD = @[Common.703.SD] Entities.gmod_subway_ezh1.Buttons.ParkingBrake.ParkingBrakeLeft = @[Common.703.ParkingBrakeLeft] diff --git a/lua/metrostroi_data/languages/it_702.lua b/lua/metrostroi_data/languages/it_702.lua index f479487..ce9ccfa 100644 --- a/lua/metrostroi_data/languages/it_702.lua +++ b/lua/metrostroi_data/languages/it_702.lua @@ -482,8 +482,8 @@ Entities.gmod_subway_ezh1.Buttons.VU.VUToggle = @[Common.ALL.VU] Entities.gmod_subway_ezh1.Buttons.HelperPanel.KU13Set = @[Common.ALL.KDL] Entities.gmod_subway_ezh1.Buttons.HelperPanel.KU3Toggle = @[Common.ALL.VUD2] -Entities.gmod_subway_ezh1.Buttons.Main.!GRP = @[Common.ALL.RRP] -Entities.gmod_subway_ezh1.Buttons.Main.!RRP = @[Common.ALL.GRP] +Entities.gmod_subway_ezh1.Buttons.Main.!GRP = @[Common.ALL.GRP] +Entities.gmod_subway_ezh1.Buttons.Main.!RRP = @[Common.ALL.RRP] Entities.gmod_subway_ezh1.Buttons.Main.!SD = @[Common.703.SD] Entities.gmod_subway_ezh1.Buttons.ParkingBrake.ParkingBrakeLeft = @[Common.703.ParkingBrakeLeft] diff --git a/lua/metrostroi_data/languages/kr_702.lua b/lua/metrostroi_data/languages/kr_702.lua index 7e29b66..98459a9 100644 --- a/lua/metrostroi_data/languages/kr_702.lua +++ b/lua/metrostroi_data/languages/kr_702.lua @@ -491,8 +491,8 @@ Entities.gmod_subway_ezh1.Buttons.VU.VUToggle = @[Common.ALL.VU] Entities.gmod_subway_ezh1.Buttons.HelperPanel.KU13Set = @[Common.ALL.KDL] Entities.gmod_subway_ezh1.Buttons.HelperPanel.KU3Toggle = @[Common.ALL.VUD2] -Entities.gmod_subway_ezh1.Buttons.Main.!GRP = @[Common.ALL.RRP] -Entities.gmod_subway_ezh1.Buttons.Main.!RRP = @[Common.ALL.GRP] +Entities.gmod_subway_ezh1.Buttons.Main.!GRP = @[Common.ALL.GRP] +Entities.gmod_subway_ezh1.Buttons.Main.!RRP = @[Common.ALL.RRP] Entities.gmod_subway_ezh1.Buttons.Main.!SD = @[Common.703.SD] Entities.gmod_subway_ezh1.Buttons.ParkingBrake.ParkingBrakeLeft = @[Common.703.ParkingBrakeLeft] diff --git a/lua/metrostroi_data/languages/pl_702.lua b/lua/metrostroi_data/languages/pl_702.lua index a0b92e9..5dcf7b4 100644 --- a/lua/metrostroi_data/languages/pl_702.lua +++ b/lua/metrostroi_data/languages/pl_702.lua @@ -499,8 +499,8 @@ Entities.gmod_subway_ezh1.Buttons.VU.VUToggle = @[Common.ALL.VU] Entities.gmod_subway_ezh1.Buttons.HelperPanel.KU13Set = @[Common.ALL.KDL] Entities.gmod_subway_ezh1.Buttons.HelperPanel.KU3Toggle = @[Common.ALL.VUD2] -Entities.gmod_subway_ezh1.Buttons.Main.!GRP = @[Common.ALL.RRP] -Entities.gmod_subway_ezh1.Buttons.Main.!RRP = @[Common.ALL.GRP] +Entities.gmod_subway_ezh1.Buttons.Main.!GRP = @[Common.ALL.GRP] +Entities.gmod_subway_ezh1.Buttons.Main.!RRP = @[Common.ALL.RRP] Entities.gmod_subway_ezh1.Buttons.Main.!SD = @[Common.703.SD] Entities.gmod_subway_ezh1.Buttons.ParkingBrake.ParkingBrakeLeft = @[Common.703.ParkingBrakeLeft] diff --git a/lua/metrostroi_data/languages/ru_509.lua b/lua/metrostroi_data/languages/ru_509.lua index b52f208..6e60286 100644 --- a/lua/metrostroi_data/languages/ru_509.lua +++ b/lua/metrostroi_data/languages/ru_509.lua @@ -121,7 +121,7 @@ Entities.gmod_subway_em509.Buttons.HVMeters.!EnginesVoltage = @[Common.A Entities.gmod_subway_em509.Buttons.HVMeters.!EnginesCurrent = @[Common.ALL.EnginesCurrent] Entities.gmod_subway_em509.Buttons.BatteryVoltage.!BatteryVoltage = @[Common.ALL.BatteryVoltage] -Entities.gmod_subway_em509t.Buttons.PanelLamp.PanelLampToggle = @[Common.ALL.PanelLights] +Entities.gmod_subway_em509.Buttons.PanelLamp.PanelLampToggle = @[Common.ALL.PanelLights] Entities.gmod_subway_em509.Buttons.Route.RouteNumber1+ = @[Common.ALL.RouteNumber1+] Entities.gmod_subway_em509.Buttons.Route.RouteNumber2+ = @[Common.ALL.RouteNumber2+] @@ -129,4 +129,56 @@ Entities.gmod_subway_em509.Buttons.Route.RouteNumber1- = @[Common.A Entities.gmod_subway_em509.Buttons.Route.RouteNumber2- = @[Common.ALL.RouteNumber2-] Entities.gmod_subway_em509.Buttons.LastStation.LastStation+ = @[Common.ALL.LastStation+] Entities.gmod_subway_em509.Buttons.LastStation.LastStation- = @[Common.ALL.LastStation-] + +#gmod_subway_em508 +Entities.gmod_subway_em508.Buttons.Main.KU4Set = @[Common.703.LOn] +Entities.gmod_subway_em508.Buttons.Main.KU5Set = @[Common.703.LOff] +Entities.gmod_subway_em508.Buttons.Main.KU9Set = @[Common.ALL.VRP] +Entities.gmod_subway_em508.Buttons.Main.KU8Set = @[Common.ALL.KSN] +Entities.gmod_subway_em508.Buttons.Main.KU10Set = @[Common.ALL.KRZD] +Entities.gmod_subway_em508.Buttons.Main.KU6Set = @[Common.ALL.KDL] +Entities.gmod_subway_em508.Buttons.Main.KU7Set = @[Common.ALL.KDP] +Entities.gmod_subway_em508.Buttons.Main.KU1Toggle = @[Common.ALL.VMK] +Entities.gmod_subway_em508.Buttons.Main.KU2Toggle = @[Common.ALL.VUD] + + +Entities.gmod_subway_em508.Buttons.AVMain.AVToggle = @[Common.703.AV] +Entities.gmod_subway_em508.Buttons.Battery.VBToggle = @[Common.ALL.VB] @[Common.ALL.VB2] +Entities.gmod_subway_em508.Buttons.AV1.VU1Toggle = @[Common.703.VU1] +Entities.gmod_subway_em508.Buttons.AV1.VU2Toggle = @[Common.703.VU2] +Entities.gmod_subway_em508.Buttons.AV1.VU3Toggle = @[Common.703.VU3] + +Entities.gmod_subway_em508.Buttons.VU4.KU16Toggle = @[Common.ALL.VF2] +Entities.gmod_subway_em508.Buttons.VU.VUToggle = @[Common.ALL.VU] + +Entities.gmod_subway_em508.Buttons.HelperPanel.KU13Set = @[Common.ALL.KDL] +Entities.gmod_subway_em508.Buttons.HelperPanel.KU3Toggle = @[Common.ALL.VUD2] + +Entities.gmod_subway_em508.Buttons.Main.!GRP = @[Common.ALL.GRP] +Entities.gmod_subway_em508.Buttons.Main.!RRP = @[Common.ALL.RRP] +Entities.gmod_subway_em508.Buttons.Main.!SD = @[Common.703.SD] + +Entities.gmod_subway_em508.Buttons.ParkingBrake.ParkingBrakeLeft = @[Common.703.ParkingBrakeLeft] +Entities.gmod_subway_em508.Buttons.ParkingBrake.ParkingBrakeRight = @[Common.703.ParkingBrakeRight] +Entities.gmod_subway_em508.Buttons.DriverValveBLDisconnect.DriverValveBLDisconnectToggle = @[Common.ALL.DriverValveBLDisconnect] +Entities.gmod_subway_em508.Buttons.DriverValveTLDisconnect.DriverValveTLDisconnectToggle = @[Common.ALL.DriverValveTLDisconnect] +Entities.gmod_subway_em508.Buttons.FrontPneumatic.FrontBrakeLineIsolationToggle = @[Common.ALL.FrontBrakeLineIsolationToggle] +Entities.gmod_subway_em508.Buttons.FrontPneumatic.FrontTrainLineIsolationToggle = @[Common.ALL.FrontTrainLineIsolationToggle] +Entities.gmod_subway_em508.Buttons.RearPneumatic.RearTrainLineIsolationToggle = @[Common.ALL.RearTrainLineIsolationToggle] +Entities.gmod_subway_em508.Buttons.RearPneumatic.RearBrakeLineIsolationToggle = @[Common.ALL.RearBrakeLineIsolationToggle] +Entities.gmod_subway_em508.Buttons.GV.GVToggle = @[Common.ALL.GV] +Entities.gmod_subway_em508.Buttons.AirDistributor.AirDistributorDisconnectToggle = @[Common.ALL.AirDistributor] +Entities.gmod_subway_em508.Buttons.PassengerDoor.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_em508.Buttons.PassengerDoor1.PassengerDoor = @[Common.ALL.PassDoor] +Entities.gmod_subway_em508.Buttons.FrontDoor.FrontDoor = @[Common.ALL.FrontDoor] +Entities.gmod_subway_em508.Buttons.RearDoor.RearDoor = @[Common.ALL.RearDoor] +Entities.gmod_subway_em508.Buttons.CabinDoor.CabinDoor = @[Common.ALL.CabinDoor] + +Entities.gmod_subway_em508.Buttons.BLTLPressure.!BLTLPressure = @[Common.ALL.BLTLPressure] +Entities.gmod_subway_em508.Buttons.BCPressure.!BCPressure = @[Common.ALL.BCPressure] +Entities.gmod_subway_em508.Buttons.HVMeters.!EnginesVoltage = @[Common.ALL.EnginesVoltage] +Entities.gmod_subway_em508.Buttons.HVMeters.!EnginesCurrent = @[Common.ALL.EnginesCurrent] +Entities.gmod_subway_em508.Buttons.BatteryVoltage.!BatteryVoltage = @[Common.ALL.BatteryVoltage] + +Entities.gmod_subway_em508.Buttons.PanelLamp.PanelLampToggle = @[Common.ALL.PanelLights] ]] \ No newline at end of file diff --git a/lua/metrostroi_data/languages/ru_702.lua b/lua/metrostroi_data/languages/ru_702.lua index 6314f38..653e416 100644 --- a/lua/metrostroi_data/languages/ru_702.lua +++ b/lua/metrostroi_data/languages/ru_702.lua @@ -500,8 +500,8 @@ Entities.gmod_subway_ezh1.Buttons.VU.VUToggle = @[Common.ALL.VU] Entities.gmod_subway_ezh1.Buttons.HelperPanel.KU13Set = @[Common.ALL.KDL] Entities.gmod_subway_ezh1.Buttons.HelperPanel.KU3Toggle = @[Common.ALL.VUD2] -Entities.gmod_subway_ezh1.Buttons.Main.!GRP = @[Common.ALL.RRP] -Entities.gmod_subway_ezh1.Buttons.Main.!RRP = @[Common.ALL.GRP] +Entities.gmod_subway_ezh1.Buttons.Main.!GRP = @[Common.ALL.GRP] +Entities.gmod_subway_ezh1.Buttons.Main.!RRP = @[Common.ALL.RRP] Entities.gmod_subway_ezh1.Buttons.Main.!SD = @[Common.703.SD] Entities.gmod_subway_ezh1.Buttons.ParkingBrake.ParkingBrakeLeft = @[Common.703.ParkingBrakeLeft]