1
0
mirror of https://github.com/metrostroi-repo/MetrostroiAddon.git synced 2026-05-02 00:42:29 +00:00
Files
MetrostroiAddon/lua/entities/gmod_subway_81-722/cl_init.lua
kosmik641 5a58301de2 81-722.
Поправлены экраны под новые модели
2025-05-30 12:57:33 +03:00

1839 lines
88 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
--------------------------------------------------------------------------------
-- 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")
--------------------------------------------------------------------------------
ENT.ClientProps = {}
ENT.ButtonMap = {}
ENT.AutoAnims = {}
ENT.AutoAnimNames = {}
ENT.ClientSounds = {}
--------------------------------------------------------------------------------
ENT.ClientPropsInitialized = false
ENT.ButtonMap["PU1"] = {
pos = Vector(471,41,-15.45), --446 -- 14 -- -0,5
ang = Angle(0.5,-90,6.5),
width = 230,
height = 200,
scale = 0.0625,
hideseat=0.2,
buttons = {
{ID = "MirrorHeatingSet",x=93.5+36*2, y=100-18*2, radius=15, tooltip = "Отопление зеркал",model = {
model = "models/metrostroi_train/81-722/button_yellow.mdl", z=2,
var="MirrorHeating",speed=12, min=0,max=0.6,
lamp = {model = "models/metrostroi_train/81-722/lamp_yellow.mdl",var="MirrorHeatingEnabled",z=0,anim=true,
lcolor=Color(255,255,60),lz = 12,lbright=3,lfov=140,lfar=16,lnear=8,lshadows=0,},
sndvol = 0.2, snd = function(val) return val and "button_on" or "button_off" end,
sndmin = 90, sndmax = 1e3,
}},
{ID = "DoorLeft2Set",x=93.5+36*3, y=100-18*3, radius=15, tooltip = "Двери левые",model = {
model = "models/metrostroi_train/81-722/button_white.mdl", z=2,
var="DoorLeft2",speed=12, min=0,max=0.6,
lamp = {model = "models/metrostroi_train/81-722/lamp_black.mdl",var="DoorLeftLamp",z=0,anim=true,
lcolor=Color(255,255,255),lz = 12,lbright=3,lfov=140,lfar=16,lnear=8,lshadows=0,},
sndvol = 0.2, snd = function(val) return val and "button_on" or "button_off" end,
sndmin = 90, sndmax = 1e3,
sprite = {bright=0.4,size=0.25,scale=0.03,vscale=0.02,color=Color(255,255,255),z=3}
}},
{ID = "Zaglushka1",x=93.5+36*1, y=100-18*1+58*0,model = {
model = "models/metrostroi_train/81-722/zaglushka.mdl", z=5,
}},
{ID = "Zaglushka2",x=93.5+36*0, y=100-18*0+58*0,model = {
model = "models/metrostroi_train/81-722/zaglushka.mdl", z=5,
}},
{ID = "DoorBackSet",x=93.5+36*0, y=100-18*0+58*1, radius=15, tooltip = "Открытие правых дверей хвостового вагона",model = {
model = "models/metrostroi_train/81-722/button_black.mdl", z=2,
var="DoorBack",speed=12, min=0,max=0.6,
sndvol = 0.2, snd = function(val) return val and "button_on" or "button_off" end,
sndmin = 90, sndmax = 1e3,
}},
{ID = "EmergencyDriveSet",x=93.5+36*1, y=100-18*1+58*1, radius=15, tooltip = "Аварийный ход",model = {
model = "models/metrostroi_train/81-722/button_red.mdl", z=2,
var="EmergencyDrive",speed=12, min=0,max=0.6,
lamp = {model = "models/metrostroi_train/81-722/lamp_red.mdl",var="EmergencyDriveL",z=0,anim=true,
lcolor=Color(255,40,20),lz = 12,lbright=3,lfov=140,lfar=16,lnear=8,lshadows=0,},
sndvol = 0.2, snd = function(val) return val and "button_on" or "button_off" end,
sndmin = 90, sndmax = 1e3,
sprite = {bright=0.4,size=0.25,scale=0.03,vscale=0.02,color=Color(255,40,20),z=3},
tooltipFunc = function(ent) return ent:GetPackedBool("EmergencyDriveL") and Metrostroi.GetPhrase("Train.Buttons.AHActive") end
}},
{ID = "MicrophoneSet",x=93.5+36*2, y=100-18*2+58*1, radius=15, tooltip = "Микрофон",model = {
model = "models/metrostroi_train/81-722/button_blue.mdl", z=2,
var="Microphone",speed=12, min=0,max=0.6,
sndvol = 0.2, snd = function(val) return val and "button_on" or "button_off" end,
sndmin = 90, sndmax = 1e3,
}},
{ID = "DoorLeft1Set",x=93.5+36*3, y=100-18*3+58*1, radius=15, tooltip = "Двери левые",model = {
model = "models/metrostroi_train/81-722/button_white.mdl", z=2,
var="DoorLeft1",speed=12, min=0,max=0.6,
lamp = {model = "models/metrostroi_train/81-722/lamp_black.mdl",var="DoorLeftLamp",z=0, anim=true,
lcolor=Color(255,255,255),lz = 12,lbright=3,lfov=140,lfar=16,lnear=8,lshadows=0,},
sndvol = 0.2, snd = function(val) return val and "button_on" or "button_off" end,
sndmin = 90, sndmax = 1e3,
sprite = {bright=0.4,size=0.25,scale=0.03,vscale=0.02,color=Color(255,255,255),z=3}
}},
}
}
ENT.ButtonMap["PU2"] = {
pos = Vector(472,25.5,-15.5), --446 -- 14 -- -0,5
ang = Angle(0,-90,6.5),
width = 325,
height = 173,
scale = 0.0625,
hideseat=0.2,
buttons = {
{ID = "ARSToggle",x=35+50*1, y=45-18*0, radius=16, tooltip="АРС: Автоматическое регулирвоание скорости",model = {
model = "models/metrostroi_train/81-722/tumbler.mdl", z=2, ang=180,
var="ARS",speed=16, min=0.0, max=1,
sndvol = 0.4, snd = function(val) return val and "switch_panel_up" or "switch_panel_down" end,
sndmin = 90, sndmax = 1e3,
}},
{ID = "ALSToggle",x=35+50*2, y=45-18*0, radius=16, tooltip = "АЛС:Автоматическая локомотивная сигнализация",model = {
model = "models/metrostroi_train/81-722/tumbler.mdl", z=2, ang=180,
var="ALS",speed=16, min=0.0, max=1.0,
sndvol = 0.4, snd = function(val) return val and "switch_panel_up" or "switch_panel_down" end,
sndmin = 90, sndmax = 1e3,
}},
{ID = "GlassWasherSet",x=35+50*3, y=45-18*0, radius=15, tooltip = "Омыватель стекла",model = {
model = "models/metrostroi_train/81-722/button_black.mdl", z=2, ang=180,
var="GlassWasher",speed=12, min=0,max=0.6,
sndvol = 0.2, snd = function(val) return val and "button_on" or "button_off" end,
sndmin = 90, sndmax = 1e3,
}},
{ID = "GlassCleaner",x=35+50*4, y=45-18*0, radius=0,model = {
model = "models/metrostroi_train/81-722/tumbler.mdl", z=2, ang=180,
getfunc = function(ent) return ent:GetPackedRatio("GlassCleaner") end, var="GlassCleaner",
speed=8,min=0.0, max=1.0,
sndvol = 0.4, snd = function(val,val2) return val2 == 1 and "switch_panel_mid" or val and "switch_panel_up" or "switch_panel_down" end,
sndmin = 90, sndmax = 1e3,
}},
{ID="GlassCleaner+",x=35+50*4-16, y=45-18*0-20, w=32,h=20, tooltip="Стеклоочиститель(вверх)",tooltipFunc = function(ent) return ent:GetPackedRatio("GlassCleaner") > 0 and tostring(math.floor(ent:GetPackedRatio("GlassCleaner")*2)) or Metrostroi.GetPhrase("Train.Buttons.Off") end},
{ID="GlassCleaner-",x=35+50*4-16, y=45-18*0, w=32,h=20, tooltip="Стеклоочиститель(вниз)",tooltipFunc = function(ent) return ent:GetPackedRatio("GlassCleaner") > 0 and tostring(math.floor(ent:GetPackedRatio("GlassCleaner")*2)) or Metrostroi.GetPhrase("Train.Buttons.Off") end},
{ID = "EmergencyBrakeTPlusKToggle", x=35+50*5+4-20, y=45-18*0-4-30, w=40,h=20, tooltip="Крышка кнопки Аварийный тормоз \"Т+\"", model = {
plomb = {var="EmergencyBrakeTPlusKPl", ID="EmergencyBrakeTPlusKPl",},
var="EmergencyBrakeTPlusK",speed=8,min=1,max=0, disable="EmergencyBrakeTPlusSet",
model = "models/metrostroi_train/81-722/button_krishka.mdl", ang = 180, z = 6, x=14.5,y=20,
noTooltip = true,
}},
{ID = "EmergencyBrakeTPlusSet",x=35+50*5+4, y=45-18*0-4, radius=24, tooltip = "Аварийный тормоз \"Т+\"",model = {
model = "models/metrostroi_train/81-722/button_red.mdl", z=2, ang=180,
lamp = {model = "models/metrostroi_train/81-722/lamp_red.mdl",var="EmergencyBrakeTPlusL",z=0,anim=true},
var="EmergencyBrakeTPlus",speed=12,
sndvol = 0.2, snd = function(val) return val and "button_on" or "button_off" end,
sndmin = 90, sndmax = 1e3,
tooltipFunc = function(ent) return ent:GetPackedBool("EmergencyBrakeTPlusL") and Metrostroi.GetPhrase("Train.Buttons.AHActive") end
}},
{ID = "EmergencyBrakeToggle",x=31+51*5+3, y=45+90*0.5, radius=16, tooltip = "Экстренное торможение",model = {
model = "models/metrostroi_train/81-722/button_emer.mdl", z=9, ang=180,
var="EmergencyBrake",speed=12, min=0,max=0.6,
sndvol = 0.4, snd = function(val) return val and "switch_emer_on" or "switch_emer_off" end,
sndmin = 90, sndmax = 1e3,
}},
{ID = "VigilanceSet",x=31+50*0, y=45+90*1, radius=24, tooltip = "Бдительность",model = {
model = "models/metrostroi_train/81-722/button_emer_b.mdl", z=9, ang=180,
var="Vigilance",speed=12,
sndvol = 0.4, snd = function(val) return val and "switch_kb_on" or "switch_kb_off" end,
sndmin = 90, sndmax = 1e3,
}},
{ID = "Zaglushka",x=31+50*1, y=45+90*1,model = {
model = "models/metrostroi_train/81-722/zaglushka.mdl", z=5,
}},
{ID = "Headlights",x=31+51*2, y=45+90*1, radius=0,model = {
model = "models/metrostroi_train/81-722/tumbler.mdl", z=2, ang=180,
getfunc = function(ent) return ent:GetPackedRatio("Headlights") end, var="Headlights",
speed=8, min=0.0, max=1.0,
sndvol = 0.4, snd = function(val,val2) return val2 == 1 and "switch_panel_mid" or val and "switch_panel_up" or "switch_panel_down" end,
sndmin = 90, sndmax = 1e3,
}},
{ID="Headlights+",x=31+51*2-16, y=45+90*1-20, w=32,h=20, tooltip="Фары(вверх)",states={"Train.Buttons.Off","Train.Buttons.LNear","Train.Buttons.LFar"},varTooltip = function(ent) return ent:GetPackedRatio("Headlights") end},
{ID="Headlights-",x=31+51*2-16, y=45+90*1, w=32,h=20, tooltip="Фары(вниз)",states={"Train.Buttons.Off","Train.Buttons.LNear","Train.Buttons.LFar"},varTooltip = function(ent) return ent:GetPackedRatio("Headlights") end},
{ID = "DoorSelectToggle",x=31+51*3+1, y=45+90*1, radius=16,tooltip="Закрытие дверей",model = {
model = "models/metrostroi_train/81-722/tumbler.mdl", z=2, ang=90,
var="DoorSelect",speed=16, min=0.0, max=1.0,
sndvol = 0.4, snd = function(val,val2) return val and "switch_panel_up" or "switch_panel_down" end,
sndmin = 90, sndmax = 1e3,
states={"Train.Buttons.Left","Train.Buttons.Right"}
}},
{ID = "DoorClose",x=31+51*4, y=45+90*1, radius=0,model = {
model = "models/metrostroi_train/81-722/tumbler.mdl", z=2, ang=180,
getfunc = function(ent) return ent:GetPackedRatio("DoorClose") end, var="DoorClose",
speed=10, min=0,max=1,
sndvol = 0.4, snd = function(val,val2) return val2 == 1 and "switch_panel_mid" or val and "switch_panel_up" or "switch_panel_down" end,
sndmin = 90, sndmax = 1e3,
}},
{ID="DoorClose+",x=31+51*4-16, y=45+90*1-20, w=32,h=20, tooltip="Закрытие дверей(вверх)",states={"Train.Buttons.DoorCloseM","Train.Buttons.Off","Train.Buttons.DoorCloseA"},varTooltip = function(ent) return ent:GetPackedRatio("DoorClose") end},
{ID="DoorClose-",x=31+51*4-16, y=45+90*1, w=32,h=20, tooltip="Закрытие дверей(вниз)",states={"Train.Buttons.DoorCloseM","Train.Buttons.Off","Train.Buttons.DoorCloseA"},varTooltip = function(ent) return ent:GetPackedRatio("DoorClose") end},
{ID = "DoorRightSet",x=31+51*5+3, y=45+90*1, radius=16, tooltip = "Открытие правых дверей",model = {
model = "models/metrostroi_train/81-722/button_white.mdl", z=2, ang=180,
var="DoorRight",speed=12,
lamp = {model = "models/metrostroi_train/81-722/lamp_black.mdl",var="DoorRightLamp",z=0, anim=true,
lcolor=Color(255,255,255),lz = 12,lbright=3,lfov=140,lfar=16,lnear=8,lshadows=0,},
sndvol = 0.2, snd = function(val) return val and "button_on" or "button_off" end,
sndmin = 90, sndmax = 1e3,
sprite = {bright=0.4,size=0.25,scale=0.03,vscale=0.02,color=Color(255,255,255),z=3}
}},
}
}
local CompressorPos = {0,0.26,0.46,0.76,1}
ENT.ButtonMap["BI3"] = {
pos = Vector(479.4,-4,-4), --446 -- 14 -- -0,5
ang = Angle(0,-90-27,67),
width = 200,
height = 200,
scale = 0.0625,
hideseat=0.2,
buttons = {
{ID = "KROToggle",x=53, y=128, radius=0, model = {
model = "models/metrostroi_train/81-722/tumbler_reversor.mdl",ang = 90, z=8,
getfunc = function(ent) return ent:GetPackedRatio("ReverserPosition") end,
var="KRO",speed=4.1, min=0.75,max=0.27,
sndvol = 0.4, snd = function(val,val2) return val2 == 1 and "multiswitch_panel_mid" or val and "multiswitch_panel_min" or "multiswitch_panel_max" end,
sndmin = 90, sndmax = 1e3,
}},
{ID="KRO+",x=53-16, y=128-16, w=32,h=16, tooltip="Направление движения(вверх)",states = {"Train.Buttons.Back","Train.Buttons.0","Train.Buttons.Forward"},varTooltip = function(ent) return ent:GetPackedRatio("ReverserPosition") end,},
{ID="KRO-",x=53-16, y=128, w=32,h=16, tooltip="Направление движения(вниз)",states = {"Train.Buttons.Back","Train.Buttons.0","Train.Buttons.Forward"},varTooltip = function(ent) return ent:GetPackedRatio("ReverserPosition") end,},
{ID = "RingSet",x=127, y=65, radius=16, tooltip = "Звонок",model = {
model = "models/metrostroi_train/81-722/button_black.mdl", z=2,
var="Ring",speed=12,
sndvol = 0.2, snd = function(val) return val and "button_on" or "button_off" end,
sndmin = 90, sndmax = 1e3,
}},
{ID = "Compressor",x=78, y=170, radius=0, model = {
model = "models/metrostroi_train/81-722/tumbler_reversor.mdl",ang = 90, z=8,
getfunc = function(ent) return CompressorPos[ent:GetPackedRatio("CompressorPosition")+1] end,
var="Compressor",speed=3, min=0.1,max=0.75,
sndvol = 0.4, snd = function(val,val2) return val2 == 4 and "multiswitch_panel_max" or not val and "multiswitch_panel_min" or "multiswitch_panel_mid" end,
sndmin = 90, sndmax = 1e3,
}},
{ID="Compressor-",x=78-20, y=170-16, w=20,h=32, tooltip="Компрессоры(-)",states = {"Train.Buttons.Off","Train.Buttons.Auto","Train.Buttons.VTRH1","Train.Buttons.VTRH2","Train.Buttons.VTRAll"},varTooltip = function(ent) return ent:GetPackedRatio("CompressorPosition")/4 end,},
{ID="Compressor+",x=78, y=170-16, w=20,h=32, tooltip="Компрессоры(+)",states = {"Train.Buttons.Off","Train.Buttons.Auto","Train.Buttons.VTRH1","Train.Buttons.VTRH2","Train.Buttons.VTRAll"},varTooltip = function(ent) return ent:GetPackedRatio("CompressorPosition")/4 end,},
{ID="!BrakeCylinder",x=65, y=55,radius=35, tooltip="Тормозной цилиндр",tooltipFunc = function(ent) return Format(Metrostroi.GetPhrase("Train.Buttons.BCPressure"),ent:GetPackedRatio("BCPressure")*6) end},
{ID="!BrakeTrainLine",x=126, y=128,radius=35, tooltip="Красная - тормозная, чёрная - напорная магистраль",tooltipFunc = function(ent) return Format(Metrostroi.GetPhrase("Train.Buttons.BLTLPressure"),ent:GetPackedRatio("TLPressure")*16,ent:GetPackedRatio("BLPressure")*16) end},
}
}
ENT.ButtonMap["PPZ"] = {
pos = Vector(406+0.55,35,27), --446 -- 14 -- -0,5
ang = Angle(0,90,90),
width = 260,
height = 215,
scale = 0.0625,
hide=0.8,
buttons = {
{ID = "SF1Toggle", x=0+15.15*0, y=40+167*0, w=15,h=45, tooltip="SF1:Бортовая сеть (управление)"},
{ID = "SF2Toggle", x=0+15.15*1, y=40+167*0, w=15,h=45, tooltip="SF2:Активная кабина"},
{ID = "SF3Toggle", x=0+15.15*2, y=40+167*0, w=15,h=45, tooltip="SF3:Управление основное"},
{ID = "SF4Toggle", x=0+15.15*3, y=40+167*0, w=15,h=45, tooltip="SF4:Управление резервное"},
{ID = "SF5Toggle", x=0+15.15*4, y=40+167*0, w=15,h=45, tooltip="SF5:Управление РВТБ"},
{ID = "SF6Toggle", x=0+15.15*5, y=40+167*0, w=15,h=45, tooltip="SF6:Питание крана машиниста"},
{ID = "SF7Toggle", x=0+15.15*6, y=40+167*0, w=15,h=45, tooltip="SF7:Двери(управление)"},
{ID = "SF8Toggle", x=0+15.15*7, y=40+167*0, w=15,h=45, tooltip="SF8:БАРС 1"},
{ID = "SF9Toggle", x=0+15.15*8, y=40+167*0, w=15,h=45, tooltip="SF9:БАРС 2"},
{ID = "SF00Toggle", x=0+15.15*9, y=40+167*0, w=15,h=45, tooltip="SF00:"},
{ID = "SF01Toggle", x=0+15.15*10, y=40+167*0, w=15,h=45, tooltip="SF01:"},
{ID = "SF10Toggle", x=0+15.15*11, y=40+167*0, w=15,h=45, tooltip="SF10:БРПИ-М1"},
{ID = "SF11Toggle", x=0+15.15*12, y=40+167*0, w=15,h=45, tooltip="SF11:БРПИ-М2"},
{ID = "SF12Toggle", x=0+15.15*13, y=40+167*0, w=15,h=45, tooltip="SF12:Пожарная система"},
{ID = "SF13Toggle", x=0+15.15*14, y=40+167*0, w=15,h=45, tooltip="SF13:Токоприёмник, короткозамыкатель"},
{ID = "SF02Toggle", x=0+15.15*15, y=40+167*0, w=15,h=45, tooltip="SF02:"},
{ID = "SF14Toggle", x=0+15.15*0, y=40+125*1, w=15,h=45, tooltip="SF14:Радиосвязь 1"},
{ID = "SF15Toggle", x=0+15.15*1, y=40+125*1, w=15,h=45, tooltip="SF15:Радиосвязь 2"},
{ID = "SF16Toggle", x=0+15.15*2, y=40+125*1, w=15,h=45, tooltip="SF16:ЦИС 1 (монитор)"},
{ID = "SF17Toggle", x=0+15.15*3, y=40+125*1, w=15,h=45, tooltip="SF17:ЦИС 2 (ЦИК)"},
{ID = "SF18Toggle", x=0+15.15*4, y=40+125*1, w=15,h=45, tooltip="SF18:ЦИС 3"},
{ID = "SF19Toggle", x=0+15.15*5, y=40+125*1, w=15,h=45, tooltip="SF19:БУКП, УПИ"},
{ID = "SF20Toggle", x=0+15.15*6, y=40+125*1, w=15,h=45, tooltip="SF20:Монитор"},
{ID = "SF21Toggle", x=0+15.15*7, y=40+125*1, w=15,h=45, tooltip="SF21:Ориентация"},
{ID = "SF22Toggle", x=0+15.15*8, y=40+125*1, w=15,h=45, tooltip="SF22:Габаритные огни АБ"},
{ID = "SF23Toggle", x=0+15.15*9, y=40+125*1, w=15,h=45, tooltip="SF23:Фары, габаритные огни"},
{ID = "SF24Toggle", x=0+15.15*10, y=40+125*1, w=15,h=45, tooltip="SF24:СОСД"},
{ID = "SF25Toggle", x=0+15.15*11, y=40+125*1, w=15,h=45, tooltip="SF25:Освещение кабины"},
{ID = "SF26Toggle", x=0+15.15*12, y=40+125*1, w=15,h=45, tooltip="SF26:Кондиционер кабины"},
{ID = "SF27Toggle", x=0+15.15*13, y=40+125*1, w=15,h=45, tooltip="SF27:Стеклоочиститель, омыватель, гудок"},
{ID = "SF03Toggle", x=0+15.15*14, y=40+125*1, w=15,h=45, tooltip="SF03:"},
{ID = "SF04Toggle", x=0+15.15*15, y=40+125*1, w=15,h=45, tooltip="SF04:"},
}
}
for i,button in pairs(ENT.ButtonMap.PPZ.buttons) do
--if button.ID:sub(1,2) == "SF" then
button.model = {
model = "models/metrostroi_train/81-722/av1.mdl", z=-8,
var=button.ID:Replace("Toggle",""),speed=8, ang=Angle(90,0,180),
min=0, max=1,
sndvol = 0.2, snd = function(val) return val and "sf_on" or "sf_off" end,
sndmin = 90, sndmax = 1e3,
}
--end
end
ENT.ButtonMap["PVZ"] = {
pos = Vector(-460.5,28,-12), --446 -- 14 -- -0,5
ang = Angle(0,90-11,90),
width = 137,
height = 450,
scale = 0.0625,
hideseat=0.2,
buttons = {
{ID = "SF31Toggle", x=0+15.15*0, y=40+167*0, w=15,h=45, tooltip="SF31:Поездной питающий провод"},
{ID = "1:SF31Toggle", x=0+15.15*1, y=40+167*0, w=15,h=45, tooltip="SF31:Поездной питающий провод"},
{ID = "SF32Toggle", x=0+15.15*2, y=40+167*0, w=15,h=45, tooltip="SF32:Бортовая сеть управление"},
{ID = "SF33Toggle", x=0+15.15*3, y=40+167*0, w=15,h=45, tooltip="SF33:Питание цепей управленяи"},
{ID = "SF34Toggle", x=0+15.15*4, y=40+167*0, w=15,h=45, tooltip="SF34:ЦИС левый"},
{ID = "SF35Toggle", x=0+15.15*5, y=40+167*0, w=15,h=45, tooltip="SF35:ЦИС правый"},
{ID = "SF36Toggle", x=0+15.15*6, y=40+167*0, w=15,h=45, tooltip="SF36:Бортовая сигнализация"},
{ID = "SF37Toggle", x=0+15.15*7, y=40+167*0, w=15,h=45, tooltip="SF37:Отжатие токоприёмников"},
{ID = "SF38Toggle", x=0+15.15*8, y=40+167*0, w=15,h=45, tooltip="SF38:Резерв"},
{ID = "SF41Toggle", x=0+15.15*0, y=40+167*1, w=15,h=45, tooltip="SF41:Двери открытие левые"},
{ID = "SF42Toggle", x=0+15.15*1, y=40+167*1, w=15,h=45, tooltip="SF42:Двери открытие правые"},
{ID = "SF43Toggle", x=0+15.15*2, y=40+167*1, w=15,h=45, tooltip="SF43:Двери закрытие"},
{ID = "SF44Toggle", x=0+15.15*3, y=40+167*1, w=15,h=45, tooltip="SF44:Двери торцевые"},
{ID = "SF45Toggle", x=0+15.15*4, y=40+167*1, w=15,h=45, tooltip="SF45:Освещение салона питание"},
{ID = "SF46Toggle", x=0+15.15*5, y=40+167*1, w=15,h=45, tooltip="SF46:Освещение салона аварийное"},
{ID = "SF47Toggle", x=0+15.15*6, y=40+167*1, w=15,h=45, tooltip="SF47:Вентиляция 1 группа"},
{ID = "SF48Toggle", x=0+15.15*7, y=40+167*1, w=15,h=45, tooltip="SF48:Вентиляция 2 группа"},
{ID = "SF49Toggle", x=0+15.15*8, y=40+167*1, w=15,h=45, tooltip="SF49:Счётчик"},
{ID = "SF51Toggle", x=0+15.15*0, y=40+167*2, w=15,h=45, tooltip="SF51:БУВ"},
{ID = "SF52Toggle", x=0+15.15*1, y=40+167*2, w=15,h=45, tooltip="SF52:БОДВ"},
{ID = "SF53Toggle", x=0+15.15*2, y=40+167*2, w=15,h=45, tooltip="SF53:ПСН"},
{ID = "SF54Toggle", x=0+15.15*3, y=40+167*2, w=15,h=45, tooltip="SF54:Осушитель"},
{ID = "SF55Toggle", x=0+15.15*4, y=40+167*2, w=15,h=45, tooltip="SF55:БУФТ"},
{ID = "SF56Toggle", x=0+15.15*5, y=40+167*2, w=15,h=45, tooltip="SF56:Инвертор инвертор"},
{ID = "SF57Toggle", x=0+15.15*6, y=40+167*2, w=15,h=45, tooltip="SF57:Инвертор обогрев"},
{ID = "SF58Toggle", x=0+15.15*7, y=40+167*2, w=15,h=45, tooltip="SF58:ЦУВ основное"},
{ID = "SF59Toggle", x=0+15.15*8, y=40+167*2, w=15,h=45, tooltip="SF59:ЦУВ резервное"},
}
}
for i,button in pairs(ENT.ButtonMap.PVZ.buttons) do
--if button.ID:sub(1,2) == "SF" then
button.model = {
model = "models/metrostroi_train/81-722/av1.mdl", z=-8,
var=button.ID:Replace("Toggle",""):Replace("1:",""),speed=16, ang=Angle(90,0,180),
min=0, max=1,
sndvol = 0.2, snd = function(val) return val and "sf_on" or "sf_off" end,
sndmin = 90, sndmax = 1e3,
}
--end
end
ENT.ButtonMap["PPZB"] = {
pos = Vector(406+0.2,45.4,3.2), --446 -- 14 -- -0,5
ang = Angle(0,90,90),
width = 130,
height = 110,
scale = 0.0625,
hide=0.8,
buttons = {
{ID = "PSNToggleSet", x=24+40*0 , y=26 + 60*0, radius=20, tooltip="Зарядка АКБ", model = {
model = "models/metrostroi_train/81-722/button_blue.mdl",
var="PSNToggle",speed=12, min=0,max=0.6,
lamp = {model = "models/metrostroi_train/81-722/lamp_blue.mdl",var="PSNEnabled",z=0,anim=true},
sndvol = 0.2, snd = function(val) return val and "button_on" or "button_off" end,
sndmin = 90, sndmax = 1e3,
}},
{ID = "BattOnSet", x=24+40*1 , y=26 + 60*0, radius=20, tooltip="Включение источника питания бортовой сети", model = {
model = "models/metrostroi_train/81-722/button_green.mdl",
var="BattOn",speed=12, min=0,max=0.6,
lamp = {model = "models/metrostroi_train/81-722/lamp_green.mdl",var="BattOnL",z=0,anim=true,
lcolor=Color(60,255,40),lz = 12,lbright=3,lfov=130,lfar=16,lnear=8,lshadows=0,},
sndvol = 0.2, snd = function(val) return val and "button_on" or "button_off" end,
sndmin = 90, sndmax = 1e3,
sprite = {bright=0.4,size=0.25,scale=0.03,vscale=0.02,color=Color(60,255,40),z=3},
tooltipFunc = function(ent) return ent:GetPackedBool("BattOnL") and Metrostroi.GetPhrase("Train.Buttons.BattOn") end
}},
{ID = "BattOffSet", x=24+40*2 , y=26 + 60*0, radius=20, tooltip="Отключение источника питания бортовой сети", model = {
model = "models/metrostroi_train/81-722/button_yellow.mdl",
var="BattOff",speed=12, min=0,max=0.6,
lamp = {model = "models/metrostroi_train/81-722/lamp_yellow.mdl",var="BattOffL",z=0,anim=true,
lcolor=Color(255,255,60),lz = 12,lbright=3,lfov=130,lfar=16,lnear=8,lshadows=0,},
sndvol = 0.2, snd = function(val) return val and "button_on" or "button_off" end,
sndmin = 90, sndmax = 1e3,
sprite = {bright=0.4,size=0.25,scale=0.03,vscale=0.02,color=Color(255,255,60),z=3},
tooltipFunc = function(ent) return ent:GetPackedBool("BattOffL") and Metrostroi.GetPhrase("Train.Buttons.BattOff") end
}},
{ID = "TorecDoorUnlockSet", x=24+40*0 , y=26 + 60*1, radius=20, tooltip="Разблокировка торцевых дверей", model = {
model = "models/metrostroi_train/81-722/button_black.mdl",
var="TorecDoorUnlock",speed=12, min=0,max=0.6,
sndvol = 0.2, snd = function(val) return val and "button_on" or "button_off" end,
sndmin = 90, sndmax = 1e3,
}},
{ID = "SCEnable", x=24+40*1 , y=26 + 60*1, radius=20, tooltip="Короткозамыкатель", model = {
model = "models/metrostroi_train/81-722/button_yellow.mdl",
lamp = {model = "models/metrostroi_train/81-722/lamp_yellow.mdl",var="SCEnable",
lcolor=Color(255,255,60),lz = 12,lbright=3,lfov=130,lfar=16,lnear=8,lshadows=0}
}},
{ID = "SOSD", x=24+40*2 , y=26 + 60*1, radius=20, tooltip="СОСД", model = {
model = "models/metrostroi_train/81-722/button_white.mdl",
lamp = {model = "models/metrostroi_train/81-722/lamp_black.mdl",var="SOSDLamp",
lcolor=Color(255,255,255),lz = 12,lbright=3,lfov=130,lfar=16,lnear=8,lshadows=0},
sprite = {bright=0.4,size=0.25,scale=0.03,vscale=0.02,color=Color(255,255,255),z=3}
}},
}
}
ENT.ButtonMap["PVM"] = {
pos = Vector(406.5,32.4,-6), --446 -- 14 -- -0,5
ang = Angle(0,90,90),
width = 325,
height = 120,
scale = 0.0625,
hide=0.8,
buttons = {
{ID = "PassLightToggle", x=20+47*0, y=34+65*0, radius=14, tooltip="Освещение салона"},
{ID = "PassVent", x=20+47*1, y=34+65*0, radius=0},
{ID="PassVent-",x=20+47*1-16, y=34+65*0-16, w=16,h=32, tooltip="Вентиляция салона(-)",varTooltip = function(ent) return ent:GetPackedRatio("PassVent") end,states = {"Train.Buttons.VentEmer","Train.Buttons.Off","Train.Buttons.VentAuto","Train.Buttons.Vent1/2","Train.Buttons.VentAll"}},
{ID="PassVent+",x=20+47*1, y=34+65*0-16, w=16,h=32, tooltip="Вентиляция салона(+)",varTooltip = function(ent) return ent:GetPackedRatio("PassVent") end,states = {"Train.Buttons.VentEmer","Train.Buttons.Off","Train.Buttons.VentAuto","Train.Buttons.Vent1/2","Train.Buttons.VentAll"}},
--{ID = "Switch3", x=20+48*2, y=15+70*0, radius=15, tooltip="SF1:"},
{ID = "VKFToggle", x=20+47*3, y=34+65*0, radius=14, tooltip="ВКФ"},
{ID = "ParkingBrakeToggle", x=20+47*4, y=34+65*0, radius=14, tooltip="Стояночный тормоз"},
{ID = "VRDToggle", x=20+47*5, y=34+65*0, radius=14, tooltip="ВРД"},
{ID = "SOSDEnableToggle", x=20+47*6, y=34+65*0, radius=14, tooltip="СОСД"},
{ID = "VRU", x=20+47*0, y=34+65*1, radius=0},
{ID="VRU-",x=20+47*0-16, y=34+65*1-16, w=16,h=32, tooltip="ВРУ(-)",varTooltip = function(ent) return ent:GetPackedRatio("VRU") end,states = {"Train.Buttons.VRUAH","Train.Buttons.0","Train.Buttons.VRUOn"}},
{ID="VRU+",x=20+47*0, y=34+65*1-16, w=16,h=32, tooltip="ВРУ(+)",varTooltip = function(ent) return ent:GetPackedRatio("VRU") end,states = {"Train.Buttons.VRUAH","Train.Buttons.0","Train.Buttons.VRUOn"}},
{ID = "VADToggle", x=20+47*1, y=34+65*1, radius=15, tooltip="Движение без контроля дверей"},
{ID = "VAHToggle", x=20+47*2, y=34+65*1, radius=15, tooltip="Движение без педали бдительности"},
{ID = "EmergencyRadioPowerToggle", x=20+47*3, y=34+65*1, radius=15, tooltip="Аварийное питание радиостанции"},
{ID = "BARSMode", x=20+47*4, y=34+65*1, radius=0},
{ID="BARSMode-",x=20+47*4-16, y=34+65*1-16, w=16,h=32, tooltip="Режимы БАРС(влево)",varTooltip = function(ent) return ent:GetPackedRatio("BARSMode") end,states = {"Train.Buttons.BARS1","Train.Buttons.0","Train.Buttons.BARS2"}},
{ID="BARSMode+",x=20+47*4, y=34+65*1-16, w=16,h=32, tooltip="Режимы БАРС(вправо)",varTooltip = function(ent) return ent:GetPackedRatio("BARSMode") end,states = {"Train.Buttons.BARS1","Train.Buttons.0","Train.Buttons.BARS2"}},
{ID = "PantSC", x=20+47*5, y=34+65*1, radius=0},
{ID="PantSC-",x=20+47*5-16, y=34+65*1-16, w=16,h=32, tooltip="Токоприёмники и короткозамыкатель(-)",varTooltip = function(ent) return ent:GetPackedRatio("PantSC") end,states = {"Train.Buttons.PantSC","Train.Buttons.VTRAll","Train.Buttons.VTRH1","Train.Buttons.VTRH2","Train.Buttons.Off"}},
{ID="PantSC+",x=20+47*5, y=34+65*1-16, w=16,h=32, tooltip="Токоприёмники и короткозамыкатель(+)",varTooltip = function(ent) return ent:GetPackedRatio("PantSC") end,states = {"Train.Buttons.PantSC","Train.Buttons.VTRAll","Train.Buttons.VTRH1","Train.Buttons.VTRH2","Train.Buttons.Off"}},
{ID = "RCARSToggle", x=20+47*6, y=34+65*1, radius=15, tooltip="РЦ АРС"},
}
}
local spec = {
PassLight = {0.6,0.5},
PassVent = {0.2,0.8,true},
SOSDEnable = {0.6,0.5},
VRU = {0.35,0.65,true},
BARSMode = {0.35,0.65,true},
PantSC = {0.34,0.995,true},
RCARS = {0.6,0.5},
}
local snds = {
PassVent = 4,
BARSMode = 3,
PantSC = 4,
}
local plombs = {
["VRU"] = "VRUPl",
["VRU-"] = "VRUPl",
["VRU+"] = "VRUPl",
["VADToggle"] = "VADPl",
["VAHToggle"] = "VAHPl",
["EmergencyRadioPowerToggle"] = "EmergencyRadioPowerPl",
["BARSMode"] = "BARSModePl",
["BARSMode-"] = "BARSModePl",
["BARSMode+"] = "BARSModePl",
["PantSC"] = "PantSCPl",
["PantSC-"] = "PantSCPl",
["PantSC+"] = "PantSCPl",
["RCARSToggle"] = "RCARSPl",
}
for i,button in pairs(ENT.ButtonMap.PVM.buttons) do
if not button.ID:find("[+-]$") then
local tbl = spec[button.ID:Replace("Toggle","")]
button.model = {
model = "models/metrostroi_train/81-722/tumbler_reversor.mdl",
var=button.ID:Replace("Toggle",""),
speed=8, min=0.5,max=0.6, z=6, ang=-182
}
if tbl then
button.model.min = tbl[1]
button.model.max = tbl[2]
button.model.speed = 2/math.abs(tbl[1]-tbl[2])
if tbl[3] then
local id = button.model.var
button.model.getfunc = function(ent) return ent:GetPackedRatio(id) end
end
end
local stbl = snds[button.ID:Replace("Toggle","")]
if stbl then
local mx = stbl
button.model.snd = function(val,val2) return val2 == mx and "multiswitch_panel_max" or not val and "multiswitch_panel_min" or "multiswitch_panel_mid" end
elseif tbl and tbl[1] == 0.6 then
button.model.snd = function(val) return val and "multiswitch_panel_min" or "multiswitch_panel_max" end
else
button.model.snd = function(val) return val and "multiswitch_panel_max" or "multiswitch_panel_min" end
end
button.model.sndvol = 0.5
button.model.sndmin = 90
button.model.sndmax = 1e3
end
if plombs[button.ID] then
if not button.model then
button.model = {plomb = {var=plombs[button.ID], ID=plombs[button.ID], }}
else
button.model.plomb = {model = "models/metrostroi_train/81/plomb_b.mdl",ang=-90,x=0,y=40,z=-10,var=plombs[button.ID], ID=plombs[button.ID],}
end
end
end
ENT.ButtonMap["BTO"] = {
pos = Vector(458,56.5,-61), --446 -- 14 -- -0,5
ang = Angle(0,0,0),
width = 270,
height = 50,
scale = 0.0625,
hideseat=0.2,
buttons = {
{ID = "K29Toggle", x=24, y=26, radius=25, tooltip="КРМШ", model = {
model = "models/metrostroi_train/81-722/81-722_kran_krmh.mdl", ang=Angle(0,0,180),
var="K29",speed=4, max=0.5,
states={"Train.Buttons.Closed","Train.Buttons.Opened"}
}},
{ID = "K9Toggle", x=240, y=15, radius=25, tooltip="РВТБ", model = {
model = "models/metrostroi_train/81-722/81-722_kran_krmh.mdl", ang=Angle(0,0,180),
plomb = {var="K9Pl", ID="K9Pl", },
var="K9",speed=4, min=0.5,max=0,
states={"Train.Buttons.Closed","Train.Buttons.Opened"}
}},
}
}
ENT.ButtonMap["Isolations"] = {
pos = Vector(407.25,36,-61), --446 -- 14 -- -0,5
ang = Angle(0,90,0),
width = 270,
height = 50,
scale = 0.0625,
hideseat=0.2,
buttons = {
{ID = "FrontBrakeLineIsolationToggle", x=21, y=28, radius=25, tooltip="Концевой кран тормозной магистрали", model = {
model = "models/metrostroi_train/81-722/81-722_kran_tm.mdl", ang=Angle(0,0,180),
var="FrontBrakeLineIsolation",speed=4, min=0.25,max=0,
states={"Train.Buttons.Opened","Train.Buttons.Closed"}
}},
{ID = "FrontTrainLineIsolationToggle", x=219, y=23, radius=25, tooltip="Концевой кран напорной магистрали", model = {
model = "models/metrostroi_train/81-722/81-722_kran_nm.mdl", ang=Angle(0,0,180),
var="FrontTrainLineIsolation",speed=4, min=0.25,max=0,
states={"Train.Buttons.Opened","Train.Buttons.Closed"}
}},
}
}
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-18, -30, -69),
ang = Angle(-15,90,0),
hide = 2,
}
ENT.ClientProps["RearBrake"] = {--
model = "models/metrostroi_train/bogey/disconnect_valve_red.mdl",
pos = Vector(-450-18, 30, -69),
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["StopKran"] = {
pos = Vector(419,-56.5,5), --446 -- 14 -- -0,5
ang = Angle(0,95,90),
width = 190,
height = 200,
scale = 0.0625,
buttons = {
{ID = "UAVAToggle", x=0, y=0, w=95,h=200, tooltip="Выключатель автостопа",model = {
plomb = {var="UAVAPl", ID="UAVAPl", },
}},
{ID = "EmergencyBrakeValveToggle", x=95, y=0, w=95,h=200, tooltip="Стопкран", tooltip="",tooltip="",states={"Train.Buttons.Closed","Train.Buttons.Opened"},var="EmergencyBrakeValve"},
}
}
ENT.ClientProps["UAVA"] = {
model = "models/metrostroi_train/81-722/81-722_kran.mdl",
pos = Vector(418.9,-56.14,1.5),
ang = Angle(0,-111,0),
hide=0.8,
}
ENT.ClientProps["EmergencyBrakeValve"] = {
model = "models/metrostroi_train/81-722/81-722_autostop.mdl",
pos = Vector(418.25,-49.2,1.3),
ang = Angle(0,-90,0),
hide=0.8,
}
ENT.ButtonMap["Lighting"] = {
pos = Vector(458.03,46,-23), --446 -- 14 -- -0,5
ang = Angle(0,-90,90),
width = 205,
height = 50,
scale = 0.0625,
hideseat=0.2,
buttons = {
{ID = "CabinLightToggle", x=70, y=30, radius=nil, model = {
model = "models/metrostroi_train/81-722/button_rot.mdl", ang=45,
getfunc = function(ent) return ent:GetPackedRatio("CabinLight") end,
var="CabinLight",speed=4.1, min=0,max=0.27,
sndvol = 0.4, snd = function(val,val2) return val2 == 1 and "multiswitch_panel_mid" or val and "multiswitch_panel_min" or "multiswitch_panel_max" end,
sndmin = 90, sndmax = 1e3,
}},
{ID="CabinLight-",x=60-8, y=15, w=20,h=30, tooltip="Освещение кабины(влево)"},
{ID="CabinLight+",x=60+8, y=15, w=20,h=30, tooltip="Освещение кабины(вправо)"},
{ID = "PanelLightToggle", x=140, y=30, radius=15, tooltip="Освещение пульта", model = {
model = "models/metrostroi_train/81-722/button_rot.mdl", ang=45,
var="PanelLight",speed=8.2, min=0,max=0.27,
sndvol = 0.4, snd = function(val,val2) return val and "multiswitch_panel_max" or "multiswitch_panel_min" end,
sndmin = 90, sndmax = 1e3,
}},
}
}
ENT.ButtonMap["HelperLamps"] = {
pos = Vector(476,22.4,-12),
ang = Angle(0,-90,66.5),
width = 125,
height = 40,
scale = 0.0625,
buttons = {
{ID="!LRD",x=0, y=5,w=15,h=10, tooltip="ЛРД: Лампа разрешающая движение(разрешение движения под 0)",model = {
name="lamp_lrd",lamp = {speed=10,model = "models/metrostroi_train/81-722/lamp_lrd.mdl",z=7.7,ang=Angle(0,0,90),var="LampLRD"},
sprite = {bright=0.3,size=0.15,scale=0.03,vscale=0.02,color=Color(20,250,20),z=7.7}
}},
{ID="!LPT",x=21*1, y=5,w=15,h=10, tooltip="ЛПТ: Лампа включение пневмотормоза",model = {
name="lamp_lpt",lamp = {speed=10,model = "models/metrostroi_train/81-722/lamp_lpt.mdl",z=7.7,ang=Angle(0,0,90),var="LampLPT"},
sprite = {bright=0.3,size=0.15,scale=0.03,vscale=0.02,color=Color(250,250,20),z=7.7}
}},
{ID="!RS",x=21*2, y=5,w=15,h=10, tooltip="Р/С: Лампа аварийного питания радиостанции",model = {
name="lamp_rc",lamp = {speed=10,model = "models/metrostroi_train/81-722/lamp_rc.mdl",z=7.7,ang=Angle(0,0,90),var="LampRC"},
sprite = {bright=0.3,size=0.15,scale=0.03,vscale=0.02,color=Color(250,120,20),z=7.7}
}},
{ID="!AVS",x=21*3, y=5,w=15,h=10, tooltip="АВС Лампа низкого давления ТМ",model = {
name="lamp_abc",lamp = {speed=10,model = "models/metrostroi_train/81-722/lamp_abc.mdl",z=7.7,ang=Angle(0,0,90),var="LampAVS"},
sprite = {bright=0.3,size=0.15,scale=0.03,vscale=0.02,color=Color(250,120,20),z=7.7}
}},
{ID="!LSD",x=21*4, y=5,w=15,h=10, tooltip="ЛСД: Лампа сигнализации закрытия дверей",model = {
name="lamp_lsd",lamp = {speed=10,model = "models/metrostroi_train/81-722/lamp_lsd.mdl",z=7.7,ang=Angle(0,0,90),var="LampSD"},
sprite = {bright=0.3,size=0.15,scale=0.03,vscale=0.02,color=Color(250,250,250),z=7.7}
}},
{ID="!RU",x=21*5, y=5,w=15,h=10, tooltip="РУ: Лампа выключения Реле Управления",model = {
name="lamp_ru",lamp = {speed=10,model = "models/metrostroi_train/81-722/lamp_ru.mdl",z=7.7,ang=Angle(0,0,90),var="LampRU"},
sprite = {bright=0.3,size=0.15,scale=0.03,vscale=0.02,color=Color(250,120,20),z=7.7}
}},
{ID="!04",x=0, y=23,w=15,h=10, tooltip="НЧ: Лампа отсутствия частоты (0км\\ч)",model = {
name="lamp_nch",lamp = {speed=10,model = "models/metrostroi_train/81-722/lamp_nch.mdl",z=7.7,ang=Angle(0,0,90),var="Lamp04"},
sprite = {bright=0.3,size=0.15,scale=0.03,vscale=0.02,color=Color(250,120,20),z=7.7}
}},
{ID="!00",x=21*1, y=23,w=15,h=10, tooltip="0: Лампа ограничения в 0км\\ч",model = {
name="lamp_0",lamp = {speed=10,model = "models/metrostroi_train/81-722/lamp_0.mdl",z=7.7,ang=Angle(0,0,90),var="Lamp0"},
sprite = {bright=0.3,size=0.15,scale=0.03,vscale=0.02,color=Color(250,120,20),z=7.7}
}},
{ID="!40",x=21*2, y=23,w=15,h=10, tooltip="40: Лампа ограничения в 40км\\ч",model = {
name="lamp_40",lamp = {speed=10,model = "models/metrostroi_train/81-722/lamp_40.mdl",z=7.7,ang=Angle(0,0,90),var="Lamp40"},
sprite = {bright=0.3,size=0.15,scale=0.03,vscale=0.02,color=Color(250,250,20),z=7.7}
}},
{ID="!60",x=21*3, y=23,w=15,h=10, tooltip="60 Лампа ограничения в 60км\\ч",model = {
name="lamp_60",lamp = {speed=10,model = "models/metrostroi_train/81-722/lamp_60.mdl",z=7.7,ang=Angle(0,0,90),var="Lamp60"},
sprite = {bright=0.3,size=0.15,scale=0.03,vscale=0.02,color=Color(20,250,20),z=7.7}
}},
{ID="!70",x=21*4, y=23,w=15,h=10, tooltip="70: Лампа ограничения в 70км\\ч",model = {
name="lamp_70",lamp = {speed=10,model = "models/metrostroi_train/81-722/lamp_70.mdl",z=7.7,ang=Angle(0,0,90),var="Lamp70"},
sprite = {bright=0.3,size=0.15,scale=0.03,vscale=0.02,color=Color(20,250,20),z=7.7}
}},
{ID="!80",x=21*5, y=23,w=15,h=10, tooltip="80: Лампа ограничения в 80км\\ч",model = {
name="lamp_80",lamp = {speed=10,model = "models/metrostroi_train/81-722/lamp_80.mdl",z=7.7,ang=Angle(0,0,90),var="Lamp80"},
sprite = {bright=0.3,size=0.15,scale=0.03,vscale=0.02,color=Color(20,250,20),z=7.7}
}},
}
}
ENT.ButtonMap["PassengerDoor"] = {
pos = Vector(380,-46,40), --28
ang = Angle(0,90,90),
width = 730,
height = 2000,
scale = 0.1/2,
buttons = {
{ID = "PassengerDoor",x=0,y=0,w=730,h=2000, tooltip="Дверь в кабину машиниста из салона\nPass door", model = {
var="PassengerDoor",sndid="door_cab_m",
sndvol = 1, snd = function(val) return val and "door_cab_open" or "door_cab_close" end,
sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0),
noTooltip = true,
}},
}
}
ENT.ButtonMap["PassengerDoor1"] = {
pos = Vector(380,-46+36.5,40), --28
ang = Angle(0,-90,90),
width = 730,
height = 2000,
scale = 0.1/2,
buttons = {
{ID = "PassengerDoor",x=0,y=0,w=730,h=2000, tooltip="Дверь в кабину машиниста из салона\nPass door"},
}
}
ENT.ButtonMap["CabinDoorL"] = {
pos = Vector(420,64,40),
ang = Angle(0,0,90),
width = 642,
height = 2000,
scale = 0.1/2,
buttons = {
{ID = "CabinDoorLeft",x=0,y=0,w=642,h=2000, tooltip="Дверь в кабину машиниста\nCabin door", model = {
var="CabinDoorLeft",sndid="door_cab_l",
sndvol = 1, snd = function(val) return val and "door_cab_open" or "door_cab_close" end,
sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0),
noTooltip = true,
}},
}
}
ENT.ButtonMap["CabinDoorR"] = {
pos = Vector(451,-64,40),
ang = Angle(0,180,90),
width = 642,
height = 2000,
scale = 0.1/2,
buttons = {
{ID = "CabinDoorRight",x=0,y=0,w=642,h=2000, tooltip="Дверь в кабину машиниста\nCabin door", model = {
var="CabinDoorRight",sndid="door_cab_r",
sndvol = 1, snd = function(val) return val and "door_cab_open" or "door_cab_close" end,
sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0),
noTooltip = true,
}},
}
}
ENT.ButtonMap["RearDoor"] = {
pos = Vector(-468,-17,41.3), --28
ang = Angle(0,90,90),
width = 680,
height = 2000,
scale = 0.1/2,
buttons = {
{ID = "RearDoor",x=0,y=0,w=680,h=2000, tooltip="Задняя дверь\nFront door", model = {
var="RearDoor",sndid="door_cab_t",
sndvol = 1, snd = function(val) return val and "door_cab_open" or "door_cab_close" end,
sndmin = 90, sndmax = 1e3, sndang = Angle(-90,0,0),
noTooltip = true,
}},
}
}
for i=0,4 do
ENT.ClientProps["TrainNumberL"..i] = {
model = "models/metrostroi_train/common/bort_numbers.mdl",
pos = Vector(60+i*6.6-4*6.6/2,66.3,18),
ang = Angle(0,180,-5),
skin=0,
hide = 1.5,
callback = function(ent)
ent.WagonNumber = false
end,
}
end
for i=0,4 do
ENT.ClientProps["TrainNumberR"..i] = {
model = "models/metrostroi_train/common/bort_numbers.mdl",
pos = Vector(53-i*6.6+4*6.6/2,-66.3,18),
ang = Angle(0,0,-5),
skin=0,
hide = 1.5,
callback = function(ent)
ent.WagonNumber = false
end,
}
end
--[[ ENT.ClientProps["controller"] = {
model = "models/metrostroi_train/81-722/kv.mdl",
pos = Vector(466.7,0.5,-16.22),
ang = Angle(0,-90,13),
hideseat = 0.2,
}--]]
ENT.ClientProps["controller"] = {
model = "models/metrostroi_train/81-722/81-722_controller.mdl",
pos = Vector(466.7,0.2,-16.9),
ang = Angle(0,90,-6),
hide = 2,
}
ENT.ClientProps["km013"] = {
model = "models/metrostroi_train/81-722/km013.mdl",
pos = Vector(461.15,-9.6,-20.9),
ang = Angle(30,-13,90),
hideseat = 0.2,
}
ENT.ClientProps["PB"] = {
model = "models/metrostroi_train/81-720/720_pb.mdl",
pos = Vector(477.101044,3.367028,-35.271423),
ang = Angle(0.000000,-90.000000,7.500821),
hideseat = 0.2,
}
if not ENT.ClientSounds["br_013"] then ENT.ClientSounds["br_013"] = {} end
table.insert(ENT.ClientSounds["br_013"],{"km013",function(ent,_,var) return "br_013" end,0.7,1,50,1e3,Angle(-90,0,0)})
if not ENT.ClientSounds["PB"] then ENT.ClientSounds["PB"] = {} end
table.insert(ENT.ClientSounds["PB"],{"PB",function(ent,var) return var > 0 and "pb_on" or "pb_off" end,0.5,1,50,1e3,Angle(-90,0,0)})
ENT.ClientProps["brake_cylinder"] = {
model = "models/metrostroi_train/81-722/arrow_b.mdl",
pos = Vector(476.615895,-7.037693,-7.269770),
ang = Angle(65.500000,-180.000000,24.549999),
hideseat = 0.2,
}
ENT.ClientProps["train_line"] = {
model = "models/metrostroi_train/81-722/arrow_b.mdl",
pos = Vector(473.217255+0.08,-9.719269,-11.526619),
ang = Angle(65.500000,-180.000000,24.549999),
hideseat = 0.2,
}
ENT.ClientProps["brake_line"] = {
model = "models/metrostroi_train/81-722/arrow_r.mdl",
pos = Vector(473.199066+0.08,-9.710060,-11.518258),
ang = Angle(65.500000,-180.000000,24.549999),
hideseat = 0.2,
}
ENT.ClientProps["volt_lv"] = {
model = "models/metrostroi_train/81-710/ezh3_voltages.mdl",
pos = Vector(407.372620,6.614372,16.246759),
hideseat = 0.2,
ang = Angle(35,90.000000,90.000000),
}
ENT.ClientProps["volt_hv"] = {
model = "models/metrostroi_train/81-710/ezh3_voltages.mdl",
pos = Vector(407.372620,6.614372,11.339066),
ang = Angle(35,90.000000,90.000000),
hideseat = 0.2,
}
ENT.ClientProps["salon"] = {
model = "models/metrostroi_train/81-722/722_salon1.mdl",
pos = Vector(0,0,0),
ang = Angle(0,0,0),
hide=2,
}
ENT.ClientProps["cabine"] = {
model = "models/metrostroi_train/81-722/722_cabine.mdl",
pos = Vector(0,0,0),
ang = Angle(0,0,0),
hide=2,
}
ENT.ClientProps["led"] = {
model = "models/metrostroi_train/81-722/led_reflect.mdl",
pos = Vector(0,0,0),
ang = Angle(0,0,0),
hide=2,
}
ENT.ClientProps["underwagon"] = {
model = "models/metrostroi_train/81-722/722_underwagon.mdl",
pos = Vector(0,0,0),
ang = Angle(0,0,0),
hide=2,
}
ENT.ClientProps["sarmat"] = {
model = "models/metrostroi_train/81-722/722_sarmat_l.mdl",
pos = Vector(0,0,0),
ang = Angle(0,0,0),
hide = 1.5,
callback = function(ent)
ent.PassSchemesDone = false
end,
}
ENT.ClientProps["sarmatr"] = {
model = "models/metrostroi_train/81-722/722_sarmat_r.mdl",
pos = Vector(0,0,0),
ang = Angle(0,0,0),
hide = 1.5,
callback = function(ent)
ent.PassSchemesDone = false
end,
}
ENT.ClientProps["HeadLights"] = {
model = "models/metrostroi_train/81-722/722_headlight.mdl",
pos = Vector(0,0,0),
ang = Angle(0,0,0),
nohide=true,
}
ENT.ClientProps["HeadLightsH"] = {
model = "models/metrostroi_train/81-722/722_headlight_half.mdl",
pos = Vector(0,0,0),
ang = Angle(0,0,0),
nohide=true,
}
ENT.ClientProps["RedLights"] = {
model = "models/metrostroi_train/81-722/722_hred.mdl",
pos = Vector(0,0,0),
ang = Angle(0,0,0),
nohide=true,
}
for i=1,4 do
ENT.ClientProps["led_l_f"..i] = {
model = "models/metrostroi_train/81-722/722_led_l_r.mdl",
pos = Vector((i-1)*9.15,0,0),
ang = Angle(0,0,0),
skin=0,
hideseat = 1.5,
}
ENT.ClientProps["led_l_b"..i] = {
model = "models/metrostroi_train/81-722/722_led_l.mdl",
pos = Vector(0.1-(i-1)*9.15,0,0),
ang = Angle(0,0,0),
skin=0,
hideseat = 1.5,
}
ENT.ClientProps["led_r_f"..i] = {
model = "models/metrostroi_train/81-722/722_led_r.mdl",
pos = Vector(-0.2+(i-1)*9.15,0,0),
ang = Angle(0,0,0),
skin=0,
hideseat = 1.5,
}
ENT.ClientProps["led_r_b"..i] = {
model = "models/metrostroi_train/81-722/722_led_r_r.mdl",
pos = Vector(-0.2-(i-1)*9.15,0,0),
ang = Angle(0,0,0),
skin=0,
hideseat = 1.5,
}
end
ENT.ClientProps["doorl_l"] = {
model = "models/metrostroi_train/81-722/722_doorlamp_l.mdl",
pos = Vector(0,0,0),
ang = Angle(0,0,0),
hide = 2,
}
ENT.ClientProps["doorl_r"] = {
model = "models/metrostroi_train/81-722/722_doorlamp_r.mdl",
pos = Vector(0,0,0),
ang = Angle(0,0,0),
hide = 2,
}
ENT.ClientProps["bortlamp_lsd"] = {
model = "models/metrostroi_train/81-722/722_bortlamp1.mdl",
pos = Vector(0,0,0),
ang = Angle(0,0,0),
nohide = true,
}
ENT.ClientProps["bortlamp_pneumo"] = {
model = "models/metrostroi_train/81-722/722_bortlamp2.mdl",
pos = Vector(0,0,0),
ang = Angle(0,0,0),
nohide = true,
}
ENT.ClientProps["bortlamp_bv"] = {
model = "models/metrostroi_train/81-722/722_bortlamp3.mdl",
pos = Vector(0,0,0),
ang = Angle(0,0,0),
nohide = true,
}
ENT.ClientProps["fireextinguisher"] = {
model = "models/metrostroi_train/81-502/fireextinguisher.mdl",
pos = Vector(64,6,-8),
ang = Angle(0,0,0),
hideseat = 1,
}
ENT.ClientProps["lamps_salon"] = {
model = "models/metrostroi_train/81-722/722_lamps_full.mdl",
pos = Vector(0,0,0),
ang = Angle(0,0,0),
hide = 1.5,
}
ENT.ClientProps["lamps_cab_e"] = {
model = "models/metrostroi_train/81-722/722_lamps_cab1.mdl",
pos = Vector(0,0,-0.01),
ang = Angle(0,0,0),
hideseat = 0.8,
}
ENT.ClientProps["lamps_cab_f"] = {
model = "models/metrostroi_train/81-722/722_lamps_cab2.mdl",
pos = Vector(0,0,-0.01),
ang = Angle(0,0,0),
hideseat = 0.8,
}
ENT.ClientProps["rvs"] = {
model = "models/metrostroi_train/81-722/722_rvclight.mdl",
pos = Vector(0,0,0),
ang = Angle(0,0,0),
color = Color(255,200,150),
hideseat = 0.8,
}
ENT.ClientProps["otsek1"] = {
model = "models/metrostroi_train/81-722/81-722_otsek1.mdl",
pos = Vector(-454,-54.6,-29.2),
ang = Angle(0,-90,0),
hideseat=1.7,
}
ENT.ClientProps["otsek2"] = {
model = "models/metrostroi_train/81-722/81-722_otsek2.mdl",
pos = Vector(-454,54.4,-29.2),
ang = Angle(0,-90,0),
hideseat=1.7,
}
--------------------------------------------------------------------------------
-- Add doors
--------------------------------------------------------------------------------
--[[ local function GetDoorPosition(i,k,j)
if j == 0
then return Vector(377.0 - 36.0 + 1*(k) - 230*i,-64*(1-2*k),-10)
else return Vector(377.0 - 36.0 + 1*(k) - 230*i,-64*(1-2*k),-10)
end
end
for i=0,3 do
for k=0,1 do
ENT.ClientProps["door"..i.."x"..k.."a"] = {
model = "models/metrostroi_train/81-722/81-722_door_l.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-722/81-722_door_r.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-722/81-722_doors_pos1.mdl",
pos = Vector( 341.539,63.171,-11.1),
ang = Angle(0,-90,0),
hide = 2.0,
}
ENT.ClientProps["door1x1"] = {
model = "models/metrostroi_train/81-722/81-722_doors_pos2.mdl",
pos = Vector( 111.38,63.171,-11.1),
ang = Angle(0,-90,0),
hide = 2.0,
}
ENT.ClientProps["door2x1"] = {
model = "models/metrostroi_train/81-722/81-722_doors_pos3.mdl",
pos = Vector(-117.756,63.171,-11.1),
ang = Angle(0,-90,0),
hide = 2.0,
}
ENT.ClientProps["door3x1"] = {
model = "models/metrostroi_train/81-722/81-722_doors_pos4.mdl",
pos = Vector(-348.72,63.171,-11.1),
ang = Angle(0,-90,0),
hide = 2.0,
}
ENT.ClientProps["door0x0"] = {
model = "models/metrostroi_train/81-722/81-722_doors_pos4.mdl",
pos = Vector( 341.539,-63.171,-11.1),
ang = Angle(0,90,0),
hide = 2.0,
}
ENT.ClientProps["door1x0"] = {
model = "models/metrostroi_train/81-722/81-722_doors_pos3.mdl",
pos = Vector( 111.38,-63.171,-11.1),
ang = Angle(0,90,0),
hide = 2.0,
}
ENT.ClientProps["door2x0"] = {
model = "models/metrostroi_train/81-722/81-722_doors_pos2.mdl",
pos = Vector(-117.756,-63.171,-11.1),
ang = Angle(0,90,0),
hide = 2.0,
}
ENT.ClientProps["door3x0"] = {
model = "models/metrostroi_train/81-722/81-722_doors_pos1.mdl",
pos = Vector(-348.72,-63.171,-11.1),
ang = Angle(0,90,0),
hide = 2.0,
}
ENT.ClientProps["door_cab_m"] = {
model = "models/metrostroi_train/81-722/81-722_door_cab_m.mdl",
pos = Vector(377.9,-45.5,-10.75),
ang = Angle(0,-90+0.45,-0.15),
hide=2,
}
ENT.ClientProps["door_cab_l"] = {
model = "models/metrostroi_train/81-722/81-722_door_cab_l.mdl",
pos = Vector(420, 58.3,-1),
ang = Angle(0,-90,0),
hide=2,
}
ENT.ClientProps["door_cab_r"] = {
model = "models/metrostroi_train/81-722/81-722_door_cab_r.mdl",
pos = Vector(419.4,-58.3,-1),
ang = Angle(0,-90,0),
hide=2,
}
ENT.ClientProps["door_cab_t"] = {
model = "models/metrostroi_train/81-722/81-722_door_cab_t.mdl",
pos = Vector(-466.7,18,-9),
ang = Angle(0,-90,-0.15),
hide=2,
}
ENT.ButtonMap["Vityaz"] = {
pos = Vector(478.57,0+11.1,-5.7),
ang = Angle(0,-90,66),
width = 800,
height = 600,
scale = 0.02*0.62,
sensor = true,
system = "MFDU",
hideseat=0.2,
buttons = {
{ID = "!VityazLamp",x=-40, y=690, radius=8, model = {
lamp = {
model = "models/metrostroi_train/81-502/lamps/svetodiod_small_502.mdl",
var="VityazLamp",
z=-14,
color=Color(175,250,20)
},
sprite = {bright=0.15,size=0.15,scale=0.03,vscale=0.02,color=Color(100,255,20),z=5}
}},
}
}
ENT.ButtonMap["BMCIK"] = {
pos = Vector(470.892,41.545,-6.23),
ang = Angle(0.2,-64.12,67),
width = 1280,
height = 800,
scale = 0.0089,
sensor = true,
system = "BMCIK",
hideseat = 0.2,
hide = true
}
for i=1,3 do
ENT.ClientProps["route_number"..i] = {
model = "models/metrostroi_train/81-722/digits/digit.mdl",
pos = Vector(477.58,41.85-(i-1)*0.5,-2.82),
ang = Angle(0,180,0),
color=Color(255,115,91),
hideseat=0.2,
}
end
ENT.ButtonMap["RouteNumberSet"] = {
pos = Vector(477,42.6,-2.75),
ang = Angle(0,-90,0),
width = 30,
height = 20,
scale = 0.085,
buttons = {
{ID = "RouteNumber1Set",x=0,y=0,w=10,h=10, tooltip="Первая цифра"},
{ID = "RouteNumber2Set",x=10,y=0,w=10,h=10, tooltip="Вторая цифра"},
{ID = "RouteNumber3Set",x=20,y=0,w=10,h=10, tooltip="Третья цифра"},
{ID = "RouteNumber13",x=5,y=10,w=20,h=10, tooltip="Правая и левая кнопки\n(удерживать для настройки яркости)"},
}
}
ENT.ButtonMap["TNM"] = {
pos = Vector(485.4,32.62,-4.9),
ang = Angle(0,95,88),
width = 203,
height = 115,
scale = 0.06,
hide=2
}
ENT.ButtonMap["BMTS"] = {
pos = Vector(473.8,-11.85,45.2-0.5),
ang = Angle(0,90,90),
width = 512,
height = 80,
scale = 0.0975,
hide = 2
}
ENT.ButtonMap["BIT1"] = {
pos = Vector(-455.37,-10.92504,52.35969),
ang = Angle(0,90,90),
width = 1024,
height = 192,
scale = 0.026947,
hideseat = 1.5
}
ENT.ButtonMap["BIT2"] = {
pos = Vector(1.55365,-10.92493,51.99417),
ang = Angle(0,90,97),
width = 1024,
height = 192,
scale = 0.026947,
hideseat = 1.5
}
ENT.ButtonMap["BIT3"] = {
pos = Vector(-4.83291,10.92509,51.99417),
ang = Angle(0,-90,97),
width = 1024,
height = 192,
scale = 0.026947,
hideseat = 1.5
}
ENT.ButtonMap["BIT4"] = {
pos = Vector(377.70719,16.66898,52.35969),
ang = Angle(0,-90,90),
width = 1024,
height = 192,
scale = 0.026947,
hideseat = 1.5
}
ENT.ButtonMap["SarmatButtons"] = {
pos = Vector(476.2,30.2,-6.4),
ang = Angle(0.2,-64,67),
width = 26,
height = 108,
scale = 0.0625,
buttons = {
{ID = "SarmatUpSet",x=6,y=2,w=14,h=13, tooltip="БМЦИК: Вверх"},
{ID = "SarmatDownSet",x=6,y=2+13*1,w=14,h=13, tooltip="БМЦИК: Вниз"},
{ID = "SarmatEnterSet",x=6,y=2+13*2,w=14,h=13, tooltip="БМЦИК: Enter"},
{ID = "SarmatEscSet",x=6,y=2+13*3,w=14,h=13, tooltip="БМЦИК: Esc"},
{ID = "SarmatF1Set",x=6,y=2+13*4,w=14,h=13, tooltip="БМЦИК: F1"},
{ID = "SarmatF2Set",x=6,y=2+13*5,w=14,h=13, tooltip="БМЦИК: F2"},
{ID = "SarmatF3Set",x=6,y=2+13*6,w=14,h=13, tooltip="БМЦИК: F3"},
{ID = "SarmatF4Set",x=6,y=2+13*7,w=14,h=13, tooltip="БМЦИК: F4"},
}
}
ENT.ButtonMap["BMP"] = {
pos = Vector(468.5,25,-15.43),
ang = Angle(0,-90,7),
width = 36,
height = 36,
scale = 0.0625,
buttons = {
{ID = "SarmatPathSet",x=6,y=4,w=13,h=14, tooltip="БМЦИК: Путь"},
{ID = "SarmatLineSet",x=6,y=18,w=13,h=14, tooltip="БМЦИК: Линия"},
{ID = "!SarmatLineLamp",x=7, y=19.5, radius=4, tooltip="БМЦИК: Светодиод Линия", model = {
lamp = {
speed=16,
model = "models/metrostroi_train/81-502/lamps/svetodiod_small_502.mdl",
var="BMCIK:LineEnabled",
z=-1.5,
color=Color(255,0,0),
scale = 0.5
},
sprite = {bright=0.2,size=0.15,scale=0.02,vscale=0.02,color=Color(255,0,0),z=0}
}},
{ID = "SarmatZeroSet",x=19,y=4,w=13,h=14, tooltip="БМЦИК: >0<"},
{ID = "SarmatStartSet",x=19,y=18,w=13,h=14, tooltip="БМЦИК: Пуск"},
}
}
ENT.Lights = {
-- Headlight glow
[1] = { "headlight", Vector(492,0,-37), Angle(0,0,0), Color(200,200,255), fov=90 ,brightness = 6, texture = "models/metrostroi_train/equipment/headlight2",shadows = 1,headlight=true},
[2] = { "headlight", Vector(493+15,0,60), Angle(0,0,0), Color(255,10,0), fov=140 ,brightness = 2, farz=450,texture = "models/metrostroi_train/equipment/headlight2",shadows = 0,backlight=true},
[31] = { "light", Vector(493 , -60, -36), Angle(0,0,0), Color(200,255,255), brightness = 0.5, scale = 2.5, texture = "sprites/light_glow02.vmt" },
[32] = { "light", Vector(493 , 62, -36), Angle(0,0,0), Color(200,255,255), brightness = 0.5, scale = 2.5, texture = "sprites/light_glow02.vmt" },
[33] = { "light", Vector(490, -65, 15), Angle(0,0,0), Color(255,50,50), brightness = 0.2, scale = 4, texture = "sprites/light_glow02.vmt" },
[34] = { "light", Vector(489, 60, 15), Angle(0,0,0), Color(255,50,50), brightness = 0.2, scale = 4, texture = "sprites/light_glow02.vmt" },
--SOSD
[3] = { "headlight", Vector( 425,-65,-65), Angle(25,-90,0),Color(255,255,255),brightness = 0.5,distance = 400 ,fov=120,shadows = 1 },
-- Cabin
[10] = { "dynamiclight",Vector( 440, 0, 14), Angle(0,0,0), Color(255,255,255), brightness = 0.25, distance = 550 },
-- Interior
[11] = { "dynamiclight",Vector( 180+30, 0, -5), Angle(0,0,0), Color(230,230,255), brightness = 3, distance = 260},
[12] = { "dynamiclight",Vector( -50+30, 0, -5), Angle(0,0,0), Color(230,230,255), brightness = 3, distance = 260},
[13] = { "dynamiclight",Vector(-280+30, 0, -5), Angle(0,0,0), Color(230,230,255), brightness = 3, distance = 260},
-- Console
[14] = { "headlight", Vector(473.5,-9.71,-9.30), Angle(81,0,0), Color(200,110,20), farz = 8.6, nearz = 1, shadows = 1, brightness = 10.0, fov = 130},
[15] = { "headlight", Vector(476.8,-7.04,-5.06), Angle(81,0,0), Color(200,110,20), farz = 8.6, nearz = 1, shadows = 1, brightness = 10.0, fov = 130},
[16] = { "headlight", Vector(474.9,-3,-2.45), Angle(110,-13,0), Color(180,180,255), farz = 24.6, nearz = 2, shadows = 1, brightness = 1, fov = 172.99},
[17] = { "headlight", Vector(471.9,30,-1.75), Angle(110,22,0), Color(180,180,255), farz =26.9, nearz = 2, shadows = 1, brightness = 2, fov = 171.99},
-- Side lights
[20] = { "light", Vector(-46.4, 66,28.1)+Vector(0, 0,4.1), Angle(0,0,0), Color(254,254,254), brightness = 0.4, scale = 0.1, texture = "sprites/light_glow02.vmt" },
[21] = { "light", Vector(-46.4, 66,28.1)+Vector(0, 0.4,-0), Angle(0,0,0), Color(254,210,18), brightness = 0.3, scale = 0.1, texture = "sprites/light_glow02.vmt" },
[22] = { "light", Vector(-46.4, 66,28.1)+Vector(0, 0.8,-4.1), Angle(0,0,0), Color(40,240,122), brightness = 0.3, scale = 0.1, texture = "sprites/light_glow02.vmt" },
[23] = { "light", Vector(-46.4,-66,28.1)+Vector(0,-0,4.1), Angle(0,0,0), Color(254,254,254), brightness = 0.4, scale = 0.1, texture = "sprites/light_glow02.vmt" },
[24] = { "light", Vector(-46.4,-66,28.1)+Vector(0,-0.4,-0), Angle(0,0,0), Color(254,210,18), brightness = 0.3, scale = 0.1, texture = "sprites/light_glow02.vmt" },
[25] = { "light", Vector(-46.4,-66,28.1)+Vector(0,-0.8,-4.1), Angle(0,0,0), Color(40,240,122), brightness = 0.3, scale = 0.1, texture = "sprites/light_glow02.vmt" },
lamps_cab_e = {"light", Vector(444,-42.4,46), Angle(0,0,0),Color(255,255,255),brightness = 0.4, scale = 0.8, texture = "sprites/light_glow02", hidden="lamps_cab_e"},
lamps_cab_f = {"light", Vector(444, 42.4,46), Angle(0,0,0),Color(255,255,255),brightness = 0.4, scale = 0.8, texture = "sprites/light_glow02", hidden="lamps_cab_f"},
}
function ENT:Initialize()
self.BaseClass.Initialize(self)
self.Vityaz = self:CreateRT("722MFDU",1024,1024)
self.BITScr = self:CreateRT("722BIT",1024,256)
self.BMCIKScr = self:CreateRT("722BMCIK",2048,1024)
self.TNMScr = self:CreateRT("722TNM",256,128)
self.BMTSScr = self:CreateRT("722BMTS",512,128)
self.ReleasedPdT = 0
self.CraneRamp = 0
self.CraneRRamp = 0
self.ReleasedPdT = 0
self.EmergencyValveRamp = 0
self.EmergencyValveEPKRamp = 0
self.EmergencyBrakeValveRamp = 0
self.FrontLeak = 0
self.RearLeak = 0
self.PreviousRingState = false
self.PreviousCompressorState = false
self.CompressorVol = 0
self.ParkingBrake = 0
self.BrakeCylinder = 0.5
end
function ENT:UpdateWagonNumber()
local count = math.max(4,math.ceil(math.log10(self.WagonNumber+1)))
for i=0,4 do
--self:ShowHide("TrainNumberL"..i,i<count)
--self:ShowHide("TrainNumberR"..i,i<count)
--if i< count then
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(60+i*6.6-count*6.6/2,66.3,18)))
leftNum:SetSkin(num)
end
if IsValid(rightNum) then
rightNum:SetPos(self:LocalToWorld(Vector(53-i*6.6+count*6.6/2,-66.3,18)))
rightNum:SetSkin(num)
end
--end
end
end
local Cpos = {
0,0.24,0.5,0.55,0.6,1
}
local conPos = {
0,0.22,0.41,0.6,0.8,1
}
local function getBitValue(value, offset, bitCount)
local mask = bit.lshift(bit.lshift(1,bitCount)-1,offset)
return bit.rshift(bit.band(value,mask),offset)
end
function ENT:Think()
self.BaseClass.Think(self)
if not self.RenderClientEnts or self.CreatingCSEnts then
return
end
local sarmatInvert = self:GetNW2Bool("SarmatInvert")
if not self.PassSchemesDone then
local sarmat,sarmatr = self.ClientEnts.sarmat,self.ClientEnts.sarmatr
local scheme = Metrostroi.Skins["722_schemes"] and Metrostroi.Skins["722_schemes"][self.Scheme]
if IsValid(sarmat) and IsValid(sarmatr) and scheme then
if sarmatInvert then
sarmat:SetSubMaterial(0,scheme[2])
sarmatr:SetSubMaterial(0,scheme[1])
else
sarmat:SetSubMaterial(0,scheme[1])
sarmatr:SetSubMaterial(0,scheme[2])
end
self.PassSchemesDone = true
end
end
if self.Scheme ~= self:GetNW2Int("Scheme",1) then
self.PassSchemesDone = false
self.Scheme = self:GetNW2Int("Scheme",1)
end
if self.InvertSchemes ~= sarmatInvert then
self.PassSchemesDone=false
self.InvertSchemes = sarmatInvert
end
local headlight = self:GetPackedRatio("Headlight")
self:SetLightPower(1,headlight>0,headlight)
self:SetLightPower(31,headlight>0,headlight)
self:SetLightPower(32,headlight>0,headlight)
if IsValid(self.GlowingLights[1]) then
if headlight < 1 and self.GlowingLights[1]:GetFarZ() ~= 7000 then
self.GlowingLights[1]:SetFarZ(7000)
end
if headlight== 1 and self.GlowingLights[1]:GetFarZ() ~= 8192 then
self.GlowingLights[1]:SetFarZ(8192)
end
end
self:ShowHide("HeadLightsH",headlight==0.5)
self:ShowHide("HeadLights",headlight>0.5)
local redlights = self:GetPackedBool("RedLights")
self:ShowHide("RedLights",redlights)
self:SetLightPower(2,redlights)
self:SetLightPower(33,redlights)
self:SetLightPower(34,redlights)
self:SetLightPower(3,self:GetPackedBool("SOSD"))
local cablight = self:GetPackedRatio("CabLights")
self:ShowHide("lamps_cab_e",cablight>0)
self:ShowHide("lamps_cab_f",cablight>0.3)
self:SetLightPower(10,cablight>0,cablight)
self:SetLightPower("lamps_cab_e",cablight>0,cablight)
self:SetLightPower("lamps_cab_f",cablight>0.3,cablight)
local passlight = self:GetPackedRatio("SalonLighting")
self:ShowHideSmooth("lamps_salon",passlight)
self:SetLightPower(11,passlight>0,passlight)
self:SetLightPower(12,passlight>0,passlight)
self:SetLightPower(13,passlight>0,passlight)
local panelLightning = self:GetPackedBool("PanelLighting")
self:ShowHide("led",panelLightning)
self:SetLightPower(14,panelLightning)
self:SetLightPower(15,panelLightning)
self:SetLightPower(16,panelLightning)
self:SetLightPower(17,panelLightning)
local BortLSD,BortPneumo,BortBV = self:GetPackedBool("BortLSD"),self:GetPackedBool("BortPneumo"),self:GetPackedBool("BortBV")
self:ShowHide("bortlamp_lsd",BortLSD)
self:ShowHide("bortlamp_pneumo",BortPneumo)
self:ShowHide("bortlamp_bv",BortBV)
self:SetLightPower(20,BortLSD,1)
self:SetLightPower(23,BortLSD,1)
self:SetLightPower(21,BortPneumo,1)
self:SetLightPower(24,BortPneumo,1)
self:SetLightPower(22,BortBV,1)
self:SetLightPower(25,BortBV,1)
--ANIMS
self:Animate("brake_line", self:GetPackedRatio("BLPressure"), 0.037, 0.795, 256,2)
self:Animate("train_line", self:GetPackedRatio("TLPressure"), 0.037, 0.795, 4096,2)
--print(math.max(0,(self:GetPackedRatio("BC")-self.BrakeCylinder)*math.Rand(-1,1)*1.5))
local anim = self:Animate("brake_cylindera", self:GetPackedRatio("BCPressure"), 0, 1, 32,1)
self.BrakeCylinder = math.Clamp(self.BrakeCylinder + (anim-self.BrakeCylinder)*self.DeltaTime*5 - math.min(0,(self.BrakeCylinder-anim)*math.Rand(0,1)*10)*(self.DeltaTime*33),0,1)
self:Animate("brake_cylinder", self.BrakeCylinder, 0.016, 0.78, 1000,5)
self:Animate("volt_lv",self:GetPackedRatio("LV"),1,0.68,92,2)
self:Animate("volt_hv",self:GetPackedRatio("HighVoltage"),1,0.68,92,2)
self:Animate("controller", conPos[self:GetPackedRatio("ControllerPosition")+4], 0.316, 0.66, 2,false)
--self:Animate("controller", (self:GetPackedRatio("Controller")+3)/6, 0.75, 0.15, 2,false)
--self:SetPackedRatio("BL", self.Pneumatic.BrakeLinePressure/16.0)
--self:SetPackedRatio("TL", self.Pneumatic.TrainLinePressure/16.0)
--self:SetPackedRatio("BC", math.min(3.2,self.Pneumatic.BrakeCylinderPressure)/6.0)
self:Animate("km013", Cpos[self:GetPackedRatio("CranePosition")] or 0, 0.5, 0.15, 2,false)
self:Animate("PB", self:GetPackedBool("PB") and 1 or 0,0,0.2, 8,false)
self:Animate("UAVA", self:GetPackedBool("UAVA") and 1 or 0, 0, 0.25, 6,false)
self:Animate("EmergencyBrakeValve", self:GetPackedBool("EmergencyBrakeValve") and 1 or 0, 0, 0.3, 6,false)
local doorAlarm = self:GetNW2Int("BNT:DoorAlarm")
self:SetSoundState("door_alarm",getBitValue(doorAlarm,0,1),1)
self:ShowHide("doorl_l",getBitValue(doorAlarm,1,1) > 0)
self:ShowHide("doorl_r",getBitValue(doorAlarm,2,1) > 0)
--Радио
self:ShowHide("rvs",self:GetPackedBool("RadioRVS"))
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)
local bntL = self:GetNW2Int("BNT:Left")
local bntR = self:GetNW2Int("BNT:Right")
local bntPowerL = getBitValue(bntL,0,1)
local bntPowerR = getBitValue(bntR,0,1)
local initL,initR = getBitValue(bntL,1,1) > 0, getBitValue(bntR,1,1) > 0
local currL,currR = getBitValue(bntL,9,6),getBitValue(bntR,9,6)
local invL,invR = getBitValue(bntL,2,1) > 0, getBitValue(bntR,2,1) > 0
if sarmatInvert then
invL = not invL
invR = not invR
end
if initL then
local nextL = getBitValue(bntL,3,6)
if nextL == 0 then nextL = -1 end
if CurTime()%2>1 then
currL = currL + nextL
end
end
if initR then
local nextR = getBitValue(bntR,3,6)
if nextR == 0 then nextR = -1 end
if CurTime()%2>1 then
currR = currR + nextR
end
end
for i=1,4 do
self:ShowHide("led_l_f"..i,not invL)
self:ShowHide("led_l_b"..i,invL)
self:ShowHide("led_r_f"..i,not invR)
self:ShowHide("led_r_b"..i,invR)
if IsValid(self.ClientEnts["led_l_f"..i]) then self.ClientEnts["led_l_f"..i]:SetSkin(math.Clamp(currL-((i-1)*8),0,8)) end
if IsValid(self.ClientEnts["led_l_b"..i]) then self.ClientEnts["led_l_b"..i]:SetSkin(math.Clamp(currL-((i-1)*8),0,8)) end
if IsValid(self.ClientEnts["led_r_f"..i]) then self.ClientEnts["led_r_f"..i]:SetSkin(math.Clamp(currR-((i-1)*8),0,8)) end
if IsValid(self.ClientEnts["led_r_b"..i]) then self.ClientEnts["led_r_b"..i]:SetSkin(math.Clamp(currR-((i-1)*8),0,8)) end
end
local tnmState = self:GetNW2Int("TNM:State",0)
if tnmState > 0 then
local rn = self:GetNW2Int("TNM:Number",0)
local hide = tnmState==2 and CurTime()%1.2>0.3 or tnmState==1
for i=1,3 do
self:ShowHide("route_number"..i,hide)
if IsValid(self.ClientEnts["route_number"..i]) then
local number = math.floor(rn/10^(3-i)) % 10
self.ClientEnts["route_number"..i]:SetSkin(number)
end
end
else
for i=1,3 do
self:ShowHide("route_number"..i,false)
end
end
local playL = false
local playR = false
local anim = 0--math.Round(CurTime()%5/5)
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
if not self.DoorStates then self.DoorStates = {} end
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
--self:PlayOnce("doors","",1,1)
else
self:PlayOnce(sid.."c","",0.15,math.Rand(0.9,1.1))
end
self.DoorStates[id] = (state ~= 1 and state ~= 0)
end
if (state ~= 1 and state ~= 0) and k==1 then playL = true end
if (state ~= 1 and state ~= 0) and k==0 then playR = true end
local n_l = "door"..i.."x"..k--.."a"
--local n_r = "door"..i.."x"..k.."b"
self:Animate(n_l,state,0,1, 0.5,false)--0.8 + (-0.2+0.4*math.random()),0)
--self:Animate(n_r,state,0,1, 0.5,false)--0.8 + (-0.2+0.4*math.random()),0)
end
end
if playL ~= self.LeftDoorState then
if playL then self:PlayOnce("doors","",0.6,1) end
self.LeftDoorState = playL
end
if playR ~= self.RightDoorState then
if playR then self:PlayOnce("doors","",0.6,1) end
self.RightDoorState = playR
end
if playL or playR then
--if not self:PlayOnce("doors","",1,1)
self.DoorSoundState = math.Clamp((self.DoorSoundState or 0) + 0.75*self.DeltaTime,0,0.5)
else
self.DoorSoundState = math.Clamp((self.DoorSoundState or 0) - 0.5*self.DeltaTime,0,0.5)
end
--print(self.DoorSoundState)
self:SetSoundState("doorl",self.DoorSoundState or 0,1)
local door_m = self:GetPackedBool("PassengerDoor")
local door_l = self:GetPackedBool("CabinDoorLeft")
local door_r = self:GetPackedBool("CabinDoorRight")
local door_t = self:GetPackedBool("RearDoor")
local door_cab_m = self:Animate("door_cab_m",door_m and 1 or -0.05,0,0.25, 8, 0.05)
local door_cab_l = self:Animate("door_cab_l",door_l and 1 or -0.1,0,0.344, 4, 0.5)
local door_cab_r = self:Animate("door_cab_r",door_r and 1 or -0.1,1,0.7, 4, 0.5)
local door_cab_t = self:Animate("door_cab_t",door_t and 1 or -0.05,1,0.75, 8, 0.05)
local door1s = (door_cab_m > 0 or door_m)
if self.Door1 ~= door1s then
self.Door1 = door1s
self:PlayOnce("PassengerDoor","bass",door1s and 1 or 0)
end
local door2s = (door_cab_l > 0 or door_l)
if self.Door2 ~= door2s then
self.DoorCL = door_l
self.Door2 = door2s
self:PlayOnce("CabinDoorLeft","bass",door2s and 1 or 0)
end
local door3s = (door_cab_r < 1 or door_r)
if self.Door3 ~= door3s then
self.DoorCR = door_r
self.Door3 = door3s
self:PlayOnce("CabinDoorRight","bass",door3s and 1 or 0)
end
local door4s = (door_cab_t < 1 or door_t)
if self.Door4 ~= door4s then
self.Door4 = door4s
self:PlayOnce("RearDoor","bass",door4s and 1 or 0)
end
local dT = self.DeltaTime
local parking_brake = math.max(0,-self:GetPackedRatio("ParkingBrakePressure_dPdT",0))
self.ParkingBrake = self.ParkingBrake+(parking_brake-self.ParkingBrake)*dT*10
self:SetSoundState("parking_brake",self.ParkingBrake,1.4)
local dPdT = self:GetPackedRatio("BrakeCylinderPressure_dPdT")
self.ReleasedPdT = math.Clamp(self.ReleasedPdT + 2*(-dPdT-self.ReleasedPdT)*dT,0,1)
local release1 = math.Clamp(self.ReleasedPdT,0,1)^2
self:SetSoundState("release",release1,1)
self:SetSoundState("ring",self:GetPackedBool("RingEnabledBARS") and 1 or 0,1)
self:SetSoundState("ring2",self:GetPackedBool("RingEnabled") and 1 or 0,1)
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)
local ramp = self:GetPackedRatio("Crane_dPdT",0)
if ramp > 0 then
self.CraneRamp = self.CraneRamp + ((0.2*ramp)-self.CraneRamp)*dT
else
self.CraneRamp = self.CraneRamp + ((0.9*ramp)-self.CraneRamp)*dT
end
self.CraneRRamp = math.Clamp(self.CraneRRamp + 1.0*((1*ramp)-self.CraneRRamp)*dT,0,1)
self:SetSoundState("crane013_release",self.CraneRRamp^1.5,1.0)
self:SetSoundState("crane013_brake",math.Clamp(-self.CraneRamp*1.5,0,1)^1.3,1.0)
self:SetSoundState("crane013_brake2",math.Clamp(-self.CraneRamp*1.5-0.95,0,1.5)^2,1.0)
local emergencyValveEPK = self:GetPackedRatio("EmergencyValveEPK_dPdT",0)
self.EmergencyValveEPKRamp = math.Clamp(self.EmergencyValveEPKRamp + 1.0*((0.5*emergencyValveEPK)-self.EmergencyValveEPKRamp)*dT,0,1)
if self.EmergencyValveEPKRamp < 0.01 then self.EmergencyValveEPKRamp = 0 end
self:SetSoundState("epk_brake",self.EmergencyValveEPKRamp,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+math.min(0.4,self.EmergencyBrakeValveRamp*0.8))
local emergencyValve = self:GetPackedRatio("EmergencyValve_dPdT", 0)^0.4*1.2
self.EmergencyValveRamp = math.Clamp(self.EmergencyValveRamp + (emergencyValve-self.EmergencyValveRamp)*dT*16,0,1)
self:SetSoundState("emer_brake",self.EmergencyValveRamp,1.0)
local state = self:GetPackedBool("CompressorWork")
if self.CompressorVol < 1 and state then
self.CompressorVol = math.min(1,self.CompressorVol + 5*dT)
elseif self.CompressorVol > 0 and not state then
self.CompressorVol = math.max(0,self.CompressorVol - 3*dT)
end
--if state then
self:SetSoundState("compressor",self.CompressorVol,0.8+0.2*self.CompressorVol)
--else
--self:SetSoundState("compressor",0,0)
--end
self.PreviousCompressorState = state
local rollingi = math.min(1,self.TunnelCoeff+math.Clamp((self.StreetCoeff-0.82)/0.5,0,1))
local rollings = math.max(self.TunnelCoeff*0.6,self.StreetCoeff)
local tunstreet = (rollingi+rollings*0.2)
local speed = self:GetPackedRatio("Speed", 0)
local rol10 = math.Clamp(speed/25,0,1)*(1-math.Clamp((speed-25)/8,0,1))
local rol45 = math.Clamp((speed-23)/8,0,1)*(1-math.Clamp((speed-50)/8,0,1))
local rol45p = Lerp((speed-25)/25,0.8,1)
local rol60 = math.Clamp((speed-50)/8,0,1)*(1-math.Clamp((speed-65)/5,0,1))
local rol60p = Lerp((speed-50)/15,0.8,1)
local rol70 = math.Clamp((speed-65)/5,0,1)
local rol70p = Lerp((speed-65)/25,0.8,1.2)
self:SetSoundState("rolling_10",rollingi*rol10,1)
self:SetSoundState("rolling_45",rollingi*rol45,1)
self:SetSoundState("rolling_60",rollingi*rol60,1)
self:SetSoundState("rolling_70",rollingi*rol70,1)
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
--local state = (RealTime()%4/3)^1.5
--local strength = 1--self:GetPackedRatio("asyncstate")*(1-math.Clamp((speed-15)/15,0,1))
local state = self:GetPackedRatio("asynccurrent")--^1.5--RealTime()%2.5/2
local strength = self:GetPackedRatio("asyncstate")*(1-math.Clamp((speed-15)/15,0,1))
self:SetSoundState("test_async1", tunstreet*math.Clamp((state)/0.3+0.2,0,1)*strength, 0.6+math.Clamp(state,0,1)*0.4)
self:SetSoundState("test_async1_2",tunstreet*math.Clamp((state-0.75)/0.05,0,1)*strength, 0.6+math.Clamp((state-0.8)/0.2,0,1)*0.14)
self:SetSoundState("test_async1_3",tunstreet*math.Clamp((state-0.7)/0.1,0,1)*strength, 0.87)
self:SetSoundState("test_async2", tunstreet*math.Clamp(math.max(0,(state)/0.3+0.2),0,1)*strength, 0.55+math.Clamp(state,0,1)*0.45)
self:SetSoundState("test_async3", tunstreet*math.Clamp(math.max(0,(state-0.7)/0.1),0,1)*strength, 1)
self:SetSoundState("test_async3_2", tunstreet*math.Clamp((state-0.415)/0.1,0,1)*(1-math.Clamp((state-1.1)/0.3,0,0.5))*strength, 0.48+math.Clamp(state,0,1)*0.72)
self:SetSoundState("battery_off_loop", self:GetPackedBool("BattPressed") and 1 or 0,1)
self:SetSoundState("async_p2", tunstreet*(math.Clamp((speed-5)/5,0,1)*0.1+math.Clamp((speed-14)/10,0,1)*0.9)*(1-math.Clamp((speed-27)/4,0,1))*self:GetPackedRatio("asyncstate"), speed/36)
self:SetSoundState("async_p3", tunstreet*(math.Clamp((speed-7)/5,0,1)*0.1+math.Clamp((speed-17)/10,0,1)*0.9)*(1-math.Clamp((speed-30)/4,0,1))*self:GetPackedRatio("asyncstate"), speed/42)
self:SetSoundState("engine_loud", tunstreet*math.Clamp((speed-10)/15,0,1)*(1-math.Clamp((speed-30)/40,0,0.6))*self:GetPackedRatio("asyncstate"), speed/20)
self:SetSoundState("chopper", tunstreet*self:GetPackedRatio("chopper"), 1)
local work = self:GetPackedBool("AnnPlay")
local UPO = work and self.Announcer.AnnTable == "AnnouncementsUPO"
local noise = self:GetNW2Int("AnnouncerNoise")
local volBMCIK = self:GetNW2Int("BMCIK:VolCab",0)/10
local volBNT = self:GetNW2Int("BNT:Volumes",0)
local volSalon = 0
local noisevolume = 0
if UPO then
noisevolume = self:GetNW2Float("UPONoiseVolume",1)
volSalon = getBitValue(volBNT,4,4)/10*self:GetNW2Float("UPOVolume",1)
else
volSalon = getBitValue(volBNT,0,4)/10
end
for k,v in ipairs(self.AnnouncerPositions) do
local targetVol = 0
if work then
if v[4] == 0x4C then -- [L]eft side
targetVol = v[3]*volSalon*bntPowerL
elseif v[4] == 0x52 then -- [R]ight side
targetVol = v[3]*volSalon*bntPowerR
elseif v[4] == 0x43 then -- [C]abin
targetVol = v[3]*volBMCIK
end
end
self:SetSoundState("announcer_noiseW"..k,targetVol*noisevolume,1)
for i=1,3 do
self:SetSoundState(Format("announcer_noise%d_%d",i,k),(UPO and i==noise) and targetVol*noisevolume or 0,1)
end
if IsValid(self.Sounds["announcer"..k]) then self.Sounds["announcer"..k]:SetVolume(targetVol) end
end
end
-- TODO: Вспомнить Глебу, зачем вообще эта функция реализована
-- В обновлении 2018 года её нет
-- function ENT:OnAnnouncer(volume)
-- local work = self:GetPackedBool("AnnPlay")
-- local UPO = work and self:GetPackedBool("AnnPlayUPO")
-- return work and volume*(UPO and self:GetNW2Float("UPOVolume",1) or 1) or 0
-- end
function ENT:Draw()
self.BaseClass.Draw(self)
end
function ENT:DrawPost()
self.RTMaterial:SetTexture("$basetexture", self.Vityaz)
self:DrawOnPanel("Vityaz",function(...)
surface.SetMaterial(self.RTMaterial)
surface.SetDrawColor(255,255,255)
surface.DrawTexturedRectRotated(512,512,1024,1024,0)
end)
self.RTMaterial:SetTexture("$basetexture", self.BMCIKScr)
self:DrawOnPanel("BMCIK",function(...)
surface.SetMaterial(self.RTMaterial)
surface.SetDrawColor(255,255,255,255)
surface.DrawTexturedRectRotated(1024,512,2048,1024,0)
end)
self.RTMaterial:SetTexture("$basetexture", self.BMTSScr)
self:DrawOnPanel("BMTS",function(...)
surface.SetDrawColor(255,255,255)
surface.SetMaterial(self.RTMaterial)
surface.DrawTexturedRectRotated(256,64,512,128,0)
end)
self.RTMaterial:SetTexture("$basetexture", self.BITScr)
surface.SetDrawColor(255,255,255,200)
for i=1,4 do
self:DrawOnPanel("BIT"..i,function(...)
surface.DrawTexturedRectRotated(512,128,1024,256,0)
end)
end
self.RTMaterial:SetTexture("$basetexture", self.TNMScr)
surface.SetDrawColor(255,255,255)
self:DrawOnPanel("TNM",function(...)
surface.SetMaterial(self.RTMaterial)
surface.SetDrawColor(255,255,255)
surface.DrawTexturedRectRotated(128,64,256,128,0)
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 soundid == "BatteryOn" and range > 0 then
return "battery_on_1",location,1,pitch
end
if soundid == "BatteryOff" then
return range > 0 and "battery_off_1" or "battery_off_2",location,1,pitch
end
return soundid,location,range,pitch
end
local dist = {
PPZ = 550,
PPZB = 550,
PVM = 550,
}
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()